使用Android Studio调试系统应用之TvSettings:首次编译
Posted 阿迷创客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Android Studio调试系统应用之TvSettings:首次编译相关的知识,希望对你有一定的参考价值。
文章目录
1. 前言
通过前面两篇文章,项目的架构已经基本架构完毕;本章开始讲解如何解决编译问题。
2. 相关文章
使用android Studio调试系统应用之TvSettings(一):移植
使用Android Studio调试系统应用之TvSettings(二):build.gradle
3. 各种编译错误
3.1 编译 app
选择【Build】->【TvSettingsPlus.app】
3.2 Duplicate resources errors
- 例如 [dimen/picker_column_height] Error: Duplicate resources
存在于文件values\\dimens.xml和文件values\\partner_dimens.xml之中 - 解决办法,将partner_dimens.xml中的删除,带partner_XXX均为谷歌授权用的,国内的不需要
- 其他同类 Duplicate resources errors, 使用相同方法,不再列出,请仔细查看build窗口的错误打印
详情如下:
AGPBI: {"kind":"error","text":"Duplicate resources","sources":[{"file":{"description":"dimen/picker_column_height","path":"D:\\\\szhou\\\\note\\\\android_01\\\\source_as\\\\TvSettingsPlus\\\\app\\\\src\\\\main\\\\res\\\\values\\\\dimens.xml"}},{"file":{"description":"dimen/picker_column_height","path":"D:\\\\szhou\\\\note\\\\android_01\\\\source_as\\\\TvSettingsPlus\\\\app\\\\src\\\\main\\\\res\\\\values\\\\partner_dimens.xml"}}],"tool":"Resource and asset merger"}
…… 省略 ……
Execution failed for task ':app:mergeDebugResources'.
> [dimen/picker_column_height] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\dimens.xml [dimen/picker_column_height] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_dimens.xml: Error: Duplicate resources
[dimen/picker_column_horizontal_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\dimens.xml [dimen/picker_column_horizontal_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_dimens.xml: Error: Duplicate resources
[dimen/picker_item_height] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\dimens.xml [dimen/picker_item_height] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_dimens.xml: Error: Duplicate resources
[dimen/picker_start_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\dimens.xml [dimen/picker_start_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_dimens.xml: Error: Duplicate resources
[dimen/picker_separator_horizontal_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\dimens.xml [dimen/picker_separator_horizontal_padding] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_dimens.xml: Error: Duplicate resources
[string/text_obfuscation_toggle_caption] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\partner_arrays.xml [string/text_obfuscation_toggle_caption] D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\widget-strings.xml: Error: Duplicate resources
如图所示
3.3 Android resource linking failed
下面这个错误,是因为缺乏依赖(Settingslib module),需要include Settingslib module,我们先解决其他错误,在处理这个错误。
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> Android resource linking failed
D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\styles.xml:42:5-57:13: AAPT: error: style attribute 'attr/wifi_signal (aka com.android.tv.settings:attr/wifi_signal)' not found.
D:\\szhou\\note\\android_01\\source_as\\TvSettingsPlus\\app\\src\\main\\res\\values\\styles.xml:42:5-57:13: AAPT: error: style attribute 'attr/wifi_friction (aka com.android.tv.settings:attr/wifi_friction)' not found.
3.3 Duplicate class errors
两个jar包都包含有相同的class,导致冲突,我们将其中一个去掉:mtk-support-sharecode.jar
修改文件:app/build.gradle
compileOnly files('../libs/framework.jar')
compileOnly files('../libs/mtk-framework.jar')
implementation files('../libs/com.mediatek.support.tv.jar')
// implementation files('../libs/mtk-support-sharecode.jar') ---》先不要删,只是注释掉
implementation files('../libs/com.mediatek.support.aipq.jar')
implementation files('../libs/com.mediatek.network.jar')
implementation files('../libs/com.mediatek.tv.ini.jar')
错误打印
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
> Duplicate class com.mediatek.twoworlds.tv.KeyMapReader found in modules com.mediatek.support.tv (com.mediatek.support.tv.jar) and mtk-support-sharecode (mtk-support-sharecode.jar)
> …… 省略……
3.4 最后的错误
再次运行编译后,发现只剩下3.3节的Android resource linking failed错误了,从错误的提示,是因为找不到’attr/wifi_signal‘等attr属性,通过在aosp源码下搜索,发现其包含在SettingsLib模块中,所以我们还需要使用第一节的方法,将这个模块include进来。方法将在下一章介绍。
通过在aosp源码目录中查找缺少资源的声明位置,可以确定到它是包含在哪个包里
szhou@server_01:~/works/aosp_tv/frameworks/base/packages$
$ grep name=\\"wifi_signal\\" -rn .
结果:.
/SettingsLib/res/values/attrs.xml:46: <attr name="wifi_signal" format="reference" />
对源码不熟悉的同学,可以直接搜索aosp_tv/frameworks目录,甚至asop根目录,就是比较费时间,但熟悉之后就没什么事了,可以直接锁定高概率出现的目录。
3.5 Git提交本章的修改
[Ctrl + K]打开Git提交窗口,提交修改
.
4. 结束语
由于SettingsLib module的错误,需要重新导入一包系统源码进行处理,所以需要单独使用一个章节来细细来说。
学习Android系统需要极强的兴趣驱使,所以才有了总结、写作的兴趣,欢迎大家私信交流~
以上是关于使用Android Studio调试系统应用之TvSettings:首次编译的主要内容,如果未能解决你的问题,请参考以下文章
使用Android Studio调试系统应用之TvSettings:自动签名在线调试
使用Android Studio调试系统应用之LiveTV:移植编译调试,一气呵成
使用Android Studio调试系统应用之TvSettings:SettingsLib module 移植
使用Android Studio调试系统应用之TvSettings:签名部署运行