วิธีการตั้งค่า versionName ในชื่อไฟล์ APK โดยใช้ gradle


169

ฉันกำลังพยายามตั้งค่าหมายเลขรุ่นเฉพาะในชื่อไฟล์ APK ที่สร้างโดยอัตโนมัติแบบ gradle

ตอนนี้ gradle สร้างแต่ผมต้องการให้มีลักษณะบางอย่างเช่นmyapp-release.apkmyapp-release-1.0.apk

ฉันได้ลองเปลี่ยนชื่อตัวเลือกที่ดูยุ่ง ๆ มีวิธีง่าย ๆ ในการทำเช่นนี้?

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    defaultConfig.versionName + ".apk"))
    }
}

ฉันลองใช้รหัสด้านบนโดยไม่มีโชค ข้อเสนอแนะใด ๆ (ใช้ gradle 1.6)

คำตอบ:


225

ฉันต้องเปลี่ยนชื่อรุ่นในที่เดียวเท่านั้น รหัสก็ง่ายเช่นกัน

ตัวอย่างด้านล่างจะสร้างไฟล์ apk ชื่อMyCompany-MyAppName-1.4.8-debug.apkหรือ MyCompany-MyAppName-1.4.8-release.apkทั้งนี้ขึ้นอยู่กับรุ่นบิลด์ที่เลือก

โปรดทราบว่าโซลูชันนี้ใช้งานได้ทั้ง APK และแอปรวมกลุ่ม (ไฟล์ . aab)

ดูเพิ่มเติม: วิธีเปลี่ยนชื่อไฟล์การแม็พ proguard ใน gradle สำหรับโครงการ Android

โซลูชันสำหรับปลั๊กอิน Gradle ล่าสุด

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.company.app"
        minSdkVersion 13
        targetSdkVersion 21
        versionCode 14       // increment with every release
        versionName '1.4.8'   // change with every release
        setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")
    }
}

โซลูชันด้านบนได้รับการทดสอบด้วยเวอร์ชั่น Android Gradle Plugin ต่อไปนี้

  • 3.5.2 (พฤศจิกายน 2019)
  • 3.3.0 (มกราคม 2562)
  • 3.1.0 (มีนาคม 2561)
  • 3.0.1 (พฤศจิกายน 2017)
  • 3.0.0 (ตุลาคม 2017)
  • 2.3.2 (พฤษภาคม 2560)
  • 2.3.1 (เมษายน 2017)
  • 2.3.0 (กุมภาพันธ์ 2017)
  • 2.2.3 (ธันวาคม 2559)
  • 2.2.2
  • 2.2.0 (กันยายน 2559)
  • 2.1.3 (สิงหาคม 2559)
  • 2.1.2
  • 2.0.0 (เมษายน 2559)
  • 1.5.0 (2015/11/12)
  • 1.4.0-beta6 (2015/10/05)
  • 1.3.1 (2015/08/11)

ฉันจะอัปเดตโพสต์นี้เมื่อมีเวอร์ชันใหม่ออกมา

โซลูชันทดสอบเฉพาะในเวอร์ชัน 1.1.3-1.3.0

โซลูชันต่อไปนี้ผ่านการทดสอบด้วยเวอร์ชั่น Android Gradle Plugin ต่อไปนี้:

แอปไฟล์ gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.company.app"
        minSdkVersion 13
        targetSdkVersion 21
        versionCode 14       // increment with every release
        versionName '1.4.8'   // change with every release
        archivesBaseName = "MyCompany-MyAppName-$versionName"
    }
}

11
ฉันคิดว่านี่เป็นวิธีการที่เหมาะสมแทนที่จะเขียนภารกิจอื่นเพื่อเปลี่ยนชื่อไฟล์
Nandish

5
เพียงแค่เปลี่ยนเป็น archivesBaseName = "MyCompany-MyAppName- $ versionName" ถ้าคุณมี OCD และไม่ต้องการให้ AS เตือนคุณเกี่ยวกับ +
ligi

4
การค้นหายอดเยี่ยม แต่ไม่สามารถใช้งานได้ดีกับรสชาติที่มีรหัสเวอร์ชันต่างกัน พวกเขาทั้งหมดจบลงด้วยรหัสรุ่นเดียวกัน
weston

2
มีวิธีการเพิ่มvariant.buildType.nameชื่อหรือไม่? ฉันรู้ว่านี่ไม่ใช่การกำหนดค่าเริ่มต้นที่เกี่ยวข้อง แต่ฉันพยายามหาวิธีลบvariantOutput.getAssemble()คำเตือนที่ล้าสมัย
Allan W

2
เป็นไปได้ไหมที่จะลบออกจากชื่อ apk ล่าสุด '-debug' / '-release'?
ilyamuromets

173

วิธีนี้แก้ไขปัญหาของฉัน: ใช้applicationVariants.allแทนapplicationVariants.each

buildTypes {
      release {
        signingConfig signingConfigs.release
        applicationVariants.all { variant ->
            def file = variant.outputFile
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) 
        }
    }       
}

ปรับปรุง:

ดังนั้นดูเหมือนว่าสิ่งนี้จะไม่สามารถใช้งานได้กับปลั๊กอิน android studio gradle รุ่น 0.14+

นี่เป็นการหลอกลวง (อ้างอิงจากคำถามนี้ ):

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
}

3
คุณรู้วิธีทำให้มันใช้งานได้หรือไม่ถ้าฉันมีการversionNameกำหนดไว้ในAndroidManifest.xmlแทนการตั้งค่า gradle? มันทำให้ฉันmyapp-release-null.apkตอนนี้
Iwo Banas

1
คำตอบนี้ไม่สามารถใช้ได้กับปลั๊กอิน gradle เวอร์ชั่น 0.14+ การอัปเดตใด ๆ ที่จะทำงานกับสิ่งเหล่านั้น
Argyle

1
@withoutclass ฉันถามคำถามนี้เพราะมันเป็นคำถามของตัวเองและได้รับคำตอบที่นี่: stackoverflow.com/questions/27068505/…
Argyle

2
สำหรับคนที่จะอัปเดต Gradle ที่ 4: การเปลี่ยนแปลงeachไปallและการoutput.outputFile outputFileNameถ้าใคร confims งานนี้ก็สามารถที่จะแก้ไขลงในคำตอบ :)
PHPirate

6
@PHPirate: เกือบจะได้ผล:Error:(34, 0) Cannot set the value of read-only property 'name'
Mooing Duck

47

(แก้ไขให้ทำงานกับ Android Studio 3.0 และ Gradle 4)

ฉันกำลังมองหาตัวเลือกการเปลี่ยนชื่อไฟล์ apk ที่ซับซ้อนยิ่งขึ้นและฉันเขียนชื่อนี้โดยหวังว่าจะเป็นประโยชน์สำหรับคนอื่น ๆ มันเปลี่ยนชื่อ apk ด้วยข้อมูลต่อไปนี้:

  • รส
  • ประเภทการสร้าง
  • รุ่น
  • วันที่

ฉันใช้เวลาค้นคว้าเล็กน้อยในชั้นเรียนระดับบัณฑิตศึกษาและคัดลอก / วางเล็กน้อยจากคำตอบอื่น ผมใช้3.1.3 gradle

ใน build.gradle:

android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
        debug {
            minifyEnabled false
        }
    }

    productFlavors {
        prod {
            applicationId "com.feraguiba.myproject"
            versionCode 3
            versionName "1.2.0"
        }
        dev {
            applicationId "com.feraguiba.myproject.dev"
            versionCode 15
            versionName "1.3.6"
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def project = "myProject"
            def SEP = "_"
            def flavor = variant.productFlavors[0].name
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def version = variant.versionName
            def date = new Date();
            def formattedDate = date.format('ddMMyy_HHmm')

            def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"

            outputFileName = new File(newApkName)
        }
    }
}

ถ้าคุณรวบรวมวันนี้ (13-10-2016) เวลา 10:47 คุณจะได้รับชื่อไฟล์ต่อไปนี้ขึ้นอยู่กับรสชาติและประเภทบิลด์ที่คุณเลือก:

  • dev debug : myProject_ dev_debug_1.3.6 _131016_1047.apk
  • dev เผยแพร่ : myProject_ dev_release_1.3.6 _131016_1047.apk
  • debug : myProject_ prod_debug_1.2.0 _131016_1047.apk
  • การเปิดตัวผลิตภัณฑ์ : myProject_ prod_release_1.2.0 _131016_1047.apk

หมายเหตุ: ชื่อ apk เวอร์ชันที่ไม่ได้จัดแนวยังคงเป็นชื่อเริ่มต้น


ทางออกที่ดี ฉันลองแล้วมันเหมาะสำหรับปัญหาของฉัน ขอบคุณ!
Pabel

เป็นไปได้ไหมที่จะใช้วิธีการเดียวกันใน Xamarin Studio
Alessandro Caliaro

คงจะดีถ้าเป็นไปได้ แต่ตอนนี้ฉันเริ่มเรียนหลักสูตร Xamarin แล้วและฉันยังไม่ได้ฝึกฝนมากพอที่จะรู้ว่ามันเป็นไปได้หรือไม่ ฉันจะถามคำถามนี้และมาที่นี่อีกครั้ง
Fer

ความคิดเห็นจากอาจารย์ของหลักสูตร: "มีตัวเลือกที่คุณสามารถใช้คำสั่งเพื่อเปลี่ยนชื่อของไฟล์ที่สร้าง" ดังนั้นวิธีการใช้งานจาก Xamarin ต้องแตกต่างจากที่ฉันเขียนไว้สำหรับ Android Studio ขออภัย
Fer

3
เพื่อแก้ไขข้อผิดพลาดไม่สามารถกำหนดมูลค่าของทรัพย์สินที่อ่านอย่างเดียว 'outputfile ฯ - ตามที่กล่าวไว้ในความคิดเห็นก่อนหน้านี้มีการ"เปลี่ยนeachไปallและoutput.outputFileไปoutputFileName" - โพสต์นี้ให้รายละเอียดบางอย่างเกี่ยวกับว่าstackoverflow.com/a/44265374/2162226
Gene Bo

19

เพื่อสรุปสำหรับผู้ที่ไม่ทราบวิธีการที่จะนำเข้าแพคเกจในbuild.gradle(เช่นฉัน) ให้ใช้ต่อไปbuildTypes,

buildTypes {
      release {
        signingConfig signingConfigs.release
        applicationVariants.all { variant ->
            def file = variant.outputFile
            def manifestParser = new com.android.builder.core.DefaultManifestParser()
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) + ".apk")) 
        }
    }       
}

===== แก้ไข =====

หากคุณตั้งค่าversionCodeและversionNameในbuild.gradleไฟล์ของคุณเช่นนี้:

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 19
    versionCode 1
    versionName "1.0.0"
}

คุณควรตั้งค่าดังนี้:

buildTypes {   
        release {
            signingConfig signingConfigs.releaseConfig
            applicationVariants.all { variant ->
                def file = variant.outputFile
                variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
            }
        }
}


====== แก้ไขด้วย Android Studio 1.0 ======

หากคุณใช้ Android Studio 1.0 คุณจะได้รับข้อผิดพลาดดังนี้:

Error:(78, 0) Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@67e7625f.

คุณควรเปลี่ยนbuild.Typesส่วนนี้:

buildTypes {
        release {
            signingConfig signingConfigs.releaseConfig
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
                }
            }
        }
    }

มันใช้งานได้ดี อย่างไรก็ตามเนื่องจากฉันเพิ่มเวอร์ชันรายการของฉันในโครงสร้างการไล่ระดับสีมันจะสร้าง APK ที่มีค่าเก่ากว่า (เพิ่มล่วงหน้า) มีวิธีใดที่จะทำให้แน่ใจว่าสิ่งนี้จะมีผลหลังจากที่สคริปต์การไล่ระดับสีเพิ่มหมายเลขเวอร์ชัน?
Guy

1
@ ซื้อขออภัยใช้เวลานานมาก ฉันแก้ไขคำตอบแล้วดูว่ามันสามารถแก้ปัญหาของคุณได้ไหม
Wesley

17

หากคุณไม่ได้ระบุ versionName ใน defaultConfig block defaultConfig.versionNameจะส่งผลให้null

เพื่อรับ versionName จากรายการคุณสามารถเขียนรหัสต่อไปนี้ใน build.gradle:

import com.android.builder.DefaultManifestParser

def manifestParser = new DefaultManifestParser()
println manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)

7
ฉันเชื่อว่าด้วย gradle รุ่นที่ใหม่กว่าตอนนี้มันเป็น com.android.builder.core.DefaultManifestParser
Ryan S

8

ในกรณีของฉันฉันแค่ต้องการหาวิธีสร้างapkชื่อreleaseและdebugตัวแปรที่ต่างกันโดยอัตโนมัติ ฉันจัดการให้ทำได้ง่าย ๆ โดยวางข้อมูลโค้ดนี้เป็นลูกของandroid:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        output.outputFile = new File(output.outputFile.parent, newName)
    }
}

สำหรับ Android gradle plugin 3.0.0 ใหม่คุณสามารถทำสิ่งนี้ได้:

 applicationVariants.all { variant ->
    variant.outputs.all {
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        outputFileName = newName
    }
}

สิ่งนี้ผลิตสิ่งที่ชอบ: My_nice_name_3.2.31_dbg.apk


6

อีกทางเลือกหนึ่งคือการใช้สิ่งต่อไปนี้:

String APK_NAME = "appname"
int VERSION_CODE = 1
String VERSION_NAME = "1.0.0"

project.archivesBaseName = APK_NAME + "-" + VERSION_NAME;

    android {
      compileSdkVersion 21
      buildToolsVersion "21.1.1"

      defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode VERSION_CODE
        versionName VERSION_NAME
      }

       .... // Rest of your config
}

สิ่งนี้จะตั้งค่า "appname-1.0.0" เป็นเอาท์พุต apk ทั้งหมดของคุณ


ขออภัยไม่ทำงาน (อีกต่อไป): No such property: archivesBaseName for class: org.gradle.api.internal.project.DefaultProject_Decorated
Martin

คุณกำลังใช้เวอร์ชัน gradle อะไร
Marco RS

6

Gradle 6+

ตอนนี้ฉันใช้สิ่งต่อไปนี้ใน Android Studio 4.0 และ Gradle 6.4:

android {
    defaultConfig {
        applicationId "com.mycompany.myapplication"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 15
        versionName "2.1.1"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "ApplicationName-${variant.name}-${variant.versionName}.apk"
                }
            }
        }
    }
}

เกรด 4

ไวยากรณ์มีการเปลี่ยนแปลงเล็กน้อยใน Gradle 4 (Android Studio 3+) (จากoutput.outputFileเป็นoutputFileNameแนวคิดจากคำตอบนี้คือตอนนี้:

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def newName = outputFileName
            newName.replace(".apk", "-${variant.versionName}.apk")
            outputFileName = new File(newName)
        }
    }
}

ความคิดวิธีการแก้ไขปัญหานี้สำหรับ gradle 6?
spartygw

@spartygw อัปเดตคำตอบ
PHPirate

5

วิธีที่เหมาะสมในการเปลี่ยนชื่อ apk ตาม@Jon answer

defaultConfig {
        applicationId "com.irisvision.patientapp"
        minSdkVersion 24
        targetSdkVersion 22
        versionCode 2  // increment with every release
        versionName "0.2" // change with every release
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //add this line
        archivesBaseName = "AppName-${versionName}-${new Date().format('yyMMdd')}"
    }   

หรืออีกวิธีหนึ่งที่คุณจะได้ผลลัพธ์เช่นเดียวกันกับ

android {
    ...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def formattedDate = new Date().format('yyMMdd')
            outputFileName = "${outputFileName.replace(".apk","")}-v${defaultConfig.versionCode}-${formattedDate}.apk"
        }
    }
}

เป็นคนที่ดีในเรื่องนี้! ฉันชอบสิ่งนี้ดีกว่าและวิธีอื่น ๆ ที่ฉันทำอยู่ในปัจจุบัน
Droid Chris

3

มีคำตอบมากมายที่ถูกต้องทั้งแบบเต็มหรือหลังจากการดัดแปลงบางอย่าง แต่ฉันจะเพิ่มของฉันต่อไปตั้งแต่ฉันมีปัญหากับพวกเขาทั้งหมดเพราะฉันใช้สคริปต์เพื่อสร้าง VersionName และ VersionCode แบบไดนามิกโดยเบ็ดเข้ากับpreBuildงาน

หากคุณใช้วิธีการที่คล้ายกันนี่คือรหัสที่ใช้งานได้:

project.android.applicationVariants.all { variant ->
    variant.preBuild.doLast {
    variant.outputs.each { output ->
        output.outputFile = new File(
                output.outputFile.parent,
                output.outputFile.name.replace(".apk", "-${variant.versionName}@${variant.versionCode}.apk"))
        }
    }
}

เพื่ออธิบาย: เนื่องจากฉันลบล้างรหัสเวอร์ชั่นและชื่อในการดำเนินการครั้งแรกของ preBuildฉันต้องเพิ่มการเปลี่ยนชื่อไฟล์ในตอนท้ายของงานนี้ ดังนั้นสิ่งที่ gradle จะทำในกรณีนี้คือ:

ใส่รหัสเวอร์ชั่น / ชื่อ -> ทำการกระทำ preBuild -> แทนที่ชื่อสำหรับ apk


คุณตั้งค่าตัวแปร versionCode และ versionName ที่สร้างไว้ที่ไหน
ดาวอังคาร

อย่างที่ฉันจำได้ว่าทำในปลั๊กอินการไล่ระดับสีที่กำหนดเองของเรา การดำเนินการของมันถูกเรียกว่าเป็นการกระทำสุดท้ายของงาน preBuild
Igor Čordaš

2
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.outputFileName = output.outputFileName.replace(".apk", "-${variant.versionName}.apk")
        }
    }

ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
Rosário Pereira Fernandes

1

ในกรณีของฉันฉันแก้ไขข้อผิดพลาดด้วยวิธีนี้

เพิ่ม SUFFIX ให้กับเวอร์ชัน Debug ในกรณีนี้ฉันเพิ่มข้อความ "-DEBUG" ในการปรับใช้ Debug ของฉัน

 buildTypes {
        release {

            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


        }
        debug {

            defaultConfig {
                debuggable true

                versionNameSuffix "-DEBUG"
            }
        }
    }

สิ่งนี้จะไม่เปลี่ยนชื่อไฟล์ APK
Tom

1
นี่เป็นเคล็ดลับที่ดีจริงๆ ไม่ใช่คำถามที่ถูกต้อง แต่เป็นคำถามที่ดี ฉันจะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่ไหน เป็นไปได้หรือไม่ที่จะใช้งานversionNameSuffixตามสาขา GIT ตัวอย่างเช่นถ้ามันไม่ได้อยู่ใน "ต้นแบบ" มักจะมีคำต่อท้ายแม้ว่ามันจะเป็นรุ่นวางจำหน่าย
นักพัฒนา Android

0

สำหรับรุ่น gradle ล่าสุดคุณสามารถใช้ตัวอย่างต่อไปนี้:

ตั้งค่าตำแหน่งรายการแอปพลิเคชันของคุณก่อน

 sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
        {
    }

และในภายหลังใน build.gradle

import com.android.builder.core.DefaultManifestParser

def getVersionName(manifestFile) {
    def manifestParser = new DefaultManifestParser();
    return manifestParser.getVersionName(manifestFile);
}

def manifestFile = file(android.sourceSets.main.manifest.srcFile);
def version = getVersionName(manifestFile)

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    versionName + ".apk"))
    }
}

ปรับถ้าคุณมีรายการที่แตกต่างกันตามประเภทบิลด์ แต่เนื่องจากฉันมีซิงเกิ้ล - ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน


เป็นไปได้หรือไม่ที่จะเพิ่มสตริงจากไฟล์คลาสเป็นชื่อ apk?
Upendra Shah

0

ในฐานะของ Android 1.1.0 สตูดิโอผมพบว่าชุดนี้ทำงานอยู่ในหุ่นยนต์ร่างกายของbuild.gradleไฟล์ นี่คือถ้าคุณไม่สามารถหาวิธีนำเข้าข้อมูลไฟล์ xml ที่แสดงได้ ฉันหวังว่า Android Studio จะได้รับการสนับสนุนมากขึ้น แต่เพียงแค่เล่นค่าต่างๆจนกว่าคุณจะได้รับชื่อ apk ที่ต้องการ:

defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 6
        versionName "2"
    }
    signingConfigs {
        release {
            keyAlias = "your key name"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.release
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "appName_" + versionName + ".apk"))
                }
            }
        }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.