Open happyme531 opened 3 months ago
android14 只允许动态加载只读dex导致的。你等最新的看看修复了没。
android14 只允许动态加载只读dex导致的。你等最新的看看修复了没。
补充一下,因为安卓外部存储是 fuse/sdcardfs,文件的 uid/gid/mask 是固定的,所以在外部存储中对文件设置只读的操作是无效的。如果 Dex 文件位于外部存储,那file.setWritable(false)
将不起作用。应先把 Dex 文件拷贝到应用数据目录下(context.getExternalFilesDir(null)
)再加载,这个操作应由脚本编写者处理。
android14 只允许动态加载只读dex导致的。你等最新的看看修复了没。
补充一下,因为安卓外部存储是 fuse/sdcardfs,文件的 uid/gid/mask 是固定的,所以在外部存储中对文件设置只读的操作是无效的。如果 Dex 文件位于外部存储,那
file.setWritable(false)
将不起作用。应先把 Dex 文件拷贝到应用数据目录下(context.getExternalFilesDir(null)
)再加载,这个操作应由脚本编写者处理。
我这么修改貌似有用的。查看最终生成的.jar文件为只读了。虽然原路径的dex无法通过shell修改授权。
android14 只允许动态加载只读dex导致的。你等最新的看看修复了没。
补充一下,因为安卓外部存储是 fuse/sdcardfs,文件的 uid/gid/mask 是固定的,所以在外部存储中对文件设置只读的操作是无效的。如果 Dex 文件位于外部存储,那
file.setWritable(false)
将不起作用。应先把 Dex 文件拷贝到应用数据目录下(context.getExternalFilesDir(null)
)再加载,这个操作应由脚本编写者处理。我这么修改貌似有用的。查看最终生成的.jar文件为只读了。虽然原路径的dex无法通过shell修改授权。
看到了,这个 issues 案例是 jar 转 dex,jar 转 dex 是缓存在 /data/user 里的,所以有用。我看到有些项目是从外部直接加载 dex,这在 Android 14 就没有用了。
java.lang.SecurityException: Writable dex file '/data/user/0/org.autojs.autoxjs.v6/cache/classes/1720707480460.jar' is not allowed. at dalvik.system.DexFile.openDexFileNative(Native Method) at dalvik.system.DexFile.openDexFile(DexFile.java:406) at dalvik.system.DexFile.(DexFile.java:128)
at dalvik.system.DexFile.(DexFile.java:101)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:438)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:397)
at dalvik.system.DexPathList.(DexPathList.java:166)
at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:160)
at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:105)
at dalvik.system.DexClassLoader.(DexClassLoader.java:55)
at com.stardust.autojs.rhino.AndroidClassLoader.loadDex(AndroidClassLoader.java:130)
at com.stardust.autojs.rhino.AndroidClassLoader.dexJar(AndroidClassLoader.java:145)
at com.stardust.autojs.rhino.AndroidClassLoader.defineClass(AndroidClassLoader.java:68)
at org.mozilla.javascript.JavaAdapter.loadAdapterClass(JavaAdapter.java:549)
at org.mozilla.javascript.JavaAdapter.getAdapterClass(JavaAdapter.java:346)
at org.mozilla.javascript.JavaAdapter.js_createAdapter(JavaAdapter.java:186)
at org.mozilla.javascript.JavaAdapter.execIdCall(JavaAdapter.java:99)
at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:100)
at org.mozilla.javascript.BaseFunction.construct(BaseFunction.java:393)
at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1941)
at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:1061)
at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:90)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:380)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3869)
at org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:103)
at com.stardust.autojs.engine.RhinoJavaScriptEngine.doExecution(RhinoJavaScriptEngine.kt:72)
at com.stardust.autojs.engine.JavaScriptEngine.execute(JavaScriptEngine.java:20)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine.access$001(LoopBasedJavaScriptEngine.java:17)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine.lambda$execute$0(LoopBasedJavaScriptEngine.java:42)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine.$r8$lambda$BFE7Dp9qUhwe9LvV-n1VOzahzHw(Unknown Source:0)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine.execute(LoopBasedJavaScriptEngine.java:61)
at com.stardust.autojs.engine.LoopBasedJavaScriptEngine.execute(LoopBasedJavaScriptEngine.java:34)
at com.stardust.autojs.execution.LoopedBasedJavaScriptExecution.doExecution(LoopedBasedJavaScriptExecution.java:42)
at com.stardust.autojs.execution.RunnableScriptExecution.execute(RunnableScriptExecution.java:43)
at com.stardust.autojs.execution.RunnableScriptExecution.execute(RunnableScriptExecution.java:37)
at com.stardust.autojs.execution.RunnableScriptExecution.run(RunnableScriptExecution.java:31)
at java.lang.Thread.run(Thread.java:1012)