0

我正在尝试为运行 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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.theme.aospstatusbar">

    <overlay
        android:priority="1"
        android:targetPackage="com.android.systemui"
</manifest>

以下文件是我包含在包中的可绘制对象的示例,上面的错误示例指的是:

./res/drawable/stat_sys_wifi_signal_0.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="18.41dp"
        android:height="18.41dp"
        android:viewportWidth="21.2"
        android:viewportHeight="21.2">
      <group
          android:translateX="0.5"
          android:translateY="2.0">
        <path
            android:pathData="M18.79,9.79c-0.32,-0.32 -0.83,-0.32 -1.15,0L16.43,11l-1.21,-1.21c-0.32,-0.32 -0.83,-0.32 -1.15,0L14.06,9.8l0,0c-0.32,0.32 -0.32,0.83 0,1.15l1.21,1.21l-1.21,1.21l0,0c-0.32,0.32 -0.32,0.83 0,1.15l0.01,0.01c0.32,0.32 0.83,0.32 1.15,0l1.21,-1.21l1.21,1.21c0.32,0.32 0.83,0.32 1.15,0c0.32,-0.32 0.32,-0.83 0,-1.15l-1.21,-1.21l1.21,-1.21C19.1,10.64 19.1,10.13 18.79,9.79z"
            android:fillColor="?*com.android.systemui:attr/fillColor"/>
        <path
            android:pathData="M11.69,7.44h6.27L19.95,5c0.4,-0.49 0.3,-1.22 -0.23,-1.56c-1.6,-1.05 -5.04,-2.9 -9.62,-2.9c-4.59,0 -8.03,1.85 -9.62,2.9C-0.05,3.78 -0.16,4.51 0.24,5l9.02,11.08c0.42,0.52 1.22,0.52 1.64,0l0.78,-0.96V7.44z"
            android:fillColor="?*com.android.systemui:attr/backgroundColor"/>
      </group>
</vector>

我使用以下命令(aaptbuild-tools\26.0.3)构建:

aapt package -M \thm\AndroidManifest.xml -S \thm\res -I %sdk%\platforms\android-26\android.jar -F \thm\build\overlay.apk -f

我相信问题出在从systemui包中引用?难道我做错了什么?

4

2 回答 2

2

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

于 2018-06-21T13:11:30.640 回答
0

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

详细说明:

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

http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/res/res/values/public.xml

尝试 processDebugResources 时的 aapt 在 android.jar 和 \thm\res 中查找资源。由于它在两者中都找不到资源,因此会引发 no resource found 错误。

解决方案 :

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

http://androidxref.com/8.0.0_r4/xref/frameworks/base/packages/SystemUI/res/

于 2018-04-23T18:30:39.300 回答