在Gradle 4.1中更改apk输出文件夹

Kin*_*uoc 16 android gradle android-build build.gradle android-gradle-plugin

我想改变APK output folder,这就是我以前做的事情:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它无效Gradle 4.1(Android studio 3.0预览版).它不是像上面的路径一样生成文件夹,而是在旧debug文件夹中生成上面的路径,如下图所示:

在此输入图像描述

有人有解决方案吗?谢谢.

小智 21

这是一种解决方法,可在升级到gradle 4.x后保持输出路径相同.

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}
Run Code Online (Sandbox Code Playgroud)

现在apk是在platforms/android/build/outputs/apk/android-release.apk生成的


azi*_*ian 17

迁移指南:

使用Variant API来操作变量输出会被新插件破坏.它仍然适用于简单的任务,例如在构建时更改APK名称,如下所示:


    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }

但是,涉及访问outputFile对象的更复杂的任务不再起作用.这是因为在配置阶段不再创建特定于变体的任务.这导致插件不能预先知道所有输出,但也意味着更快的配置时间.


Mar*_*uez 10

我有一个类似的问题,因为我需要输出apk在已知的文件夹而不是在文件夹中,具体取决于计算机用户名.所以我修好了这样的话:

applicationVariants.all { variant ->
    variant.outputs.all {
        def apk = output.outputFile;
        def newName = apk.name.replace(".apk", "-v" + variant.versionName + "-RELEASE.apk");
        newName = newName.replace("-" + variant.buildType.name, "");

        outputFileName = "./" + newName
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了apk:".../outputs/apk/flavorName/buildTypeName/xxx.apk"

希望它能帮到你.