如何對自己的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 ....