在Android項目開發中想要将項目導出為apk的時候需要選擇一個數字證書,即keystore檔案,用來對apk進行簽名,是導出APP的一個鑰匙,一般需要我們自己生成android.keystore檔案。
使用JDK的keytool工具生成
- 安裝jdk,keytool.exe位于目錄下/jdk/bin/
- 使用指令:
keytool -genkey -v -keystore android.keystore -alias androidtest -keyalg RSA -validity 365
#參數說明
- genkey 生成檔案
- alias 别名
- keyalg 加密算法
- validity 有效期
- keystore 檔案名
示例
C:\Users\Admin>keytool -genkey -v -keystore android.keystore -alias androidtest -keyalg RSA -validity 365
輸入密鑰庫密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]: test
您的組織機關名稱是什麼?
[Unknown]: test
您的組織名稱是什麼?
[Unknown]: test
您所在的城市或區域名稱是什麼?
[Unknown]: test
您所在的省/市/自治區名稱是什麼?
[Unknown]: test
該機關的雙字母國家/地區代碼是什麼?
[Unknown]: test
CN=test, OU=test, O=test, L=test, ST=test, C=test是否正确?
[否]: y
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 365 天):
CN=test, OU=test, O=test, L=test, ST=test, C=test
輸入 <androidtest> 的密鑰密碼
(如果和密鑰庫密碼相同, 按回車):
再次輸入新密碼:
[正在存儲android.keystore]
Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore android.keystore -destkeystore android.keystore -deststoretype pkcs12" 遷移到行業标準格式 PKCS12。
- 生成檔案android.keystore
- 檢視keystore資訊:
keytool -list -keystore “android.keystore -rfc
使用Android Studio生成
- 打開Android Studio-Build-Generate Signed Bundle/APK-APK-Next-Create New,填寫資訊
生成keystore和apk簽名 - 點選OK,在Key store path路徑下生成android.keystore
使用keystore給apk簽名
- 打開Android Studio-Build-Generate Signed Bundle/APK,選擇Key store path,填寫密碼,點選Next
生成keystore和apk簽名 - 選擇release,Signature Versions勾選V1和V2,最後Finish
生成keystore和apk簽名 - 提示生成/release/app-release.apk即可
生成keystore和apk簽名
Android Studio代碼混淆及自動簽名打包apk
參考:Android studio 代碼混淆及打包apk
混淆
混淆配置的檔案:proguard-rules.pro
自動簽名apk
- 打開Project Structure,選擇Modules-Signing Configs,添加自己的config
生成keystore和apk簽名 - 執行完成後,會在build.gradle中自動加上 signingConfigs{ config {…} }的資訊
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
defaultConfig {
applicationId "com.meigsmart.meigrs32"
minSdkVersion 21
targetSdkVersion 25
versionCode 53
versionName "1.0.53"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//簽名參數
signingConfigs {
sginconfig {
keyAlias 'androiddebug'
keyPassword 'android'
storeFile file('debug.keystore')
storePassword 'android'
}
}
buildTypes {
release {
//簽名
signingConfig signingConfigs.sginconfig
//混淆 ture為開啟 一般relseae時為true debugs為false
minifyEnabled false
//加載預設混淆配置檔案
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.sginconfig
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
- 選擇Build Variants-build Types,選擇release
生成keystore和apk簽名 zip align enabled 預設為true, 用于啟用優化Apk的操作