大佬教程收集整理的这篇文章主要介绍了android – 如何使用DexClassLoader从aar文件动态加载类,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
enter code here File file = getDir("dex",0); DexClassLoader dexClassLoader = new DexClassLoader("/data/data/com.example.callerapp/files/test.dex",file.getAbsolutePath(),null,getClassLoader()); try { Class<Object> _class = (Class<Object>) dexClassLoader.loadClass("com.example.calledapp.test"); Object object = _class.newInstance(); Method method = _class.getmethod("function"); method.invoke(object); } catch (Exception e) { e.printStackTrace(); }
但我想要做的是从aar文件动态加载类,如android开发页面所示(DexClassLoader:从.jar加载类的类加载器和包含classes.dex条目的.apk文件.这可以使用执行未作为应用程序的一部分安装的代码.)
我在Android工作室中创建了一个库模块(“testlibrary”),在库模块中创建了Test.java(我想在调用者应用程序中加载dynimically),并通过Gradle项目创建了一个aar文件 – >执行Gradle任务
如何通过dexclassloader在以这种通用方式创建的aar文件中动态加载类?我已经通过提供商将aar文件从CalledApp移到了CallerApp
02-10 09:43:48.744 16487-16487/com.example.callerapp W/System.err: java.lang.ClassNotFoundException: Didn't find class "com.example.calledlibrary.Test" on path: DexPathList[[zip file "/data/data/com.example.callerapp/files/testlibrary.aar"],nativeLibraryDirectories=[/system/lib64,/vendor/lib64]] 02-10 09:43:48.744 16487-16487/com.example.callerapp W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93) 02-10 09:43:48.744 16487-16487/com.example.callerapp W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379) 02-10 09:43:48.744 16487-16487/com.example.callerapp W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 02-10 09:43:48.745 16487-16487/com.example.callerapp W/System.err: at com.example.callerapp.CallerActivity.onClick(CallerActivity.java:42) 02-10 09:43:48.745 16487-16487/com.example.callerapp W/System.err: at android.view.View.performClick(View.java:6877) 02-10 09:43:48.745 16487-16487/com.example.callerapp W/System.err: at android.widget.TextView.performClick(TextView.java:12651) 02-10 09:43:48.745 16487-16487/com.example.callerapp W/System.err: at android.view.View$PerformClick.run(View.java:26069) 02-10 09:43:48.745 16487-16487/com.example.callerapp W/System.err: at android.os.Handler.handleCallback(Handler.java:789) 02-10 09:43:48.746 16487-16487/com.example.callerapp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98) 02-10 09:43:48.746 16487-16487/com.example.callerapp W/System.err: at android.os.Looper.loop(Looper.java:164) 02-10 09:43:48.746 16487-16487/com.example.callerapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6938) 02-10 09:43:48.746 16487-16487/com.example.callerapp W/System.err: at java.lang.reflect.Method.invoke(Native Method) 02-10 09:43:48.746 16487-16487/com.example.callerapp W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 02-10 09:43:48.747 16487-16487/com.example.callerapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 02-10 09:43:48.747 16487-16487/com.example.callerapp W/System.err: Suppressed: java.io.IOException: No original dex files found for dex location (arm64) /data/data/com.example.caller/files/testlibrary.aar 02-10 09:43:48.747 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexFile.openDexFileNative(Native Method) 02-10 09:43:48.747 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexFile.openDexFile(DexFile.java:353) 02-10 09:43:48.747 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexFile.<init>(DexFile.java:100) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexFile.<init>(DexFile.java:74) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexPathList.<init>(DexPathList.java:157) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at dalvik.system.DexClassLoader.<init>(DexClassLoader.java:57) 02-10 09:43:48.748 16487-16487/com.example.callerapp W/System.err: at com.example.caller.CallerActivity.onClick(CallerActivity.java:40) 02-10 09:43:48.749 16487-16487/com.example.callerapp W/System.err: ... 10 more
以上是大佬教程为你收集整理的android – 如何使用DexClassLoader从aar文件动态加载类全部内容,希望文章能够帮你解决android – 如何使用DexClassLoader从aar文件动态加载类所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。