我正在对 AOSP SystemUI 应用程序进行一些修改,并在尝试在任意设备上运行它时遇到了一个非常特殊的问题:findViewById()
返回null
,而在其子项中导航时发现它确实存在。
我正在使用这个AOSP源代码并通过. 它编译得很好,但是 SystemUI 在以下第 337 行的逻辑中崩溃并出现 IllegalArgumentException:lunch full-eng
make
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 资源的引用,这些资源可能无法正确映射到我设备上的资源。那可能吗?