不是 Pixel 也要 Pixel Blue!

Toby Tso
5 min readDec 17, 2016

Pixel Blue 指 Pixel 獨享的藍色主題配色.

準備

反編譯 framework-res.apk

為了防止搞錯, 你可以先重命名兩個 framework-res.apk, 例如我的做法是將牠們命名為 framework-res-Nexus.apkframework-res-Pixel.apk.

打開命令列, 使用 apktool d framework-res-Nexus.apkapktool d framework-res-Pixel.apk 來反編譯牠們.

在目錄下得到 framework-res-Nexusframework-res-Pixel 兩個資料夾.

修改 framework-res.apk 顏色設定檔

framework-res-Pixel/res/values 裡找到 colors.xml, 牠就是決定系統主題顏色的設定檔.

這裡依照 color name 分為三種情形討論:

  • 「我有的, Pixel 沒有的」color name
左: 我的 colors.xml, 右: Pixel 的 colors.xml

這種情形不必作任何修改.

  • 「Pixel 有的, 我沒有的」color name
左: 我的 colors.xml, 右: Pixel 的 colors.xml

請將「Pixel 有的, 我沒有的」代碼拷貝到你的 colors.xml 中.

  • 「Pixel 和我不一樣的」color name
左: 我的 colors.xml, 右: Pixel 的 colors.xml

color name 相同, 值不相同. 請將「Pixel 和我不一樣的」的代碼覆寫到你的 colors.xml 中. (左 93 至 96 對應右 71 至 73 行屬於第二種情形, 應將右 71 至 73 行拷貝入, 而不是進行覆寫)

如果正在使用 Nexus 和 Android 7.1.1, 你可以直接將 Pixel 的 colors.xml 覆寫到你的 framework-res-Nexus/res/values/colors.xml 之上, 牠們是互通的.

重編譯 framework-res.apk

使用 apktool b framework-res-Nexus 重新編譯修改過的 Nexus framework-res.apk.

framework-res-Nexus/dist 得到修改後的 framework-res-Nexus.apk.

重簽名 framework-res.apk

使用 apktool b 編譯的 APK 檔是沒有簽名過的, 使用沒有簽名過的 APK 必定會造成 boot loop. 對於一般的 APK, 可以直接簽一個名上去就 OK, 但是對於 framework-res.apk 等系統級 APK, 隨便簽名亦會導致 boot loop.

正確的做法如下:

  1. 使用解壓縮軟體解壓縮原 framework-res-Nexus.apk 和剛剛編譯好的新 framework-res-Nexus.apk.
  2. 拷貝原 framework-res-Nexus.apk 解壓縮出來的 META-INF 目錄和 AndroidManifest.xml 檔案.
  3. 把拷貝出來的 META-INF 目錄和 AndroidManifest.xml 檔案覆寫到新 framework-res-Nexus.apk 解壓縮出來的目錄裡面.
  4. 使用壓縮軟體以 ZIP (僅存儲, 即無壓縮) 的方式打包修改後的新 framework-res-Nexus.apk 解壓縮出來的目錄裡的所有檔案 (見圖).
  5. 將打包好的 ZIP 的副檔名修改為 APK, 即是將檔名修改為 framework-res.apk.
打包好的 ZIP 應呈上圖所示的檔案結構

應用到 Android

以上即是對 framework-res.apk 的修改流程, 現在使用 TWRP 等帶檔案總管的高級 Recovery 對 /system/framework/framework-res.apk 進行覆寫.

不要在 Android 系統下覆寫 /system/framework/framework-res.apk, 系統會即刻偵測到, 然後 Android 會崩潰.

--

--