- 安装java环境
- 终端进入项目App目录,输入
keytool -genkey -v -keystore release-key.keystore -alias alias_name -keyalg RSA -validity 100000
回车,按提示输入密码及一些信息,全部输入完成后,会在App目录生成一个key文件
但是这时候控制台warning:
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore release-key.keystore -destkeystore release-key.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
按照其提示进行迁移
输入
keytool -importkeystore -srckeystore release-key.keystore -destkeystore release-key.keystore -deststoretype pkcs12
再次按照提示输入完成后,会重新生成一个key文件,原来的key进行了.old命名,可以删除掉。
配置build.gradle,方便打包:
signingConfigs {
debug {
略
}
release {
keyAlias 'alias_name'
keyPassword 'xxxxxxx'
storeFile file("release-key.keystore")
storePassword 'xxxxxxx'
v1SigningEnabled true
v2SigningEnabled true
}
}
指定输出名和输出目录
applicationVariants.all {
variant ->
variant.outputs.all {
//只处理生产版本
if (buildType.name == 'release') {
def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
// app包名称
outputFileName = "AppName_V" + variant.versionName + "_" + createTime + "_" + buildType.name + ".apk"
////指定release输出到指定文件夹
variant.packageApplicationProvider.get().outputDirectory = new File("./apk")
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
打包时,

双击assemble即可在apk目录生成打包的apk文件
完整build.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
buildFeatures {
dataBinding = true
viewBinding = true
}
signingConfigs {
debug {
keyAlias 'alias_name'
keyPassword 'xxxxxxx'
storeFile file("release-key.keystore")
storePassword 'xxxxxxxx'
v1SigningEnabled true
v2SigningEnabled true
}
release {
keyAlias 'alias_name'
keyPassword 'xxxxxxxx'
storeFile file("release-key.keystore")
storePassword 'xxxxxxxx'
v1SigningEnabled true
v2SigningEnabled true
}
}
//release版本输出包名自动追加版本号和版本名称
applicationVariants.all {
variant ->
variant.outputs.all {
//只处理生产版本
if (buildType.name == 'release') {
def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
// app包名称
outputFileName = "XXXX_V" + variant.versionName + "_" + createTime + "_" + buildType.name + ".apk"
////指定release输出到指定文件夹
variant.packageApplicationProvider.get().outputDirectory = new File("./apk")
}
}
}
defaultConfig {
applicationId "com.dxl.xxx"
minSdkVersion 22
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
网友评论