No original dex files found for dex location
记一个愚蠢的下午,一个愚蠢的BUG
在使用DexClassLoader加载sdcard中指定APK中的Class时,在构造DexClassLoader时发生异常:Suppressed: java.io.IOException: No original dex files found for dex location。
- 确定
ClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent)
中dexPath指向的路径是否有可用的APK。 - 检查Manifest.xml中是否添加了如下权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- 如果以上两步没有问题,查看你的targetSdkVersion(build.gradle(Module:
app))是否大于等于23,如果是,那么你需要通过动态权限机制让你的APP获得对应权限。
总结,在没有获得读写sdcard权限的情况下,构造DexClassLoader
时会发生异常。
附:如果异常发生在DexClassLoader.loadClass()
,请确保gradle文件中release、debug方法中的minifyEnabled为false,该参数用户控制是否开启混淆,混淆会导致反射找不到对应类。
release {
minifyEnabled
}