diff --git a/README.md b/README.md
index 7342f0af8..477286111 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,9 @@ Mirai 是一个在全平台下运行,提供 QQ Android 和 TIM PC 协议支持
**[下载(download)](https://github.com/mamoe/mirai-console/releases)**
请下载最新的 `mirai-console-wrapper-x.x.x-all.jar`
-你也可以下载这里的一键安装包来快速启动mirai-console **[下载地址](https://suihou-my.sharepoint.com/:f:/g/personal/user18_5tb_site/ErWGr97FpPVDjkboIDmDAJkBID-23ZMNbTPggGajf1zvGw?e=51NZWM)**
+#### 对于Windows用户
+
+你可以下载这里的一键安装包来快速启动mirai-console,这是最简单的方法 **[下载地址](https://suihou-my.sharepoint.com/:f:/g/personal/user18_5tb_site/ErWGr97FpPVDjkboIDmDAJkBID-23ZMNbTPggGajf1zvGw?e=51NZWM)**
**请注意**
* 使用时请留意安装包里的说明文字
@@ -36,6 +38,10 @@ Mirai 是一个在全平台下运行,提供 QQ Android 和 TIM PC 协议支持
* 关于安装包本身的一切问题请到QQ群内反馈
* 如果上面的链接下载过慢,你可以到QQ群内高速下载
+#### 对于Linux用户
+
+运行本软件需要openjdk11,请在上面的链接下载`mirai-console-wrapper-x.x.x-all.jar`直接运行即可
+
#### 如何启动
如果是打包好的软件, 双击
如果是命令行运行, 请注意运行目录, 推荐cd到jar的文件夹下运行, 运行目录与Console的全部配置文件储存位置有关
diff --git a/buildSrc/src/main/kotlin/versions.kt b/buildSrc/src/main/kotlin/versions.kt
index e457291f9..18d4400a6 100644
--- a/buildSrc/src/main/kotlin/versions.kt
+++ b/buildSrc/src/main/kotlin/versions.kt
@@ -12,7 +12,7 @@ import org.gradle.kotlin.dsl.DependencyHandlerScope
object Versions {
object Mirai {
const val core = "1.0-RC"
- const val console = "0.4.11"
+ const val console = "0.5.0"
const val consoleGraphical = "0.0.7"
const val consoleWrapper = "1.0.0"
}
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsole.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsole.kt
index 6e130363a..6ebf428cf 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsole.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsole.kt
@@ -55,7 +55,7 @@ object MiraiConsole {
/**
* Console运行路径
*/
- var path: String = System.getProperty("user.dir")
+ lateinit var path: String
internal set
/**
@@ -68,19 +68,47 @@ object MiraiConsole {
private var started = false
+ @Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
+ @Suppress("FunctionName")
+ @JvmSynthetic
+ @JvmStatic
+ fun /* synthetic */`start$default`(
+ miraiConsole: MiraiConsole,
+ miraiConsoleUI: MiraiConsoleUI?,
+ string: String?,
+ string2: String?,
+ n: Int,
+ @Suppress("UNUSED_PARAMETER") `object`: Any?
+ ) {
+ @Suppress("NAME_SHADOWING")
+ var string = string
+
+ @Suppress("NAME_SHADOWING")
+ var string2 = string2
+ if (n and 2 != 0) {
+ string = "0.0.0"
+ }
+ if (n and 4 != 0) {
+ string2 = "0.0.0"
+ }
+ miraiConsole.start(miraiConsoleUI!!, string!!, string2!!)
+ }
+
/**
* 启动Console
*/
+ @JvmOverloads
fun start(
frontEnd: MiraiConsoleUI,
coreVersion: String = "0.0.0",
- consoleVersion: String = "0.0.0"
+ consoleVersion: String = "0.0.0",
+ path:String = System.getProperty("user.dir")
) {
if (started) {
return
}
started = true
-
+ this.path = path
/* 初始化前端 */
this.version = consoleVersion
this.frontEnd = frontEnd
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/command/DefaultCommands.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/command/DefaultCommands.kt
index 47116483d..1af0a57fd 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/command/DefaultCommands.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/command/DefaultCommands.kt
@@ -39,7 +39,7 @@ object DefaultCommands {
try {
MiraiConsole.frontEnd.prePushBot(account)
val bot = Bot(account, password) {
- fileBasedDeviceInfo()
+ fileBasedDeviceInfo(MiraiConsole.path + "/device.json")
this.loginSolver = MiraiConsole.frontEnd.createLoginSolver()
this.botLoggerSupplier = {
SimpleLogger("BOT $account]") { _, message, e ->
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginManager.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginManager.kt
index d06aae337..85de85b75 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginManager.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginManager.kt
@@ -29,7 +29,7 @@ import java.util.jar.JarFile
object PluginManager {
- internal val pluginsPath = (System.getProperty("user.dir") + "/plugins/").replace("//", "/").also {
+ internal val pluginsPath = (MiraiConsole.path + "/plugins/").replace("//", "/").also {
File(it).mkdirs()
}
@@ -372,6 +372,7 @@ object PluginManager {
return null
}
+
/**
* 根据插件名字找Jar中的文件
* null => 没找到
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginsLoader.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginsLoader.kt
index 04d11defd..692e9de59 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginsLoader.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugins/PluginsLoader.kt
@@ -103,15 +103,25 @@ internal class PluginClassLoader(
files: File,
private val pluginsLoader: PluginsLoader,
parent: ClassLoader
-) :
- URLClassLoader(arrayOf((files.toURI().toURL())), parent) {
+) {
private val classesCache = mutableMapOf?>()
+ private var classLoader: ClassLoader
- override fun findClass(name: String): Class<*>? {
- return this.findClass(name, true)
+ init {
+ classLoader = try {
+ //兼容Android
+ val loaderClass = Class.forName("dalvik.system.PathClassLoader")
+ loaderClass.getConstructor(String::class.java, ClassLoader::class.java)
+ .newInstance(files.absolutePath, parent) as ClassLoader
+ } catch (e: ClassNotFoundException) {
+ URLClassLoader(arrayOf((files.toURI().toURL())), parent)
+ }
}
- fun findClass(name: String, isSearchDependent: Boolean): Class<*>? {
+ fun loadClass(className: String): Class<*> = classLoader.loadClass(className)!!
+
+
+ fun findClass(name: String, isSearchDependent: Boolean = true): Class<*>? {
var clz: Class<*>? = null
// 缓存中找
if (classesCache.containsKey(name)) {
@@ -122,9 +132,9 @@ internal class PluginClassLoader(
if (isSearchDependent) {
clz = pluginsLoader.loadDependentClass(name)
}
- // 交给super去findClass
+ // 好像没有findClass,直接load
if (clz == null) {
- clz = super.findClass(name)
+ clz = classLoader.loadClass(name)
}
// 加入缓存
if (clz != null) {
@@ -137,8 +147,10 @@ internal class PluginClassLoader(
return clz
}
- override fun close() {
- super.close()
+ fun close() {
+ if (classLoader is URLClassLoader) {
+ (classLoader as URLClassLoader).close()
+ }
classesCache.clear()
}
}