APKの名前私のAndroidアプリケーション内のbuild.gradle
スクリプトは次のとおりです。
Android {
defaultConfig {
project.ext.set("archivesBaseName", "MyApplication");
}
}
製品フレーバーを使用しています。
Android {
productFlavors {
green {
applicationId "com.example.myapplication.green"
}
blue {
applicationId "com.example.myapplication.blue"
}
}
}
各APKの名前をカスタマイズする方法はありますか? archiveBaseName
とbaseName
を試してみましたが成功しませんでした。最後に、次のファイルを作成します。
build/outputs/apk/Blue-debug-1.2.1.apk
build/outputs/apk/Blue-debug-unaligned.apk
build/outputs/apk/Blue-release-1.2.1.apk
build/outputs/apk/Blue-release-unaligned.apk
build/outputs/apk/Green-debug-1.2.1.apk
build/outputs/apk/Green-debug-unaligned.apk
build/outputs/apk/Green-release-1.2.1.apk
build/outputs/apk/Green-release-unaligned.apk
これをAndroid build.gradleのクロージャに入れてみてください
buildTypes {
debug {
// debug buildType specific stuff
}
release {
// release buildType specific stuff
}
applicationVariants.all { variant ->
if (variant.buildType.name.equals("release") &&
variant.productFlavors[0].name.equals("green") &&
variant.zipAlign) {
def apk = variant.outputFile;
variant.outputFile = new File(apk.parentFile, "green.apk");
} else if(variant.buildType.name.equals("release") &&
variant.productFlavors[0].name.equals("blue") &&
variant.zipAlign) {
def apk = variant.outputFile;
variant.outputFile = new File(apk.parentFile, "blue.apk");
}
}
}
これで、出力はgreen.apk
およびblue.apk
のようになります。
Android Gradle Plugin 0.13。+の場合、次のようなものを使用する必要があります。
Android{
buildTypes {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def apk = output.outputFile;
def newName = "mysms-" + variant.baseName.replace("-release", "") + "-" + defaultConfig.versionName + ".apk";
output.outputFile = new File(apk.parentFile, newName);
}
}
}
}
Android Studio 3.0の場合、以下から変更する必要があります。
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, "whatever" + ".apk")
}
}
に:
Android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "whatever" + ".apk")
}
}
私はこのようにしました:
productFlavors {
production {
applicationId "com.example.production"
}
staging {
applicationId "com.example.production.staging"
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
if(variant.productFlavors[0].name.equals("staging")){
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("app-staging-release", "test"));
}else{
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("app-production-release", "production"));
}
}
}
}
デフォルトではapkファイル名がすでに異なっているため、これが必要になるのは奇妙です。
here を1346行目で見ると、variantData.variantConfiguration.baseNameがoutputFileで使用されていることがわかります。
variantData.outputFile = project.file("$project.buildDir/apk/${project.archivesBaseName}-${variantData.variantConfiguration.baseName}.apk")
baseName
のドキュメントは
/**
* Full, unique name of the variant, including BuildType, flavors and test, dash separated.
* (similar to full name but with dashes)
*/
private String mBaseName;
したがって、gradle assembleFreeDebug
はProjectName-free-debug.apk
ファイル。
ただし、そうでない場合、または別のファイル名が必要な場合は、次のコードを使用してカスタマイズできます。
Android {
buildTypes {
debug {}
alpha {}
release {}
}
productFlavors {
free{}
paid{}
}
applicationVariants.all { variant ->
def newApkName = variant.name + "my-custom-addition" + ".apk";
variant.outputFile = new File("${project.buildDir}/outputs/apk/", newApkName);
}
}
私のためのこの仕事:
variant.productFlavors[0].name
のAPK名。
コード例:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, "APPNAME_" + variant.productFlavors[0].name + "_" + variant.versionName + ".apk")
}
}
}
}
これが上記のラクシュマンの答えの変種(heh)です。なぜ "variants.outputs.each"が必要なのかわかりませんが、私はそうしました。
defaultConfig {
applicationId "my.company.com"
minSdkVersion 16
targetSdkVersion 25
applicationVariants.all { variant ->
if (variant.productFlavors[0].name.equals("VariantA")) {
variant.outputs.each { output ->
def apk = output.outputFile;
output.outputFile = new File(apk.parentFile, "Blue.apk");
}
} else { // Only two variants
variant.outputs.each { output ->
def apk = output.outputFile;
output.outputFile = new File(apk.parentFile, "Green.apk");
}
}
}
}
Android Gradle Plugin 0.13.0は、以下で使用されるoutputFileを廃止しました。
applicationVariants.all { variant ->
def newApkName = variant.name + "my-custom-addition" + ".apk";
variant.outputFile = new File("${project.buildDir}/outputs/apk/", newApkName);
}
私のために働いている解決策は次のとおりです。
Android {
...
}
project.archivesBaseName = "AndroidAppGeneric-${_buildVersionNameForMaven}"
ファイルが互いに上書きされないように、次を使用しています。
applicationVariants.all { variant ->
variant.outputs.each { output ->
def newApkName = variant.name + "-" + variant.versionName + "(" + variant.versionCode +")" + ".apk";
output.outputFile = new File("${project.projectDir}/outputs/apk/" + variant.name, newApkName);
}
}