java - .jar库到android studio项目的动态连接
问题描述
我需要使用此代码从“/data/data/project_name/files/dyn.jar”连接我的“dyn.jar”库(lib 是 java 语言,而不是 android)(文件肯定在那里):
Calculations c = new Calculations();
String jarPath = getFilesDir().getPath() + "/dyn.jar";
final DexClassLoader classLoader = new DexClassLoader(jarPath, getCacheDir().getAbsolutePath(), null, this.getClass().getClassLoader());
try {
classLoader.loadClass("com.example.dyn.ExtendedCalculations");
} catch (Exception e) {
e.printStackTrace();
}
但我每次都得到这个例外。我不明白我的代码有什么问题。
W/System.err: java.lang.ClassNotFoundException: Didn't find class "com.example.dyn.ExtendedCalculations" on path: DexPathList[[zip file "/data/user/0/com.example.calculator/files/dyn.jar"],nativeLibraryDirectories=[/system/lib, /system_ext/lib]]
W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.example.calculator.MainActivity.onCreate(MainActivity.java:30)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err: at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Suppressed: java.io.IOException: No original dex files found for dex location (x86) /data/user/0/com.example.calculator/files/dyn.jar
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:367)
at dalvik.system.DexFile.<init>(DexFile.java:109)
at dalvik.system.DexFile.<init>(DexFile.java:82)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:439)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:398)
at dalvik.system.DexPathList.<init>(DexPathList.java:166)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:129)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:87)
at dalvik.system.DexClassLoader.<init>(DexClassLoader.java:55)
at com.example.calculator.MainActivity.onCreate(MainActivity.java:27)
... 15 more
解决方案
推荐阅读
- python - 如何使用子进程捕获 SQLCMD 的 Msg 字符串?
- mongodb - 使用 ip 白名单从 ec2 实例连接到 mongo db
- python - 虽然 True 循环提前中断
- java - 如果当前方法调用出现异常,如何停止后续方法调用的执行
- xcode - 如何使用 Xcode 11 文件模板创建组
- macos - 从 MacOS 访问 Virtual Box 中的 IIS 站点时如何修复 403 Forbidden
- spring-boot - Spring Security Oauth oauth2UserService(在 github 上工作,但在 google 上不工作)
- javascript - 如何使用 Angular 包从扫描仪扫描文档?
- c++ - 在主框架面板中创建小部件
- rx-java2 - 我应该如何将多个异步用例合并为一个?