修复 打包后ui脚本无法运行的问题

修复 打包后模块无法运行的问题
This commit is contained in:
hyb1996
2018-12-12 14:18:03 +08:00
parent c460425656
commit 05813499bc
33 changed files with 548 additions and 91 deletions

View File

@@ -23,8 +23,6 @@ import java.lang.IllegalStateException
*/
class AutoJs private constructor(application: Application) : com.stardust.autojs.AutoJs(application) {
private var mKey = ""
private var mInitVector = ""
init {
scriptEngineService.registerGlobalScriptExecutionListener(ScriptExecutionGlobalListener())
@@ -85,7 +83,6 @@ class AutoJs private constructor(application: Application) : com.stardust.autojs
super.initScriptEngineManager()
scriptEngineManager.registerEngine(JavaScriptSource.ENGINE) {
val engine = XJavaScriptEngine(application)
engine.setKey(mKey, mInitVector)
engine.runtime = createRuntime()
engine
}
@@ -98,11 +95,6 @@ class AutoJs private constructor(application: Application) : com.stardust.autojs
return runtime
}
fun setKey(key: String, vet: String) {
mKey = key
mInitVector = vet
}
companion object {
@SuppressLint("StaticFieldLeak")

View File

@@ -20,7 +20,7 @@ class ScriptExecutionGlobalListener : ScriptExecutionListener {
}
private fun onFinish(execution: ScriptExecution) {
val millis = execution.engine.getTag(ENGINE_TAG_START_TIME) as Long ?: return
val millis = execution.engine.getTag(ENGINE_TAG_START_TIME) as Long? ?: return
val seconds = (System.currentTimeMillis() - millis) / 1000.0
AutoJs.instance.scriptEngineService.globalConsole
.verbose(GlobalAppContext.getString(R.string.text_execution_finished), execution.source.toString(), seconds)

View File

@@ -2,20 +2,17 @@ package com.stardust.auojs.inrt.autojs
import android.content.Context
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine
import com.stardust.autojs.engine.encryption.ScriptEncryption
import com.stardust.autojs.script.EncryptedScriptFileHeader
import com.stardust.autojs.script.JavaScriptFileSource
import com.stardust.autojs.script.ScriptSource
import com.stardust.autojs.script.StringScriptSource
import com.stardust.pio.PFiles
import com.stardust.util.AdvancedEncryptionStandard
import java.io.File
import java.lang.Exception
import java.lang.IllegalStateException
import java.security.GeneralSecurityException
class XJavaScriptEngine(context: Context) : LoopBasedJavaScriptEngine(context) {
private var mKey = ""
private var mInitVector = ""
override fun execute(source: ScriptSource, callback: ExecuteCallback?) {
if (source is JavaScriptFileSource) {
@@ -32,17 +29,10 @@ class XJavaScriptEngine(context: Context) : LoopBasedJavaScriptEngine(context) {
private fun execute(file: File) {
val bytes = PFiles.readBytes(file.path)
try {
val source = AdvancedEncryptionStandard(mKey.toByteArray(), mInitVector).decrypt(bytes)
super.execute(StringScriptSource(file.name, String(source)))
super.execute(StringScriptSource(file.name, String(ScriptEncryption.decrypt(bytes, EncryptedScriptFileHeader.BLOCK_SIZE))))
} catch (e: GeneralSecurityException) {
e.printStackTrace()
}
}
fun setKey(key: String, initVector: String) {
mKey = key
mInitVector = initVector
}
}

View File

@@ -11,6 +11,7 @@ import com.stardust.auojs.inrt.BuildConfig
import com.stardust.auojs.inrt.LogActivity
import com.stardust.auojs.inrt.Pref
import com.stardust.auojs.inrt.autojs.AutoJs
import com.stardust.autojs.engine.encryption.ScriptEncryption
import com.stardust.autojs.execution.ExecutionConfig
import com.stardust.autojs.execution.ScriptExecution
import com.stardust.autojs.project.ProjectConfig
@@ -101,12 +102,12 @@ open class AssetsProjectLauncher(private val mAssetsProjectDir: String, private
val key = MD5.md5(projectConfig.packageName + projectConfig.versionName + projectConfig.mainScriptFile)
val vec = MD5.md5(projectConfig.buildInfo.buildId + projectConfig.name).substring(0, 16)
try {
val fieldKey = AutoJs::class.java.getDeclaredField("mKey")
val fieldKey = ScriptEncryption::class.java.getDeclaredField("mKey")
fieldKey.isAccessible = true
fieldKey.set(AutoJs.instance, key)
val fieldVector = AutoJs::class.java.getDeclaredField("mInitVector")
fieldKey.set(null, key)
val fieldVector = ScriptEncryption::class.java.getDeclaredField("mInitVector")
fieldVector.isAccessible = true
fieldVector.set(AutoJs.instance, vec)
fieldVector.set(null, vec)
} catch (e: Exception) {
e.printStackTrace()
}