如何在Gradle输出迭代器中获取ABI名称

时间:2016-09-02 11:45:35

标签: android gradle

我使用当前应用版本和品味名称撰写.apk文件名。我还想添加当前的ABI拆分名称,但前提是它只是一个通用的apk。

我的相关build.gradle部分:

buildTypes {
    release {
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def flavor = ....  // some code to parse flavor & determine an appropriate string from it
                output.outputFile = new File(output.outputFile.parent, "app_" + flavor + "_0" + variant.versionCode + ".apk")
            }
        }
    }
}
productFlavors {
    deploy {
        splits {
            abi {
                enable true
                reset()
                include 'armeabi-v7a' //select ABIs to build APKs for
                universalApk true //generate an additional APK that contains all the ABIs
            }
        }
    }
}

目前这个配置会生成两个.apks,但它们都有相同的文件名,因为我不知道如何获取ABI名称,因此稍后生成的文件会覆盖之前生成的名称。

那么,当前ABI拆分的等效variant.productFlavors.get(0)是什么?

2 个答案:

答案 0 :(得分:6)

这很奇怪,因为flavor和ABI-name会自动添加到构建名称中(如果你进行相应的汇编)

您可以尝试完全删除自定义命名

 applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def flavor = ....  // some code to parse flavor & determine an appropriate string from it
                output.outputFile = new File(output.outputFile.parent, "app_" + flavor + "_0" + variant.versionCode + ".apk")
            }
        }

而不是尝试添加到defaultConfig这一行

 archivesBaseName = "app_${versionCode}"

如果这不能解决您的问题,您可以尝试从输出中获取abi

output.getFilter(com.android.build.OutputFile.ABI)

答案 1 :(得分:0)

等效为output.getFilter(com.android.build.OutputFile.ABI)

请注意,从Android Studio 3.0开始,应改为使用outputFileNamevariant.outputs.all

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = "app_" + output.getFilter(com.android.build.OutputFile.ABI) + "_0" + variant.versionCode + ".apk"
    }
}