Android Studio 3.0下命令行打包自定义输出路径和输出命名

项目下的build.gradle文件配置

  • 在android{ } 里面配置多个工程包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//翻译成中文就是做出不同的口味
flavorDimensions "app"
productFlavors {
alipay {
dimension "app"
applicationId "cn.appblog.MultiApk.alipay"
versionCode 1
versionName "1.0"
signingConfig signingConfigs.alipay
}
wechat {
dimension "app"
applicationId "cn.appblog.MultiApk.wechat"
versionCode 1
versionName "1.0"
signingConfig signingConfigs.wechat
}
}
  • 在android{ } 里面配置签名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//签名配置
signingConfigs {
alipay {
keyAlias 'alipay'
keyPassword '******'
storeFile file('D:\\keyStore\\alipay.jks')
storePassword '******'
}
wechat {
keyAlias 'wechat'
keyPassword '******'
storeFile file('D:\\keyStore\\wechat.jks')
storePassword '******'
}
}
  • 在android{ } 里面控制输出路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//打包后应用名称
//定义一个装apk文件路径的数组
def fileArray = []
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
def fileName
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name.equals('release')) {
fileName = "${variant.productFlavors[0].name}_${variant.productFlavors[0].versionName}_${variant.productFlavors[0].versionCode}_release.apk"
} else if (variant.buildType.name.equals('debug')) {
fileName = "${variant.productFlavors[0].name}_${variant.productFlavors[0].versionName}_${variant.productFlavors[0].versionCode}_debug.apk"
}
//output.outputFile = new File(outputFile.parent, fileName)
//println fileName
outputFileName = new File('../../', fileName)
println "自定义输出apk名称: " + fileName
println "自定义输出apk路径: " + outputFileName
fileArray.add(outputFile.parentFile.parentFile.parentFile.absolutePath + File.separator + fileName)
}
}
}
  • 在android{ } 里面写一个apk的复制重命名的任务(task)
1
2
3
4
5
6
build {
doLast() {
println "任务1: 编译打包完成后需要复制的apk数量: " + fileArray.size()
forEachFile(fileArray)
}
}
  • 最后在android{ } 之外,定义一个执行复制命名的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def forEachFile(fileArray) {
println "任务2: 遍历apk文件"
fileArray.forEach { file ->
//遍历进行文件操作
copy_and_rename_apk(file)
}
}

def copy_and_rename_apk(orignalFile) {
def intoFile = rootDir.parentFile.getAbsolutePath() + File.separator + "apks"
copy {
from orignalFile
into intoFile
println "任务3: 复制apk到指定位置 " + orignalFile + " -> " + intoFile
rename("${android.defaultConfig.versionName}_${android.defaultConfig.versionCode}", "v${android.defaultConfig.versionName}")
println "任务4: 重命名apk " + "${android.defaultConfig.versionName}_${android.defaultConfig.versionCode}" + " -> " + "v${android.defaultConfig.versionName}"
}
}

控制台输出

配置上面的一切之后,在Android Studio 3.0 的Terminal中输入: gradle build

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> Configure project :app
自定义输出apk名称: alipay_1.0_1_debug.apk
自定义输出apk路径: ..\..\alipay_1.0_1_debug.apk
自定义输出apk名称: alipay_1.0_1_release.apk
自定义输出apk路径: ..\..\alipay_1.0_1_release.apk
自定义输出apk名称: wechat_1.0_1_debug.apk
自定义输出apk路径: ..\..\wechat_1.0_1_debug.apk
自定义输出apk名称: wechat_1.0_1_release.apk
自定义输出apk路径: ..\..\wechat_1.0_1_release.apk

> Task :app:build
任务1: 编译打包完成后需要复制的apk数量: 4
任务2: 遍历apk文件
任务3: 复制apk到指定位置 E:\Android-Project\MultiApk\app\build\outputs\apk\alipay_1.0_1_debug.apk -> E:\Android-Project\apks
任务4: 重命名apk 1.0_1 -> v1.0
任务3: 复制apk到指定位置 E:\Android-Project\MultiApk\app\build\outputs\apk\alipay_1.0_1_release.apk -> E:\Android-Project\apks
任务4: 重命名apk 1.0_1 -> v1.0
任务3: 复制apk到指定位置 E:\Android-Project\MultiApk\app\build\outputs\apk\wechat_1.0_1_debug.apk -> E:\Android-Project\apks
任务4: 重命名apk 1.0_1 -> v1.0
任务3: 复制apk到指定位置 E:\Android-Project\MultiApk\app\build\outputs\apk\wechat_1.0_1_release.apk -> E:\Android-Project\apks
任务4: 重命名apk 1.0_1 -> v1.0

在E:\Android-Project\apks目录下生成apk文件:

1
2
3
4
alipay_v1.0_debug.apk
alipay_v1.0_release.apk
wechat_v1.0_debug.apk
wechat_v1.0_release.apk

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :