使用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

  1. 例如 [dimen/picker_column_height] Error: Duplicate resources
    存在于文件values\\dimens.xml和文件values\\partner_dimens.xml之中
  2. 解决办法,将partner_dimens.xml中的删除,带partner_XXX均为谷歌授权用的,国内的不需要
  3. 其他同类 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

如图所示
Duplicate resources errors

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:签名部署运行

使用Android Studio调试系统应用之TvSettings:首次编译

使用Android Studio调试系统应用之TvSettings:build.gradle