解决android 4.3 的user版本没法启动

user版本启动时一直报错: odex has stale dependencies.


从日志看,就知道是优化odex时出了问题,
于是将build/core.main.mk文件中的WITH_DEXPREOPT值修改为false,该值用来判断是否对jar文件或者apk文件进行优化,user版本默认为true。
重新编译system.img,烧录,机器正常启动。

但为什么一优化,就会有问题呢?
google了下,说是要求BOOTCLASSPATH 值与DEXPREOPT_BOOT_JARS值相等。

而我的BOOTCLASSPATH 值增加了/system/framework/qcom.fmradio.jar:/system/framework/oem-services.jar:/system/framework/WfdCommon.jar:/system/framework/qcmediaplayer.jar 等包,所以找到编译文件中的DEXPREOPT_BOOT_JARS,做相应修改。
注意:这两个值不只是包含的jar包一致,还要求顺序一致。要不编译也会出现同样错误。
重新编译,烧写系统,ok。


处理问题过程中,还遇到另一个问题:
编译user版本,只是将WITH_DEXPREOPT修改为false,然后删除system目录,就重新编译了。
结果出现:
Zip is good, but no classes.dex inside, and no valid .odex file in the same directory,
这是.jar文件中没有classes.dex文件导致。
编译user版本时,将会产生dex_bootjars目录,DEXPREOPT_BOOT_JARS 指定的包都会被拷贝到该目录下,然后优化成nodex.jar和odex,

重新编译user版本时,因为没有文件被修改,不会对每个jar文件再次编译,只是把原来产生的nodex.jar文件拷贝过去了, 从而导致出现no classes.dex inside。 只要将 dex_bootjars目录删除,重编,即可解决该问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值