1. 程式人生 > >如何對自己的App進行系統簽名,並安裝到手機執行

如何對自己的App進行系統簽名,並安裝到手機執行

背景:

某些App需要一些許可權比較高功能,比如管理其他程序,靜默安裝(貌似輔助功能也能實現)等,可能需要把自己定義成為系統APP,

也就是sharedUserId="android.uid.system",這就要用到系統簽名。

雖然最後簽名是與不同的手機廠商合作的,可是在開發的工程中,如何用系統簽名檔案簽名進行測試呢?

雖然原始碼裡面能夠找到簽名檔案platform.x509.pem/platform.pk8,但Nexus手機出廠時並不是用的這個檔案簽名的,這個只能在模擬器上使用。

這樣豈不是很蛋通~~~

下載了Google官網上的Room裝入我的Nexus6,也不行:

最後刷入CM的Room才成功搞定。走了一些彎路,記錄一下。

刷Google Room遇到的問題:

在刷入Room的過程中報如下的錯誤:

....
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
archive does not contain 'vendor.img'
...

沒有刷入成功,可能是它的指令碼沒有更新?

於是把flash-all.sh的內容修改為如下:

#! /bin/bash
adb reboot bootloader
#fastboot oem unlock
./flash-base.sh
fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash cache cache.img
fastboot flash userdata userdata.img
fastboot reboot

這樣就可以刷入Google的Room了。

刷CM Room (Nexus 6 ):

Room下載地址:

Recovery 下載地址:

CM的Room是一個OTA包,也就是update.zip。

一開始手機上的Recovery是twrp,安裝提示data分割槽等有問題,需要進行factory reset.

於是果斷的刷入上面CM的Recovery,並且進行Full reset,安裝成功。

APP進行系統簽名並安裝

使用原始碼中的簽名檔案命令:
java -jar signapk.jar platform.x509.pem platform.pk8 TestInput.apk  TestInput_cm_sig_3.apk

安裝時提示如下錯誤:


這是因為adb install 會將APP安裝到/data/目錄下,而系統APP是要求在/system/app下。

如何將APP安裝到/system/app目錄

有兩種方式,第一,Root手機,然後push.

                     第二,twrp recovery的功能非常強大,可以在這下面進行檔案操作。

twrp下載地址:

刷入Recovery命令:
adb reboot bootloader
fastboot flash recovery twrp.img
fastboot reboot

Root方式:

6.0的手機,估計一般的Root工具也不能很好的進行Root.

可以用SuperSU,在Recovery模式下直接刷入su工具。

twrp操作:

掛載/system分割槽,然後adb push ....

最後的效果圖: