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

vel*_*lis 2 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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")
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

 archivesBaseName = "app_${versionCode}"
Run Code Online (Sandbox Code Playgroud)

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

output.getFilter(com.android.build.OutputFile.ABI)
Run Code Online (Sandbox Code Playgroud)