Android studio 自定義打包apk名


Android Studio打包應用默認生成的apk名稱是:app-release.apk 、如果我們要讓生成的apk名跟我們版本包名有聯系的話,那我們就要自定義生成的apk名了

需要在build.gradle(Module:app)文件下android{ }中添加:

// apk name def
    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(output.outputFile.parent, defaultConfig.applicationId + "-" + buildType.name + "-v" +
                    defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk" );
        }
    }

這樣我們打包的apk名就是:com.test.demo-release-v1.01-2.apk   ,就自動帶上我們的包名和版本號了,省去每次都要手動自己改了。

 

如果要生成如下版本號時間戳的apk包名,則可以用如下build.gradle代碼:
模塊名-渠道名-版本號-版本名稱-包名-編譯時間.apk


apply plugin: 'com.android.application'

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.djk.myapplication"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors{
        develop{}
        xiaomi{}
        huawei{}
        anzhi{}
    }

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                //這里修改apk文件名
                def fileName = "demo_${variant.productFlavors[0].name}-${defaultConfig.versionCode}-${defaultConfig.versionName}-${releaseTime()}.apk"
          //def fileName = outputFile.name.replace("app", "${rootProject.ext.appName}-${releaseTime()}-${defaultConfig.versionCode}-${defaultConfig.versionName}")
output.outputFile = new File(outputFile.parent, fileName) } } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.0' }

效果

 
補充:

ref:
Android Studio apk打包自定義包名
https://blog.csdn.net/github_37472200/article/details/78537592?locationNum=3&fps=1

 

// for as 3.3+
android {
    ......
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                outputFileName = defaultConfig.applicationId.subSequence(defaultConfig.applicationId.lastIndexOf(".") + 1, defaultConfig.applicationId.length()) + "-v" + defaultConfig.versionCode + "-" + releaseTime() + "-" + output.baseName + ".apk"
            }
        }
    }
}
def releaseTime() {
    return new Date().format("yyyyMMddHHmmss", TimeZone.getTimeZone("UTC"))
}

 

// for as 3.3 以下
android {
    ......
    variant.outputs.each { output ->
            if ("release".equals(variant.buildType.name)) {
                println("releasebaseName:"+variant.buildType.name)
                def string = defaultConfig.applicationId.subSequence(defaultConfig.applicationId.lastIndexOf(".") + 1,
                        defaultConfig.applicationId.length()) + "-v" + defaultConfig.versionCode + "-" + releaseTime() + "-" + output.baseName + ".apk";
                output.outputFile = new File(output.outputFile.parent, string)
            } else if ("debug".equals(variant.buildType.name)) {
                println("debugbaseName:"+variant.buildType.name)
                def string = defaultConfig.applicationId.subSequence(defaultConfig.applicationId.lastIndexOf(".") + 1,
                        defaultConfig.applicationId.length()) + "-v" + defaultConfig.versionCode + "-" + releaseTime() + "-" + output.baseName + ".apk";
                output.outputFil


生產的包名為:項目名-版本號-打包時間-編譯類型.apk
這個有個BUG就是在打包時能正常生產apk包,但是直接運行安裝到手機時會提示找不到包名,初步分析是因為包名中含有時間戳,去掉分秒的時間就可以了:”yyyyMMddHH”

 

ref:

Android studio gradle配置完整版(轉) - petercao - 博客園
http://www.cnblogs.com/bluestorm/p/6641083.html

 

    /**
     * apk rename
     * 生成apk名形如: cqq-v1.0-1-release.apk
     */
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {

                // like: com.android.cmm.cqq-v1.0-1-release.apk
                outputFileName = defaultConfig.applicationId + "-v" + defaultConfig.versionName + "-" +
                        defaultConfig.versionCode + "-" + output.baseName + ".apk"

                // like: cqq-v1.0-1-release.apk
//                outputFileName = defaultConfig.applicationId.subSequence(
//                        defaultConfig.applicationId.lastIndexOf(".") + 1,
//                        defaultConfig.applicationId.length()) + "-v" + defaultConfig.versionName + "-" +
//                        defaultConfig.versionCode + "-" + output.baseName + ".apk"
            }
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM