加载其他APK时,发生异常:No original dex files found for dex location

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。
  1. 确定ClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent)dexPath指向的路径是否有可用的APK。
  2. 检查Manifest.xml中是否添加了如下权限。
  3. 如果以上两步没有问题,查看你的targetSdkVersion(build.gradle(Module:
    app))是否大于等于23,如果是,那么你需要通过动态权限机制让你的APP获得对应权限。
总结,在没有获得读写sdcard权限的情况下,构造DexClassLoader时会发生异常。

附:如果异常发生在DexClassLoader.loadClass(),请确保gradle文件中releasedebug方法中的minifyEnabledfalse,该参数用户控制是否开启混淆,混淆会导致反射找不到对应类。

release {
    minifyEnabled
}

感谢:https://www.meiwen.com.cn/subject/yaopmftx.html

你可能感兴趣的:(android,随手记)