1. 程式人生 > >讓Android Studio支援系統簽名(證書)

讓Android Studio支援系統簽名(證書)

有時候,我們開發的apk需要用到系統許可權,需要在AndroidManifest.xml中新增共享系統程序屬性:

 

android:sharedUserId="android.uid.system" 
android:sharedUserId="android.uid.shared" 
android:sharedUserId="android.media"

這時候apk的簽名就需要是系統簽名(platform、shared或media)才能正常使用。
----------------------------------------------------------------------------------------------

常用系統簽名方式

1、Android原始碼環境下簽名


這種方式比較麻煩,你需要有編譯過的原始碼環境,並按如下步驟:
1、拷貝App原始碼到Android原始碼的packages/apps/目錄下,且App原始碼是普通(Eclipse)格式的
2、配置Android.mk,在其中新增
LOCAL_CERTIFICATE := platform 或 shared 或 media
3、使用mm -B 編譯App,生成的apk即系統簽名
-----------------------------------------------------------------------------------------------

2、手動重新簽名


這種方式比在原始碼環境下簽名簡單,App可以在Eclipse或Android Studio下編譯,然後給apk重新簽名即可。
但這種方式在頻繁除錯的時候比較痛苦,即使寫成指令碼,也需要重複一樣的操作。

2.1、相關檔案
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


2.2、簽名命令
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、執行簽名命令即可

-----------------------------------------------------------------------------------------------

3、Android Studio系統簽名


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

keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore



這個工具的作用是將系統簽名的相關資訊匯入到已有的簽名檔案裡。可從這裡下載。
工具的使用方法可以通過--help或README.textile來尋求幫助。
相關檔案
platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh
我的做法是在App根目錄新建Signature資料夾專門存放簽名相關檔案。
步驟
1、生成demo.jks簽名檔案

相關檔案
platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh
我的做法是在App根目錄新建Signature資料夾專門存放簽名相關檔案。
步驟
生成demo.jks簽名檔案

在這裡選擇簽名的檔案

圖片上的密碼要和命令的密碼對應,別名Alias也要對應起來,還有路徑,其他資訊是次要的

這個步驟後,可以在對應的位置生成一個demo.jks檔案


2、編寫簽名指令碼signature.sh,利用步驟1生成的檔案生成新的檔案

內容如下:
注意!!一定要把這個檔案放到linux環境下編譯,在windows下編譯目前我還沒測試成功,我相信坐簽名的同學一定有linux編譯環境

#!/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

注意!!這時候會生成新的demo.jks,把這個demo.jks替換掉原來的那個才可以。

 

3、配置builde.gradle
在android區域下(與defaultConfig同級)新增配置:
注意 !!Android studio有兩個builde.gradle,要在有Android關鍵字的那個新增,別搞錯了。

    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,還需修改:

修改buildTypes:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        signingConfig signingConfigs.release
    }
}
 

這樣直接Run app就是帶系統簽名的release版apk了。

如果對你有用,請關注微信公眾號【嵌入式Linux

參考:Android Studio自動生成帶系統簽名的apk