解决办法:通过配置gradle,来一键打包。
解决步骤:
1.进入Project Structure,或者直接按快捷键Ctrl+Alt+Shift+S,选择需要自动打包配置的app,选择Siging,新增并填写信息。然后选择Build Types-->>release-->>Signing Config,选择刚才配置的签名信息,最后点击ok,如下图:
执行成功后,会在gradle生成如下图:
2.隐藏gradle中签名信息,在电脑硬盘中任意位置新建一个keystore.properties文件,并添加如下信息(具体签名信息根据自己的进行修改):
新建keystore.properties后,修改gradle配置,如下:
apply plugin: 'com.android.application'
// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("E://keystore.properties")
// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()
// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
}
注意:1.rootProject.file("E://keystore.properties"),这里是使用绝对路径,而且配置是"//"不是"\\".
如果keystore.properties是在当前工程下,则直接用rootProject.file("keystore.properties").如果keystore.properties是在appworkspace目录下,则使用rootProject.file("../keystore.properties").
绝对路径写法,如:rootProject.file("E://android/appworkspace/keystore.properties")
2.签名文件信息不要写错,否则会报keyToolException.
3.选择Build-->>Select Build Variants,选择相应的model,然后选择Build Variant为release,如下图:
注意:这里如果工程需要dubug调试工程app,打包apk到模拟器,则需要切换Build Variant为debug.
4.最后选择相应的model,即app,然后点击Build-->>Build APK,生成apk即可。
注意:apk最终生成在outputs目录下,不一定是android studio提示Show in Explorer的路径。
配置gradle实现自定义apk的文件名:
apply plugin: 'com.android.application'
def releaseTime() {
String date =new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
return date.substring(2)
}
...
android{
...
//指定打包后apk文件名称
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name.equals('release')) {
//这里修改apk文件名
def fileName = "APPNAME-APP_FJ-${defaultConfig.versionName}-BETA-${releaseTime() }.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}