DexClassLoader myDexClassLoader = new DexClassLoader(
//模拟器都没上传到手机sd卡里怎么也读出来了这个类,
//说明就是找到的本地的类,
//如果上传了,也是一样找不到这给类
//找不到文件原因:要加上这个外部存储管理权限,但是手机不同,不一定也是这样。
// <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
"/sdcard/test.dex",
//优化路径
MainActivity.this.getCacheDir().getAbsolutePath(),
null,
MainActivity.this.getClassLoader());
//这里要加载的类,就只能从我指定路径的这个dex文件中去找
try {
//如果安装到手机的apk里边有com.goals.plugin.Test这个类,还是会优先调用这个类,
//而不是你修改后的类。
//所以这就涉及到一个pathListElement要插到队列最前边去的问题,才能实现,热修复
Class<?> clazz
= myDexClassLoader.loadClass("com.goals.plugin.Test");
Method methodPrint = clazz.getMethod("myPrint");
methodPrint.invoke(clazz.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
现象:通过Android Studio 文件管理器,直接将test.dex上传到sdcard目录下,看到文件上传成功,手机也可以看到。但是安装apk后找这个文件失败。
解决途径:
1,添加上文件访问权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2,打开手机的动态访问权限
3,还是找不到文件,要加上这个外部存储管理权限,但是手机不同,不一定也是这样。 ? ??<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|