問題來源
做系統應用開發,需要配置系統的簽名,才能讓應用具有系統權限。比如當我們把SystemUI,Setting,Launcher導入android studio編譯apk後,編譯出來的 apk不是系統簽名,是沒有辦法安裝到手機上的。這個時候我們需要對apk進行系統簽名。簽名方式有兩種,一,直接用編譯的signapk.jar文件簽名,源碼簽名。二,用keystore簽名,android stduio簽名
一,源碼簽名
在編譯android源碼之後,會在out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar 下生成signapk.jar文件,找到對應的x509.pem 和pk8文件進行
java -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar xxxx.x509.pem xxx.pk8 x.apk x_sign.apk
二,android stduio簽名
android stduio簽名,需要生成keystore文件。然後在android studio 配置
第一步:下載 keytool-importkeypair
下載 keytool-importkeypair,地址如下
https://github.com/getfatday/keytool-importkeypair
第二步: 生成 keystore
生成 keystore
./keytool-importkeypair -k ./release.keystore -p youPassword -pk8 platform.pk8 -cert platform.x509.pem -alias youAlias
-k 表示要生成的 keystore 文件的名字,這裏命名爲 release.keystore
-p 表示要生成的 keystore 的密碼,這裏是 youPassword
-pk8 表示要導入的 platform.pk8 文件
-cert 表示要導入的platform.x509.pem
-alias 表示給生成的 release.keystore 取一個別名,這是命名爲 youAlias
其他格式簽名入jks,參考這個https://www.jianshu.com/p/9d829e665b32)
第三步:配置keystore
在moudle下的build.gradle配置
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.can.applicationbattery"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//配置keystore
signingConfigs {
config {
keyAlias 'android' //別名
keyPassword 'android' //簽名密碼
storeFile file("/home/android/sign/csw_platform.keystore") //簽名文件路徑
storePassword 'android' //簽名密碼
}
}
// 引用簽名配置
buildTypes {
release {
signingConfig signingConfigs.config //relese 版本配置簽名文件
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.config//debug 版本配置簽名文件
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
只用管上的配置簽名文件,和引用簽名配置就可以,其他代碼是方便博友找到配置位置。
與第二步文件對應是這樣的
生成簽名時的配置 | studio配置的值 |
---|---|
-k 表示要生成的 keystore 文件的名字,這裏命名爲 release.keystore | storeFile file("/home/android/ release.keystore") |
-p 表示要生成的 keystore 的密碼,這裏是 android | keyPassword ‘android’ 和 storePassword ‘android’ |
-alias 表示給生成的 release.keystore 取一個別名,這是命名爲 android | keyAlias ‘android’ |