求问,DexClassLoader动态加载未安装apk时,报ClassNotFoundException

别说我单纯 2017-06-27 09:30:32
最近在学习插件化开发,按照博客几乎照着写,没想到刚开车就翻车。、
先上代码:

DexClassLoader classLoader = new DexClassLoader(getPlugin().getAbsolutePath(),
this.getDir("dex",MODE_PRIVATE).getAbsolutePath(),null,getClassLoader());

try {

Class<?> clazz1 = classLoader.loadClass("com.example.myplugin" + ".R");

for(Class c :clazz1.getClasses()){

Log.e("1",c.getName());

}catch(Exception e){
e.printstack();
}

//获取未安装apk的文件
private File getPlugin(){
File externalStorageDirectory = Environment.getExternalStorageDirectory();
File myapk = new File(externalStorageDirectory.getAbsolutePath()+File.separator+"myplugin.apk");
return myapk;
}


明明可以找到未安装的apk文件; 一直报如下错误:

06-27 09:14:12.262 27032-27032/com.example.testplugin E/derek: getPlugin().getName()=myplugin.apk,getFileSize(getPlugin())=950055
06-27 09:14:12.291 27032-27032/com.example.testplugin E/derel: getPluginInfo()=com.example.myplugin
06-27 09:14:12.294 27032-27032/com.example.testplugin W/System.err: java.lang.ClassNotFoundException: Didn't find class "com.example.myplugin.R" on path: DexPathList[[zip file "/storage/emulated/0/myplugin.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib, /lib, /usr/lib, /home/EPT_Middleware/lib]]
06-27 09:14:12.294 27032-27032/com.example.testplugin W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
06-27 09:14:12.294 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-27 09:14:12.294 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
06-27 09:14:12.294 27032-27032/com.example.testplugin W/System.err: at com.example.testplugin.MainActivity.loadApk(MainActivity.java:80)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at com.example.testplugin.MainActivity.in(MainActivity.java:162)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at java.lang.reflect.Method.invoke(Native Method)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.view.View$1.onClick(View.java:4016)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.view.View.performClick(View.java:4781)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.view.View$PerformClick.run(View.java:19874)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
06-27 09:14:12.295 27032-27032/com.example.testplugin W/System.err: at android.os.Looper.loop(Looper.java:135)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5268)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: at java.lang.reflect.Method.invoke(Native Method)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
06-27 09:14:12.296 27032-27032/com.example.testplugin W/System.err: Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.example.myplugin.R" on path: DexPathList[[zip file "/data/app/com.example.testplugin-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib, /lib, /usr/lib, /home/EPT_Middleware/lib]]
06-27 09:14:12.297 27032-27032/com.example.testplugin W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
06-27 09:14:12.297 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-27 09:14:12.297 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
06-27 09:14:12.297 27032-27032/com.example.testplugin W/System.err: ... 16 more
06-27 09:14:12.298 27032-27032/com.example.testplugin W/System.err: Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.example.myplugin.R" on path: DexPathList[[dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-support-annotations-21.0.0_761508e683344852e033dd1ab02b8687e06bf07e-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-junit-4.12_dd6a8538be8e03e5793aa53e1a464bdad6a2efa4-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-internal_impl-21.0.0_54604add8e4ab23269f318ac29d6eeb2873df27b-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-hamcrest-core-1.3_f03aac9b7ee8d3a67e8fccdf48589b3046b13206-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-com.android.support-support-v4-21.0.0_af18b0c45a9fd3f9953a0bc248d387cc8311db6c-classes.dex", dex file "/data/data/com.example.testplugin/files/instant-run/dex/slice-com.android.support-appcompat-v7-21.0.0_6981dad921835130589eeb8e08be91b70632a02c-classes.dex"],nativeLibraryDirectories=[/vendor/lib, /system/lib, /lib, /usr/lib, /home/EPT_Middleware/lib, /vendor/lib, /system/lib, /lib, /usr/lib, /home/EPT_Middleware/lib]]
06-27 09:14:12.298 27032-27032/com.example.testplugin W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: at com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62)
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: ... 17 more
06-27 09:14:12.299 27032-27032/com.example.testplugin W/System.err: Suppressed: java.lang.ClassNotFoundException: com.example.myplugin.R
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: at java.lang.Class.classForName(Native Method)
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: ... 18 more
06-27 09:14:12.300 27032-27032/com.example.testplugin W/System.err: Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available


日志的前两行是未安装apk的文件大小和包名。


开发环境:AndroidStudio2.3
compileSdkVersion 21
buildToolsVersion '22.0.1'
minSdkVersion 15
targetSdkVersion 21
JDK版本 "1.8.0_112"



求老司机指教,万分感谢。
...全文
494 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
别说我单纯 2017-06-27
  • 打赏
  • 举报
回复
引用 1 楼 ganshenml 的回复:
混淆弄了没?
没有进行代码混淆
别说我单纯 2017-06-27
  • 打赏
  • 举报
回复
没有进行代码混淆
ganshenml 2017-06-27
  • 打赏
  • 举报
回复
混淆弄了没?
别说我单纯 2017-06-27
  • 打赏
  • 举报
回复
目前发现在Eclipse上,同样的代码完全可以。 不同的就是java的编译版本和sdk版本不同。 不知有没有老司机,可以帮忙解惑

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧