背景
我們都知道AndroidManifest.xml配置如下屬性
<pre style="margin: 15px 0px; padding: 1em 1.2em; border: 1px solid rgb(204, 204, 204); font-size: 13px; vertical-align: baseline; box-sizing: border-box; word-wrap: normal; white-space: pre; display: block; line-height: 18px; background: rgb(246, 246, 246); border-radius: 3px; font-family: Consolas, Menlo, Monaco, Courier, monospace, monospace; overflow-x: auto; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">android:sharedUserId="android.uid.system"</pre>
直接運行是跑不起來的,我們只有拿到了平臺的pk8/x509.pem文件通過如下簽名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk [new].apk
才能獲得與android.uid.system相同的權限,才能調用系統(tǒng)api,這種情況會給開發(fā)帶來很大的困擾示惊,代碼調試不方便兑燥,影響開發(fā)效率。
現(xiàn)在有一種方法將pk8/x509.pem導入到keystore,然后我們運行代碼的時候使用keystore進行簽名就可以獲得與android.uid.system相同的權限,不需要再次進行系統(tǒng)簽名
環(huán)境準備
以windows為例首先需要下載openssl 渴语,根據(jù)自己的 實際情況選擇版本
[圖片上傳失敗...(image-3681ed-1552999268535)]
下載后直接安裝枯冈,安裝完成環(huán)境變量Path只想到bin目錄毅贮,如下圖:
、[圖片上傳失敗...(image-731f27-1552999268535)]
導入到keystore
第一步
cd到pk8以及x509.pem文件的目錄執(zhí)行如下命令尘奏,把platform.pk8生成了.pem 文件:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
其中platform.pk8為pk8文件名滩褥,platform.priv.pem為.pem 文件文件名可以隨意修改,執(zhí)行成功后炫加,會在目錄下生成pem文件如下:[圖片上傳失敗...(image-a12bb7-1552999268535)]
第二步
執(zhí)行如下命令瑰煎,生成pkcs12格式的密鑰文件,生成platform.pk12文件铺然,最后的android是keystore的alias,這里默認為android_box酒甸, platform.pk12是pk12文件名探熔,需要輸入兩次密碼,我們這里默認為android_box
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name android_box
需要輸入兩次密碼烘挫,我們這里默認為android_box
[圖片上傳失敗...(image-61a030-1552999268535)]
會在目錄下生成pk12文件诀艰,如下圖:
[圖片上傳失敗...(image-cd3046-1552999268535)]
第三步
執(zhí)行如下命令生成keystore文件,
keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass android_box -alias android_box
platform.keystore是生成的keystore文件饮六,也可以是jks,-srcstorepass后面的android_box 是keystore的密碼其垄,-alias 后面的android_box是keystore的alias,這個需要與第二步中的alias一致,否則報錯如下:
[圖片上傳失敗...(image-f5a7b5-1552999268535)]
需要輸入第二步中生成pk12的password卤橄,否則報錯如下圖
[圖片上傳失敗...(image-f740be-1552999268535)]
正確輸入 密碼后绿满,keystore文件生成好了,接下我們在項目中無論是debug還是release都可以獲得與android.uid.system相同的權限窟扑。