android - 在禁用 dexpreopt 的情况下构建单独的 Android 模块

标签 android android-source android-build android-framework

对于我的论文,我正在修改 android 框架并构建源代码 (4.1.1 Jelly Bean)。 我可以做一个完整的构建,但因为这非常耗时(我正在 ubuntu 12.04 64 位虚拟机上开发)我想构建单独的模块。

例如: 当对位置模块进行更改时,应该可以只构建更改后的模块,并制作新的系统镜像:

mmm frameworks/base
make snod

但这行不通。每次我尝试启动时,新系统镜像都无法启动,因为:

I/dalvikvm( 1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'

经过一些研究,我尝试使用环境变量禁用 dexpreopt

export $WITH_DEXPREOPT=false 

export $DISABLE_DEXPREOPT=true 

并使用“make installclean”进行全面重建。完整的重建工作,并且对框架的​​更改出现在构建中。但是在做了新的改变之后,仍然'mmm frameworks/base'和'make snod'导致dexpreopt不匹配。

来自“make snod”的构建/核心/makefile 也给出了警告:“警告:启用了 dexpreopt,您可能需要完全重建。”,它来自 makefile 中的这一行:

ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif

这让我相信 $WITH_DEXPREOPT 变量没有正确设置或读取? 到目前为止,如果不进行干净的完全重建,我还无法获得可启动的系统镜像。我遵循的程序是否正确地禁用了 dexpreopt,或者是否有任何其他方法可以在更改框架并获得新的系统镜像后构建单独的模块?

构建目标是“full-eng”。

最佳答案

显然 WITH_DEXPREOPT 环境变量被

中的内部 WITH_DEXPREOPT 变量覆盖
build/target/board/generic/BoardConfig.mk

将此更改为 false,或者根据 google groups 的人的说法,开始制作:

make showcommands WITH_DEXPREOPT=false

成功了。构建特定模块并制作新系统镜像现在会生成可启动构建。

(来源:https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)

关于android - 在禁用 dexpreopt 的情况下构建单独的 Android 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13135844/

相关文章:

gradle - 为继承的版本组织Android Gradle项目

android - 错误 android.content.res.Resources$NotFoundException : File from xml type layout resource ID #0x102000a

android - 使用 git 修改 android 源代码的正确方法

build - 制作和制作otapackage

java - Android、Gradle 产品 flavor ;包不存在

android - 如何在android中将处理程序用作计时器?

android - 如何清除gradle缓存?

android - 如何用动线指示器显示二维码扫描进度?

android - 如何将 EditText 的软键盘配置为最初使用数字,但仍允许文本?

java - Cordova android 运行/构建错误 - JDK 1.8 的要求检查失败