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

项目下的build.gradle文件配置

  • 在android{ } 里面配置多个工程包

//翻译成中文就是做出不同的口味
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{ } 里面配置签名
//签名配置
signingConfigs {
    alipay {
        keyAlias 'alipay'
        keyPassword '******'
        storeFile file('D:\\keyStore\\alipay.jks')
        storePassword '******'
    }
    wechat {
        keyAlias 'wechat'
        keyPassword '******'
        storeFile file('D:\\keyStore\\wechat.jks')
        storePassword '******'
    }
}
  • 在android{ } 里面控制输出路径
//打包后应用名称
//定义一个装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)
build {
    doLast() {
        println "任务1: 编译打包完成后需要复制的apk数量: " + fileArray.size()
        forEachFile(fileArray)
    }
}
  • 最后在android{ } 之外,定义一个执行复制命名的方法
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

> 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文件:

alipay_v1.0_debug.apk
alipay_v1.0_release.apk
wechat_v1.0_debug.apk
wechat_v1.0_release.apk

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/26/android-studio-3-command-line-custom-packaging-output-path-and-output-name/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android Studio 3.0下命令行打包自定义输出路径和输出命名
项目下的build.gradle文件配置 在android{ } 里面配置多个工程包 //翻译成中文就是做出不同的口味 flavorDimensions "app" productFlavors { ……
<<上一篇
下一篇>>
文章目录
关闭
目 录