讓Android Studio支持系統簽名


有時候,我們開發的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 或 media

3、使用mm編譯App,生成的apk即系統簽名


手動重新簽名

這種方式比在源碼環境下簽名簡單,App可以在Eclipse或Android Studio下編譯,然后給apk重新簽名即可。
但這種方式在頻繁調試的時候比較痛苦,即使寫成腳本,也需要重復一樣的操作。

相關文件

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、將相關文件及源apk文件置於同一路徑下
2、檢查源apk包,去掉META-INF/CERT.SFMETA-INF/CERT.RSA 文件
3、執行簽名命令即可


Android Studio系統簽名

讓Android Studio集成系統簽名,需要用到一個工具keytool-importkeypair,詳見下文。

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.pk8、keytool-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.sh

3、配置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!


原創文章,歡迎轉載,轉載請注明出處

我的簡書賬號是ConnorLin,歡迎光臨!


歡迎關注我的微信


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM