Android 参考“systemui”资源在Oreo中构建RRO/覆盖主题

Android 参考“systemui”资源在Oreo中构建RRO/覆盖主题,android,overlay,android-8.0-oreo,oms,rro,Android,Overlay,Android 8.0 Oreo,Oms,Rro,我正在尝试为运行Oreo的设备构建一个RRO/覆盖主题,以更改状态栏图标/指示器 我拉拽了AOSP的状态栏图标,只做了一次修改就将它们包含在包中:将对内部systemui包的引用从?attr/XXX更改为?*com.android.systemui:attr/XXX。每次生成时,都会引发以下错误: \thm\res\drawable\stat_sys_wifi_signal_0.xml:24: error: Error: No resource found that matches the gi

我正在尝试为运行Oreo的设备构建一个RRO/覆盖主题,以更改状态栏图标/指示器

我拉拽了AOSP的状态栏图标,只做了一次修改就将它们包含在包中:将对内部
systemui
包的引用从
?attr/XXX
更改为
?*com.android.systemui:attr/XXX
。每次生成时,都会引发以下错误:

\thm\res\drawable\stat_sys_wifi_signal_0.xml:24: error: Error: No resource found that matches the given name (at 'fillColor' with value '?*com.android.systemui:attr/fillColor').

\thm\res\drawable\stat_sys_wifi_signal_0.xml:27: error: Error: No resource found that matches the given name (at 'fillColor' with value '?*com.android.systemui:attr/backgroundColor').

我正在使用命令行构建我的APK,这是我的文件设置:

/AndroidManifest.xml


你不能这样做。你说你已经为系统用户界面提取了AOSP资源,你可以在你的构建中直接使用它们

详细说明:

您试图访问的资源是com.android.systemui包的一部分,该包不在您传递给aapt命令的android.jar中。android.jar中唯一可供第三方访问的资源是android framework的public.xml文件中列出的资源:

在尝试processDebugResources时,aapt会在android.jar和\thm\res中查找资源。由于它无法在这两者中找到资源,因此会抛出“未找到资源”错误

解决方案:

创建与当前类似的资源,并在主题中使用它们。您必须解决每个依赖项,这样您的apk就可以在任何android设备上独立运行


您不能这样做。您说您已经为系统UI提取了AOSP资源,您可以在构建中直接使用它们

详细说明:

您试图访问的资源是com.android.systemui包的一部分,该包不在您传递给aapt命令的android.jar中。android.jar中唯一可供第三方访问的资源是android framework的public.xml文件中列出的资源:

在尝试processDebugResources时,aapt会在android.jar和\thm\res中查找资源。由于它无法在这两者中找到资源,因此会抛出“未找到资源”错误

解决方案:

创建与当前类似的资源,并在主题中使用它们。您必须解决每个依赖项,这样您的apk就可以在任何android设备上独立运行


我不知道答案是否仍然相关,但我正试图做同样的事情,我已经找到了解决方案。
只需将
-I systemui.apk
放入aapt命令,它就可以编译了。假设您在同一文件夹中有拉取的systemui包。这应该适用于任何软件包。

我不知道答案是否仍然相关,但我正在尝试做同样的事情,我已经找到了解决方案。
只需将
-I systemui.apk
放入aapt命令,它就可以编译了。假设您在同一文件夹中有拉取的systemui包。这应该适用于任何包。

我使用了您描述的方式,并且
aapt
现在可以识别属性,但告诉我
错误:属性不是公共的
。(很抱歉回复太晚。)我仍在使用
?*com.android.systemui:attr/XXX
引用它们,但也尝试了不带星号和/或不带包名的方法,结果相同。对不起,我的错误。此解决方案可能适用于除属性之外的所有其他类型的资源。另一个解决方案可能是在覆盖中重新创建属性,并使用public.xml中的原始id引用它。但这给了我另一个错误,我不知道如何解决。我甚至不确定它是否能解决这个问题。我使用了您描述的方法,并且
aapt
现在可以识别属性,但是告诉我
错误:属性不是公共的
。(很抱歉回复太晚。)我仍在使用
?*com.android.systemui:attr/XXX
引用它们,但也尝试了不带星号和/或不带包名的方法,结果相同。对不起,我的错误。此解决方案可能适用于除属性之外的所有其他类型的资源。另一个解决方案可能是在覆盖中重新创建属性,并使用public.xml中的原始id引用它。但这给了我另一个错误,我不知道如何解决。我甚至不确定它是否能解决问题。
aapt package -M \thm\AndroidManifest.xml -S \thm\res -I %sdk%\platforms\android-26\android.jar -F \thm\build\overlay.apk -f