出處: https://connorlin.github.io/2016/04/27/%E8%AE%A9Android-Studio%E6%94%AF%E6%8C%81%E7%B3%BB%E7%BB%9F%E7%AD%BE%E5%90%8D(%E8%AF%81%E4%B9%A6)/
有時候,我們開發的apk需要用到系統權限,需要在AndroidManifest.xml中添加共享系統進程屬性:
android:sharedUserId="android.uid.system" android:sharedUserId="android.uid.shared" android:sharedUserId="android.media"這時候apk的簽名就需要是系統簽名(platform、shared或media)才能正常使用。
常用系統簽名方式
Android源碼環境下簽名
這種方式比較麻煩,你需要有編譯過的源碼環境,並按如下步驟:
1、拷貝App源碼到Android源碼的
packages/apps/目錄下,且App源碼是普通(Eclipse)格式的
2、配置Android.mk,在其中添加LOCAL_CERTIFICATE := platform 或 shared 或 media3、使用
mm編譯App,生成的apk即係統簽名
手動重新簽名
這種方式比在源碼環境下簽名簡單,App可以在Eclipse或Android Studio下編譯,然後給apk重新簽名即可。
但這種方式在頻繁調試的時候比較痛苦,即使寫成腳本,也需要重複一樣的操作。相關文件
platform.x509.pem,platform.pk8,signapk.jar
文件位置
platform.x509.pem,platform.pk8:
../build/target/product/securitysignapk.jar:
../out/host/linux-x86/frameworksignapk源碼路徑:
../build/tools/signapk簽名命令
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk步驟
1、將相關文件及源apk文件置於同一路徑下
2、檢查源apk包,去掉META-INF/CERT.SF和
META-INF/CERT.RSA文件
3、執行簽名命令即可Android Studio系統簽名
讓Android Studio集成系統簽名,需要用到一個工具
keytool-importkeypair,詳見下文。
密鑰工具,importkeypair
keytool-importkeypair – 用於將密鑰/證書對導入現有Java密鑰庫的外殼腳本
這個工具的作用是將系統簽名的相關信息導入到已有的簽名文件裡。可從這裡下載。
工具的使用方法可以通過–help或README.textile來尋求幫助,或參考使用keytool工具這篇文章。
相關文件
platform.x509.pem,platform.pk8,密鑰工具 – importkeypair,demo.jks,signature.sh
我的做法是在App根目錄新建Signature文件夾專門存放簽名相關文件。
步驟
1、生成demo.jks簽名文件
2、編寫簽名腳本signature.sh,內容如下:
#!/bin/sh # 转换系统签名命令 ./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo # demo.jks : 签名文件 # 123456 : 签名文件密码 # platform.pk8、platform.x509.pem : 系统签名文件 # demo : 签名文件别名為腳本文件添加可執行權限:
$ sudo chmod a+x signature.sh執行腳本:
$ ./signature.sh3、配置builde.gradle
在android區域下(與defaultConfig同級)添加配置:
signingConfigs { release { storeFile file("../signature/demo.jks") storePassword '123456' keyAlias 'demo' keyPassword '123456' } debug { storeFile file("../signature/demo.jks") storePassword '123456' keyAlias 'demo' keyPassword '123456' } }這樣debug或release apk就帶有系統簽名了。
如果想直接
Run app就是release版且帶系統簽名的apk,還需修改:
1)變體app
2)修改
buildTypes:
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.release } }這樣直接
Run app就是帶系統簽名的release版apk了。
就這樣,享受它!
原創文章,歡迎轉載,轉載請註明出處 我的簡書賬號是ConnorLin,歡迎光臨!