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

文章目录

    • 1. 前言
    • 2. 相关文章
    • 3. 各种编译错误
      • 3.1 编译 app
      • 3.2 Duplicate resources errors
      • 3.3 Android resource linking failed
      • 3.3 Duplicate class errors
      • 3.4 最后的错误
      • 3.5 Git提交本章的修改
    • 4. 结束语

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

如图所示
使用Android Studio调试系统应用之TvSettings(三):首次编译_第1张图片

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进来。方法将在下一章介绍。
使用Android Studio调试系统应用之TvSettings(三):首次编译_第2张图片
通过在aosp源码目录中查找缺少资源的声明位置,可以确定到它是包含在哪个包里

szhou@server_01:~/works/aosp_tv/frameworks/base/packages$

$ grep name=\"wifi_signal\" -rn .

结果:.

/SettingsLib/res/values/attrs.xml:46: "wifi_signal" format="reference" />

对源码不熟悉的同学,可以直接搜索aosp_tv/frameworks目录,甚至asop根目录,就是比较费时间,但熟悉之后就没什么事了,可以直接锁定高概率出现的目录。

3.5 Git提交本章的修改

[Ctrl + K]打开Git提交窗口,提交修改


.

4. 结束语

由于SettingsLib module的错误,需要重新导入一包系统源码进行处理,所以需要单独使用一个章节来细细来说。

学习Android系统需要极强的兴趣驱使,所以才有了总结、写作的兴趣,欢迎大家私信交流~

你可能感兴趣的:(Android,Studio,调试系统APP,android,framework,SettingsLib,gradle)