0

我正在对 AOSP SystemUI 应用程序进行一些修改,并在尝试在任意设备上运行它时遇到了一个非常特殊的问题:findViewById()返回null,而在其子项中导航时发现它确实存在。

我正在使用这个AOSP源代码并通过. 它编译得很好,但是 SystemUI 在以下第 337 行的逻辑中崩溃并出现 IllegalArgumentException:lunch full-engmake

mRecentsContainer = (ViewGroup) findViewById(R.id.recents_container);
[...]
if (mRecentsContainer instanceof RecentsHorizontalScrollView){
    [...]
} else if (mRecentsContainer instanceof RecentsVerticalScrollView){
    [...]
}
else {
    throw new IllegalArgumentException("missing Recents[Horizontal]ScrollView");
}

一点调试表明,mRecentsContainer事实上null

我认为可能是一个不包含该特定视图的布局被夸大了,所以为了检查,我使用getChildCount()and递归地浏览了所有视图的子视图getChildAt()。事实并非如此。@id/recents_container就在那儿,两层深:

> @id/recents_root (7f0e0070) [RecentsPanelView]: (2 children)
--> @id/recents_bg_protect (7f0e0071) [FrameLayout]: (2 children)
----> @id/recents_container (7f0e0072) [RecentsVerticalScrollView]: (1 children)
------> @id/recents_linear_layout (7f0e0073) [LinearLayout]: (0 children)
----> @id/recents_no_apps (7f0e0074) [FrameLayout]: (1 children)
------> [unnamed] (ffffffff) [TextView]
--> @id/recents_dismiss_button (7f0e0075) [View]

安装应用程序时,Logcat 中会出现一个单一的提示system_process

12-11 22:38:01.090: W/ResourceType(165): 在包 0 中获取 0x7f060000 (t=5 e=0) 的条目失败(错误 -75)

R.java在目录中检查SystemUI_intermediates发现它指向一个看似无关的status_bar_recents_app_label_color,它只是res/values/color.xml.

这可能是什么原因造成的?布局是否没有正确膨胀,因为我在没有编译的设备上运行它?我认为问题可能是 SystemUI 对内部 Android 资源的引用,这些资源可能无法正确映射到我设备上的资源。那可能吗?

4

1 回答 1

1

显然,一些生成的文件一直存在。

make clean通过解决它从头开始重建源。

或者,我发现删除以下中间目录可以加快构建速度,但不能 100% 确定这涵盖了所有目录:

rm -rf out/target/product/generic/obj/APPS/SystemUI_intermediates/
rm -rf out/target/common/R/com/android/systemui
rm -rf out/target/product/generic/obj/APPS/framework-res_intermediates/
rm -f /out/target/common/R/com/android/internal/R.java
rm -rf out/target/product/generic/obj/PACKAGING/
rm -f out/target/product/generic/system/app/SystemUI.apk
于 2012-12-11T17:50:28.167 回答