वर्जननाम में एपीके नाम कैसे सेट करें?


169

मैं ऑटो-जेनरेट किए गए एपीके फ़ाइलनाम में एक विशिष्ट संस्करण संख्या सेट करने का प्रयास कर रहा हूं।

अब ग्रेडल जेनरेट करता है myapp-release.apkलेकिन मैं चाहता हूं कि यह कुछ ऐसा दिखे myapp-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"))
    }
}

मैंने बिना किसी भाग्य के ऊपर दिए कोड की कोशिश की है। कोई सुझाव? (ग्रेडेल 1.6 का उपयोग करके)

जवाबों:


225

मुझे केवल एक स्थान पर संस्करण का नाम बदलना होगा। कोड भी सरल है।

नीचे दिए गए उदाहरण MyCompany-MyAppName-1.4.8-debug.apk या MyCompany-MyAppName-1.4.8-release.apk नाम की एपीके फाइल्स बनाएंगे, जो चुने गए बिल्ड वेरिएंट के आधार पर होंगे।

ध्यान दें कि यह समाधान एपीके और ऐप बंडलों (.abab फ़ाइलों) दोनों पर काम करता है

यह भी देखें: एंड्रॉइड प्रोजेक्ट के लिए ग्रेड में प्रोगार्ड मैपिंग फ़ाइल का नाम कैसे बदलें

हाल ही में ग्रेडल प्लगिन के लिए समाधान

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")
    }
}

उपरोक्त समाधान का परीक्षण निम्न एंड्रॉइड ग्रैगल प्लगिन संस्करणों के साथ किया गया है:

  • 3.5.2 (नवंबर 2019)
  • 3.3.0 (जनवरी 2019)
  • 3.1.0 (मार्च 2018)
  • 3.0.1 (नवंबर 2017)
  • 3.0.0 (अक्टूबर 2017)
  • 2.3.2 (मई 2017)
  • 2.3.1 (अप्रैल 2017)
  • 2.3.0 (फरवरी 2017)
  • २.२.३ (दिसंबर २०१६)
  • 2.2.2
  • २.२.० (सितंबर २०१६)
  • 2.1.3 (अगस्त 2016)
  • 2.1.2
  • 2.0.0 (अप्रैल 2016)
  • 1.5.0 (2015/11/12)
  • 1.4.0-बीटा 6 (2015/10/05)
  • 1.3.1 (2015/08/11)

नए संस्करण सामने आते ही मैं इस पोस्ट को अपडेट करूंगा।

समाधान केवल 1.1.3-1.3.0 संस्करणों पर परीक्षण किया गया

निम्नलिखित समाधान का परीक्षण निम्न एंड्रॉइड ग्रैगल प्लगिन संस्करणों के साथ किया गया है:

एप्लिकेशन श्रेणी फ़ाइल:

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
मुझे लगता है कि फ़ाइलों का नाम बदलने के लिए एक और कार्य लिखने के बजाय यह सही दृष्टिकोण है।
नंदीश एक

5
अगर आपका OCD है और आप चाहते हैं कि AS + के बारे में आपको चेतावनी न दें तो आप "+
Ligi

4
शानदार खोज, लेकिन विभिन्न संस्करण कोड के साथ जायके के साथ अच्छी तरह से काम नहीं करता है। वे सभी एक ही संस्करण कोड के साथ समाप्त होते हैं।
पश्चिम की ओर

2
क्या variant.buildType.nameनाम जोड़ने का कोई तरीका है ? मुझे पता है कि यह वास्तव में डिफ़ॉल्ट से संबंधित नहीं है, लेकिन मैं यह जानने की कोशिश कर रहा हूं कि अप्रचलित variantOutput.getAssemble()चेतावनी को कैसे हटाया जाए
एलन डब्ल्यू

2
क्या अंतिम नाम '-debug' / '-release' से हटाना संभव है?
इलियुरामेट्स

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")) 
        }
    }       
}

अपडेट करें:

तो ऐसा लगता है कि यह एंड्रॉइड स्टूडियो ग्रेडल प्लगइन के 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? यह myapp-release-null.apkअब मुझे देता है ।
Iwo Banas

1
यह जवाब ०.१४+ वर्जन ग्रेडेल प्लगइन के साथ काम नहीं करता है। उन लोगों के साथ काम करने के लिए कोई अपडेट?
Argyle

1
@withoutclass मैंने इसे खुद से सवाल के रूप में पूछा और इसका जवाब यहाँ दिया गया: stackoverflow.com/questions/27068505/…
Argyle

2
परिवर्तन: लोगों के लिए Gradle से 4 को अद्यतन करने eachके लिए allऔर output.outputFileकरने के लिए outputFileName। यदि कोई इसे स्वीकार करता है, तो इसे उत्तर में संपादित किया जा सकता है :)
PHPirate

6
@PHPirate: लगभग काम करता है:Error:(34, 0) Cannot set the value of read-only property 'name'
Mooing Duck

47

(एंड्रॉइड स्टूडियो 3.0 और ग्रैडल 4 के साथ काम करने के लिए)

मैं एक और अधिक जटिल apk फ़ाइल नाम बदलने के विकल्प की तलाश में था और मैंने इसे एक उम्मीद में लिखा था कि यह किसी और के लिए उपयोगी है। यह निम्नलिखित डेटा के साथ APK का नाम बदल देता है:

  • स्वाद
  • निर्माण प्रकार
  • संस्करण
  • तारीख

इसने मुझे वर्गीकृत कक्षाओं में थोड़ा अनुसंधान और अन्य उत्तरों से कॉपी / पेस्ट का एक सा लिया। मैं ३.१.३ का उपयोग कर रहा हूँ ।

बिल्ड.ग्रेड में:

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 पर संकलित करते हैं, तो आपको स्वाद के आधार पर निम्नलिखित फ़ाइल नाम मिलते हैं और आप जिस प्रकार का चयन करते हैं उसका निर्माण करते हैं:

  • देव डीबग : myProject_ dev_debug_1.3.6 _131016_1047.apk
  • देव रिलीज़ : myProject_ dev_release_1.3.6 _131016_1047.apk
  • ठेस डिबग : myProject_ prod_debug_1.2.0 _131016_1047.apk
  • ठेस रिलीज : myProject_ prod_release_1.2.0 _131016_1047.apk

नोट: अन-असाइन किए गए संस्करण APK नाम अभी भी डिफ़ॉल्ट है।


महान समाधान। मैंने इसकी कोशिश की, और यह मेरी समस्या के लिए एकदम सही है। धन्यवाद!
पाबेल

क्या Xamarin Studio में समान दृष्टिकोण का उपयोग करना संभव है?
एलेसेंड्रो कैलियारो

यह बहुत अच्छा होगा यदि यह संभव था, लेकिन मैं अभी एक ज़ामरीन पाठ्यक्रम शुरू कर रहा हूं और मैं अभी भी इसके साथ पर्याप्त अभ्यास नहीं कर पाया हूं कि यह संभव है या नहीं। मैं यह सवाल पूछूंगा और फिर यहां आऊंगा।
फेर

पाठ्यक्रम के शिक्षक से टिप्पणी करें: "एक विकल्प है जहां आप उत्पन्न फ़ाइलों के नाम को बदलने के लिए आदेशों का उपयोग कर सकते हैं"। इसलिए, एक्समरीन से उपयोग करने का दृष्टिकोण एंड्रॉइड स्टूडियो के लिए मेरे द्वारा लिखे गए, माफ करना अलग होना चाहिए।
फेर

3
त्रुटि को हल करने केवल पढ़ने के लिए संपत्ति 'outputfile' का मान सेट नहीं कर सकता - के रूप में करने के लिए पहले के एक टिप्पणी में आपका उल्लेख "परिवर्तन eachकरने के लिए allऔर output.outputFileकरने के लिए outputFileName" - इस पोस्ट कि कुछ विवरण प्रदान करता है: stackoverflow.com/a/44265374/2162226
जीन बो

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")) 
        }
    }       
}

===== EDIT =====

यदि आप अपनी 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 स्टूडियो 1.0 ==== के साथ EDIT

यदि आप एंड्रॉइड स्टूडियो 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"))
                }
            }
        }
    }

यह बहुत अच्छा काम करता है। हालाँकि, जब से मैं अपने मैनिफ़ेस्ट वर्जन को ग्रेडेल बिल्ड में बढ़ाता हूँ, यह पुराने (प्री-इन्क्रीमेंट) वैल्यू के साथ एपीके बना देगा। यह सुनिश्चित करने का कोई तरीका है कि संस्करण संख्या बढ़ने के बाद स्क्रिप्ट स्क्रिप्ट प्रभावित हो जाए?
लड़के

1
@ गुय सॉरी इतनी देर लगा दी। मैंने उत्तर को संपादित किया, देखें कि क्या यह आपकी समस्या को हल कर सकता है।
वेस्ले

17

यदि आप defaultNonfig ब्लॉक में versionName निर्दिष्ट नहीं करते हैं तो defaultConfig.versionNameपरिणाम होगाnull

वर्जननाम को प्राप्त करने के लिए, आप निम्नलिखित कोड बिल्ड में लिख सकते हैं। क्रम:

import com.android.builder.DefaultManifestParser

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

7
मुझे विश्वास है कि बाद के संस्करण के साथ, यह अब com.android.builder.core है ।efaultManifestParser
रयान एस

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)
    }
}

नए एंड्रॉइड ग्रेडल प्लगइन 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
}

यह आपके सभी APK आउटपुट के लिए "appname-1.0.0" सेट करेगा।


सॉरी काम नहीं करता है (अब नहीं): No such property: archivesBaseName for class: org.gradle.api.internal.project.DefaultProject_Decorated
मार्टिन

आप किस ग्रेड के संस्करण का उपयोग कर रहे हैं?
मार्को आरएस

6

गाद 6+

अब मैं एंड्रॉइड स्टूडियो 4.0 और ग्रेडल 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"
                }
            }
        }
    }
}

गाद ४

सिंटेक्स से Gradle 4 (एंड्रॉयड स्टूडियो 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)
        }
    }
}

किसी भी विचार कैसे 6 ग्रेडेल के लिए इसे ठीक करने के लिए?
स्पार्टीग्व

@spartygw उत्तर अपडेट करें
PHPirate

5

@Jon उत्तर के अनुसार, APK का नाम बदलने का सही तरीका

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

ऐसे कई उत्तर हैं जो पूर्ण रूप से या कुछ संशोधनों के बाद सही हैं। लेकिन मैं वैसे भी मुझे जोड़ने जा रहा हूं क्योंकि मुझे उन सभी के साथ समस्या हो रही थी क्योंकि मैं वर्जननेम और वर्जनकोड उत्पन्न करने के लिए स्क्रिप्ट का उपयोग गतिशील रूप से हुक करके कर रहा था।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इस कार्य के अंत में नाम बदलने वाली फ़ाइल को जोड़ना होगा। तो इस मामले में क्या करना होगा:

संस्करण कोड / नाम इंजेक्ट करें -> पूर्व-क्रिया करें -> APK के लिए नाम बदलें


आप जेनरेट किए गए वर्जनकोड और वर्जननाम वेरिएबल्स कहां स्थापित कर रहे हैं?
मंगल 10

जैसा कि मुझे याद है कि हमारे कस्टम ग्रेड प्लग इन के अंदर किया गया था। इसके निष्पादन को पूर्व-कार्य के अंतिम कार्य के रूप में कहा जाता था।
इगोर 15ordaš

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

हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
रोजारियो परेरा फर्नांडिस

1

मेरे मामले में मैं इस तरह से इस त्रुटि को हल करता हूं

डीबग संस्करण में एक SUFFIX जोड़ते हुए, इस मामले में मैं अपने डिबग परिनियोजन में "-DEBUG" पाठ जोड़ रहा हूं

 buildTypes {
        release {

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


        }
        debug {

            defaultConfig {
                debuggable true

                versionNameSuffix "-DEBUG"
            }
        }
    }

यह एपीके फ़ाइल नाम नहीं बदलता है।
टॉम

1
यह वास्तव में एक अच्छा टिप है। सही सवाल में नहीं, लेकिन अच्छा है। मैं इसके बारे में और कहाँ पढ़ सकता हूँ? क्या versionNameSuffixजीआईटी शाखा के आधार पर इसका उपयोग करना संभव है ? उदाहरण के लिए, यदि यह "मास्टर" पर नहीं है, तो हमेशा एक प्रत्यय होता है, भले ही यह एक रिलीज़ संस्करण हो
एंड्रॉइड डेवलपर

0

नवीनतम सरलतम संस्करणों के लिए आप निम्नलिखित स्निपेट का उपयोग कर सकते हैं:

पहले अपना एप्लिकेशन मैनिफ़ेस्ट लोकेशन सेट करें

 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"))
    }
}

समायोजित करें यदि आपके पास प्रति निर्माण प्रकार के विभिन्न मैनिफ़ेस्ट हैं। लेकिन जब से मेरे पास एक है - मेरे लिए पूरी तरह से काम करता है।


क्या एक वर्ग फ़ाइल से एपीके नाम में स्ट्रिंग जोड़ना संभव है ??
उपेंद्र शाह

0

एंड्रॉइड स्टूडियो 1.1.0 के रूप में, मैंने पाया कि यह संयोजन फ़ाइल के एंड्रॉइड बॉडी में काम करता build.gradleहै। यह तब है जब आप प्रकट एक्सएमएल फ़ाइल डेटा को आयात करने का तरीका नहीं जान सकते। काश यह एंड्रॉइड स्टूडियो द्वारा अधिक समर्थित होता, लेकिन जब तक आपको वांछित एपीके नाम आउटपुट नहीं मिलता, तब तक मूल्यों के साथ खेलते रहें:

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"))
                }
            }
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.