有時候,咱們開發的apk須要用到系統權限,須要在AndroidManifest.xml中添加共享系統進程屬性:java
android:sharedUserId="android.uid.system" android:sharedUserId="android.uid.shared" android:sharedUserId="android.media"
這時候apk的簽名就須要是系統簽名(platform、shared或media)才能正常使用。linux
這種方式比較麻煩,你須要有編譯過的源碼環境,並按以下步驟:android
一、拷貝App源碼到Android源碼的packages/apps/
目錄下,且App源碼是普通(Eclipse)格式的
二、配置Android.mk,在其中添加git
LOCAL_CERTIFICATE := platform 或 shared 或 media
三、使用mm
編譯App,生成的apk即系統簽名github
這種方式比在源碼環境下簽名簡單,App能夠在Eclipse或Android Studio下編譯,而後給apk從新簽名便可。
但這種方式在頻繁調試的時候比較痛苦,即便寫成腳本,也須要重複同樣的操做。shell
platform.x509.pem、platform.pk八、signapk.jarandroid-studio
platform.x509.pem、platform.pk8: 微信
../build/target/product/security
signapk.jar: markdown
../out/host/linux-x86/framework
signapk源碼路徑: app
../build/tools/signapk
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
一、將相關文件及源apk文件置於同一路徑下
二、檢查源apk包,去掉META-INF/CERT.SF
和 META-INF/CERT.RSA
文件
三、執行簽名命令便可
讓Android Studio集成系統簽名,須要用到一個工具keytool-importkeypair
,詳見下文。
keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore
這個工具的做用是將系統簽名的相關信息導入到已有的簽名文件裏。可從這裏下載。
工具的使用方法能夠經過–help或README.textile來尋求幫助,或參考使用keytool工具 這篇文章。
platform.x509.pem、platform.pk八、keytool-importkeypair、demo.jks、signature.sh
個人作法是在App根目錄新建Signature文件夾專門存放簽名相關文件。
一、生成demo.jks簽名文件
二、編寫簽名腳本signature.sh,內容以下:
#!/bin/sh # 轉換系統簽名命令 ./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo # demo.jks : 簽名文件 # 123456 : 簽名文件密碼 # platform.pk八、platform.x509.pem : 系統簽名文件 # demo : 簽名文件別名
爲腳本文件添加可執行權限:
$ sudo chmod a+x signature.sh
執行腳本:
$ ./signature.sh
三、配置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了。
That’s all, Enjoy it!