加载其他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中是否添加了如下权限。
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值