用gradle重命名apk - >得到相同的apk两次

时间:2013-08-29 09:52:12

标签: android gradle android-studio build.gradle

我有一个不同风格的应用程序 - 每个风格都有两个buildTypes。

在我的清单中重命名一些行后,我也重命名了apk。一切正常 - 我只是想知道为什么我两次获得同样的答案?一旦没有重命名,一旦重命名......

具有不同名称的相同应用的简短示例:

  • “myApp-flavor-buildType.apk”(未重命名)
  • “myApp-appName-buildType-version.apk”(重命名为apk)

以下是build.gradle文件的代码:

// *** OVERRIDE data in MANIFEST ***
android.applicationVariants.each { variant ->
    variant.processManifest.doLast {
        overrideDataInManifest(variant)
    }
}

def overrideMapsKey(buildVariant){
    def appName = getAppName(buildVariant)

    // override line ... this is not necessary to this question

    renameAPK(buildVariant, appName)
}

// *** RENAME APK ***
def renameAPK(buildVariant, appName){
    def apk = buildVariant.packageApplication.outputFile;
    def newName = "";

    // get data for apk renaming
    def versionName = android.defaultConfig.versionName 
    def versionNameSuffix = buildVariant.buildType.versionNameSuffix
    if(versionNameSuffix.toString().equals("null"))
        versionNameSuffix = ""
    def buildTypeOfApp= buildVariant.buildType.name 

    if (buildVariant.zipAlign) {
        newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + ".apk"
    }else{
        newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED" + ".apk"
    }
    buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);
}

只想了解最新情况,如果可以完成相同的任务而不需要两个apks。

4 个答案:

答案 0 :(得分:11)

zipAlign选项设置为true时,将始终有两个APK文件用于变体。首先,gradle构建原始APK文件,然后对其进行zipalign并生成优化版本而不删除原始版本。

buildVariant.packageApplication.outputFile是构建过程的中间产品,在我的观察中,一个总是未对齐的APK文件。

buildVariant.outputFile是应用zipAlign选项的最终输出。

另一方面,您可能想要更正build.gradile文件,它实际上将APK文件的未对齐版本重命名为“ALIGNED”版本,并保持zipalign APK文件不变。这是我的修改版本:

if (buildVariant.zipAlign) {
    newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED.apk"
    buildVariant.outputFile = new File(apk.parentFile, newName);
}

newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-UNALIGNED" + ".apk"
buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);

答案 1 :(得分:2)

对于任何搜索重命名Android库文件(aar)的人来说,这就是我为gradle 2. +版本提出的:

android.libraryVariants.all { variant ->
    if (variant.buildType.name == 'release') {
        def oldFile = variant.outputs.get(0).getOutputFile()
        if (oldFile.name.contains("release")) {
            def newPath = oldFile.name.replace("release.aar", version.toString() + ".aar")
            variant.outputs.get(0).
                    setOutputFile(new File(oldFile.parentFile.toString(), newPath.toString()))
        }
    }
}

如果你想出一个更好的方法,请告诉我。

答案 2 :(得分:1)

"

答案 3 :(得分:0)

如果您使用的是Android Gradle Plugin 0.13或更高版本,则界面会发生一些变化:

android.applicationVariants.all { variant ->

    def name
    variant.outputs.each { output ->

        def apkDirectory = variant.packageApplication.outputFile.parentFile

        if (output.zipAlign) {
            name = "yourAppName.apk"
            output.outputFile = new File(apkDirectory, name);
        }

        name = "yourAppName-UNALIGNED.apk"
        variant.packageApplication.outputFile = new File(apkDirectory, name);
    }    
}