问题现象:
奇酷壁纸未生效,壁纸为google原生壁纸 分析过程如下: A:从手机取出framework-res.apk解压后,查找default_wallpaper.jpg,发现drawable-xhdpi、drawable-sw720dp-nodpi、drawable-sw600dp-nodpi包含default_wallpaper.jpg默认壁纸。 而脚本处理的默认壁纸是放置到drawable-nodpi中,编译结果在drawable-nodpi中确无default_wallpaper.jpg。
B:在Android 6.0编译中,aapt打包时新增一个参数PRODUCT_AAPT_PREF_CONFIG。
该参数根据手机屏幕分辨率将优化非优选资源。
C:在device/mediatek/common/aapt/aapt_config.mk中根据产品分辨率定义了PRODUCT_AAPT_PREF_CONFIG的值是xhdpi。
由于drawable-nodpi与drawable-xhdpi都包含default_wallpaper.jpg,根据优选规则将删除drawable-nodpi中default_wallpaper.jpg而保留drawable-xhdpi中default_wallpaper.jpg。
解决方案:
http://10.100.13.26:8080/#/c/8831/
6、 第三方应用dex2otad校验不通过导致编译报错。
问题现象:
在userdebug版本未出现该问题,在user版本该编译报错必现。 分析过程如下:
A:从编译日志看,在编译BY_3RD_EmailMaster第三方应用,需要对该应用进行预编译处理,在dex2oatd时需要校验class中method,校验不通过导致编译失败。
B:手动执行下面命令报错必现,删除BY_3RD_EmailMaster第三方应用编译正常,确认是BY_3RD_EmailMaster导致编译报错。
解决方案:
更新BY_3RD_EmailMaster第三方应用 http://10.100.13.26:8080/#/c/9402/
7、 Android JACK研究
Jack (Java Android Compiler Kit)是新的Android 编译工具,从Android 6.0 开始加入,替换原有的编译工具,例如javac, ProGuard, jarjar和 dx。它主要负责将java代码编译成dex包,并支持代码压缩,混淆等。
git源代码地址是https://android.googlesource.com/toolchain/jack。
Jill 是 Jack Intermediate Library Linker 的缩写,它负责“Shielding JACK from Java byte code”;实际上辅助 Jack 对.class 做预处理,生成 .jack 文件。 git源代码地址是https://android.googlesource.com/toolchain/jill。
JACK编译流程如下: Jack (.java –> .jack –> .dex) Jill 预处理过程的流程图:
Jack 编译过程的流程图:
各种依赖库仍然以 jar/aar的形式存在。
辅助工具 Jill 将根据依赖库中的 .class 生成Jayce格式的 IL,并调用 Jack 做 pre-dex并生成 .jack,此过程只在编译 app 时发生一次。
Jack 将 java 源代码也编译为 .jack,然后将多个 .jack 转化为单一的 .dex; 如果dex方法数超过 65k, 就生成classes.dex, classes1.dex?classesN.dex。
Jack使用帮助如下:
Jill使用帮助如下:
参考资料:
https://software.intel.com/zh-cn/android/articles/an-introduction-to-jack-and-jill-on-x86?utm_source=CSDN.com&utm_medium=Syndication&utm_campaign=Android_PRC_Q1-16 https://yq.aliyun.com/articles/40811
https://source.android.com/source/jack.html http://arui.me/index.php/archives/57/
https://android.googlesource.com/toolchain/jack?spm=5176.100239.blogcont40811.6.ywJ3xw
http://tools.android.com/tech-docs/jackandjill?spm=5176.100239.blogcont40811.35.D9ooo7
8、 状态栏显示异常问题分析
问题现象:
启动一个应用后,状态栏中时间数字、sim卡图标、电池图标显示异常。 问题分析:
A:显示正常时图标的颜色是白色透明,背景是黑色的。启动应用后,systemUI根据应用传递的flag将图标设置为黑色,而在低内存状态下,systemUI将状态栏设置为不透明状态,导致字体图标和背景颜色一致,显示异常。
解决方案:
关闭低内存状态,systemUI根据ro.config.low_ram值为false,显示状态栏为透明状态。 http://10.100.13.26:8080/#/c/9080/
9、 WTWD对外环境版本不开机问题分析
问题现象:
WTWD对外环境版本无法开机,对比对内版本正常开机 分析过程如下:
A:WTWD对外环境User版本烧写debug版本boot.img,抓取日志。从日志看zygote进
程起来后加载libart.so失败,后面的systemserver进程都没有起来。
B:孙飞虎将对内环境user版本中boot.art替换不开机版本中boot.art,抓取日志,发现zygote进程正常加载libart.so。初步确认是boot.art文件问题。
C:分析对比对内环境和对外环境的boot.art的差异。对内环境qiku-service、qiku-framework、qiku-feature采用源码编译,对外环境采用jar包编译。怀疑编译方式导致boot.art文件问题。
D:boot.art文件是通过dex2oatd进行odex打包到boot.oat中,怀疑对外编译环境bootclass打包方式有问题,将qiku-feature、qiku-framework、systeminterface静态打包到framework中,qiku-service静态打包到service中验证依旧是不开机,而且日志一样。
E:从boot.art的生成联想到之前dex2oatd校验systeminterface编译报错和dex2oatd校验BY_3RD_EmailMaster编译报错,前者通过关闭验证解决编译报错问题,后者BY_3RD_EmailMaster在debug版本运行直接Crash,通过更新BY_3RD_EmailMaster解决编译问题。怀疑该问题与dex2oatd有关系。但是编译日志打印出来信息较少,只是说明systeminterface校验有问题,与BY_3RD_EmailMaster编译报错打印信息类似。
F:取systeminterface源码编译,发现在编译环境下编译报错,修改编译报错后版本正常开机。确认是systeminterface.jar问题,dex2oatd校验systeminterface.jar中的方法,关闭校验虽然可以编译通过,但是会掩盖systeminterface.jar自身代码问题。
解决方案:
更新systeminterface.jar
备注:后续遇到dex2oatd相关校验导致编译报错问题,首先需要确认编译来源有没有问题。dex2oatd会校验prebuild中apk、jar中class。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库问题分析(2)在线全文阅读。
相关推荐: