源码编译同时生成odex和apk文件的坑
来源:互联网 发布:无锡关键词排名优化 编辑:程序博客网 时间:2024/06/05 15:38
如果在编译源码时指定了生成odex文件的,那么apk的目录下,还会有一个同名的odex文件。此时apk中的class.dex文件会被移除。因为odex文件是dexopt程序对DEX文件进行优化得来的。目的是系统在首次启动时就不用再次去优化dex文件了,提升了首次启动app的速度。dex文件(odex也是)是包含可执行代码的文件。所以被移除了dex文件的apk是无法独立安装的,而dex文件也无法独立安装,因为缺少资源文件还有一些认证文件(meta-inf中)。
系统烧写到设备中,这些odex和apk是可以正常使用的。但是再编译生成odex和apk文件,然后push进入时,就无法生效。
下面是步骤和结果
1.替代apk时,可以运行,但是改动不会生效。
2.删除apk后,不可以运行。
3.删除odex和apk后,再把原来的push进入,不能运行。
4.编译指定不生成odex文件,push进入后,可以运行,并在/data/dalvik-cache/arm下存储class.dex
5.删除apk后,push进之前的odex+apk,可以运行,查看/data/dalvik-cache/arm下的dex文件没有被移除
6.移除/data/dalvik-cache/arm下的dex文件后,不能运行了
7.重新烧录系统,修改资源文件,生成odex的方式编译,将apk push进去,有效。
在应用的Android.mk下,的buildpackage之前加入LOCAL_DEX_PREOPT := false就可以指定不生成odex文件了。
整个源码编译应用不生成odex: build\core\package.mk 中156行改为 LOCAL_DEX_PREOPT := false
编JAR包,不生成odex
目前库上的代码编译framework时,同时生成了JAR和odex,此时push进去开机起不来。
解决方法:
编译时只生成jar包,不生成odex,即 build/core/java_library.mk 中37行改为 LOCAL_DEX_PREOPT := false。照上述修改后,全部重新编译,后续就可以mm单独编译jar包方便调试了。
- 源码编译同时生成odex和apk文件的坑
- APK生成odex,合并odex和apk 为完整的apk文件
- APK生成odex,合并odex和apk 为完整的apk文件
- apk不编译生成odex文件
- 编译android源码apk是否生成odex方法
- 编译android源码apk是否生成odex方法
- apk编译不生成odex
- Android 如何关闭编译生成的apk带odex
- 编译只生成apk,不生成odex
- 编译只生成apk,不生成odex
- 编译时不生成odex文件的方法
- android 编译源码不生成odex
- android 编译源码不生成odex
- 控制android 编译源码生成odex .
- 如何合并apk和odex文件
- 合并odex和少dex的apk为完整的apk文件
- 合并apk和odex的方法
- 合并apk和odex的方法
- From Java To Kotlin
- new,operator new,placement new
- Spring Mvc controller单元测试
- 文章标题
- SQL Server with as使用
- 源码编译同时生成odex和apk文件的坑
- 有道词典
- Unity小技巧-清除缓存
- Spring4和Hibernate4整合后事务不起作用
- 7.7用穷举法求最大约数(1)
- 欢迎使用CSDN-markdown编辑器
- 事件---事件类型
- BZOJ1106 [POI2007]立方体大作战tet 树状数组
- sql提权常用