源码编译同时生成odex和apk文件的坑
2017-11-30 21:33
239 查看
如果在编译源码时指定了生成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是可以正常使用的。但是再编译生成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包方便调试了。
相关文章推荐
- apk不编译生成odex文件
- 编译android源码apk是否生成odex方法
- 编译android源码apk是否生成odex方法
- Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
- 对Android APK文件反编译查看其源码
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- 将apk文件中的classes.dex反编译成java源码
- Android手动编译生成apk安装文件
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- andriod 自编译,打包生成apk文件--------------------cocos2d-x 3.0正式版本(7.7)
- 如何反编译apk文件得到源码和XML文件
- Android 命令行编译、打包生成apk文件
- 展开android APK文件,并反编译查看源码
- 编译只生成apk,不生成odex
- 编译只生成apk,不生成odex
- android 编译源码不生成odex
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- 如何反编译apk文件得到源码和XML文件
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件