内容目录
背景
自己最近想写一个APP,内部实现考虑兼容性问题,我想使用动态加载,一些核心变化的代码从服务器动态加载,这样子就不用每次都要更新APP。
动态加载
DexClassLoader: 我百度一下,基本规则是jar包通过dx处理一下,然后放在手机的sdcard里面,前提一定要给文件读写权限。
问题
我基本按照网上规则写的,但发现加载失败,我的测试手机是小米10 android 10,总是提示原始dex找不到。但文件确实存在,而且文件权限给了而且文件确实存在。
过程
- 直接用跑模拟器 android 6 的版本上,确实可以跑起来,这说明肯定是android版本的问题,也可能跟miui的版本加强权限管理。
- 大概解压的dex必须放在APP 自己目录,不能给外部路径,这样子为了安全问题,确实,如果dex被改成外部,就可以有权限访问内部数据。毕竟注入到代码里面去了。
- 那么我猜测可能是加载jar路径可能也要放在APP内部,果然可以了。我放在asserts目录
- 我猜测原因,磁盘的文件无法写入APP内部目录,因为我之前也试过/sdcard/复制到APP内部,但加载也会失败了。