有時(shí)候缓呛,我們開(kāi)發(fā)的apk需要用到系統(tǒng)權(quán)限欣硼,需要在A(yíng)ndroidManifest.xml中添加共享系統(tǒng)進(jìn)程屬性:
android:sharedUserId="android.uid.system"
android:sharedUserId="android.uid.shared"
android:sharedUserId="android.media"
這時(shí)候apk的簽名就需要是系統(tǒng)簽名(platform先紫、shared或media)才能正常使用石抡。
常用系統(tǒng)簽名方式
Android源碼環(huán)境下簽名
這種方式比較麻煩赐纱,你需要有編譯過(guò)的源碼環(huán)境搅轿,并按如下步驟:
1病涨、拷貝App源碼到Android源碼的packages/apps/
目錄下,且App源碼是普通(Eclipse)格式的
2璧坟、配置Android.mk既穆,在其中添加
LOCAL_CERTIFICATE := platform 或 shared 或 media
3、使用mm
編譯App雀鹃,生成的apk即系統(tǒng)簽名
手動(dòng)重新簽名
這種方式比在源碼環(huán)境下簽名簡(jiǎn)單幻工,App可以在Eclipse或Android Studio下編譯,然后給apk重新簽名即可黎茎。
但這種方式在頻繁調(diào)試的時(shí)候比較痛苦囊颅,即使寫(xiě)成腳本,也需要重復(fù)一樣的操作傅瞻。
相關(guān)文件
platform.x509.pem踢代、platform.pk8、signapk.jar
文件位置
platform.x509.pem嗅骄、platform.pk8:
../build/target/product/security
signapk.jar:
../out/host/linux-x86/framework
signapk源碼路徑:
../build/tools/signapk
簽名命令
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
步驟
1胳挎、將相關(guān)文件及源apk文件置于同一路徑下
2、檢查源apk包溺森,去掉META-INF/CERT.SF
和 META-INF/CERT.RSA
文件
3慕爬、執(zhí)行簽名命令即可
Android Studio系統(tǒng)簽名
讓Android Studio集成系統(tǒng)簽名,需要用到一個(gè)工具keytool-importkeypair
屏积,詳見(jiàn)下文澡罚。
keytool-importkeypair
keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore
這個(gè)工具的作用是將系統(tǒng)簽名的相關(guān)信息導(dǎo)入到已有的簽名文件里∩銮耄可從這里下載留搔。
工具的使用方法可以通過(guò)--help或README.textile來(lái)尋求幫助,或參考使用keytool工具 這篇文章铛铁。
相關(guān)文件
platform.x509.pem隔显、platform.pk8却妨、keytool-importkeypair、demo.jks括眠、signature.sh
我的做法是在A(yíng)pp根目錄新建Signature文件夾專(zhuān)門(mén)存放簽名相關(guān)文件彪标。
步驟
1、生成demo.jks簽名文件
2掷豺、編寫(xiě)簽名腳本signature.sh捞烟,內(nèi)容如下:
#!/bin/sh
# 轉(zhuǎn)換平臺(tái)簽名命令
./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo
# demo.jks : 簽名文件
# 123456 : 簽名文件密碼
# platform.pk8、platform.x509.pem : 系統(tǒng)簽名文件
# demo : 簽名文件別名
為腳本文件添加可執(zhí)行權(quán)限:
$ sudo chmod a+x signature.sh
執(zhí)行腳本:
$ ./signature.sh
3当船、配置builde.gradle
在android區(qū)域下(與defaultConfig同級(jí))添加配置:
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就帶有系統(tǒng)簽名了题画。
如果想直接Run app
就是release版且?guī)到y(tǒng)簽名的apk,還需修改:
- 變體app
-
修改
buildTypes
:buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
}
}
這樣直接Run app
就是帶系統(tǒng)簽名的release版apk了德频。
That's all, Enjoy it!