"অ্যাপ্লিকেশন-রিলিজ.এপকে" কীভাবে এই ডিফল্ট উত্পন্ন এপিকে নাম পরিবর্তন করতে হয়


155

আমি যখনই অ্যান্ড্রয়েড স্টুডিওতে একটি স্বাক্ষরিত apk উত্পন্ন করি তখনই ডিফল্টরূপে এটি অ্যাপ্লিকেশন-রিলিজ.এপকে হিসাবে নাম দেয় ...

আমরা কি কোনও সেটিংস করতে পারি যাতে এটি প্রম্পট করে আমাকে এমন নাম জিজ্ঞাসা করতে পারে যা এপিকে অর্পণ করা দরকার (এটি যেভাবে গ্রহণায় করা হয়)

আমি যা করি তা হ'ল- এপিকে তৈরির পরে নামকরণ করুন। এটি কোনও ত্রুটি দেয় না তবে এমন কোনও আসল উপায় আছে যাতে প্রম্পট পেতে আমি সেটিংসে কোনও পরিবর্তন করতে পারি।

বিঃদ্রঃ::

apk অ্যান্ড্রয়েড স্টুডিও তৈরি করার সময় আমাকে অবস্থানটি নির্বাচন করার জন্য একটি প্রম্পট দিচ্ছে (কেবল)এখানে চিত্র বর্ণনা লিখুন


1 সিলেক্ট বিল্ড ভেরিয়েন্টটি মুক্তি দেওয়ার জন্য 2.sext বিল্ড-> মেনু বার থেকে স্বাক্ষরিত এপিপি উত্পন্ন নির্বাচন করুন। এইভাবে স্বাক্ষরিত
এপিপি তৈরি হচ্ছে

এখানে সমস্ত উত্তর সঠিক নয় .. এটি এখনও তাদের যে কোনও একটির ব্যবহার করেই সমস্যাটি আসবে ... সমস্যাটি হ'ল স্টুডিও হ'ল এপিপি আর্টিফ্যাক্টের নামটি ক্যাচ করা, এবং নতুন উত্পন্ন হওয়াটি ব্যবহার না করে ক্যাশেড নামটি ব্যবহার করা চালিয়ে যান!
TacB0sS

উত্তর:


142

হ্যাঁ আমরা এটি পরিবর্তন করতে পারি তবে আরও কিছু মনোযোগ দিয়ে

এটা দেখ

এখন আপনার মধ্যে এই অ্যাড build.gradle আপনার প্রকল্পের যখন নিশ্চিত করুন যে আপনি পরীক্ষা করেছি বিল্ড বৈকল্পিক মত আপনার প্রকল্পের release or Debug তাই এখানে আমি আমার বিল্ড বৈকল্পিক সেট করেছেন যেমন releaseকিন্তু আপনি ডিবাগ সেইসাথে নির্বাচন করতে পারেন।

    buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig getSigningConfig()
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def date = new Date();
                        def formattedDate = date.format('yyyyMMddHHmmss')
                        output.outputFile = new File(output.outputFile.parent,
                                output.outputFile.name.replace("-release", "-" + formattedDate)
    //for Debug use output.outputFile = new File(output.outputFile.parent,
   //                             output.outputFile.name.replace("-debug", "-" + formattedDate)
                        )
                    }
                }
            }
        }

আপনি এটির মতো ভিন্ন পদ্ধতির সাহায্যে এটি করতে পারেন

 defaultConfig {
        applicationId "com.myapp.status"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        setProperty("archivesBaseName", "COMU-$versionName")
    }

Build.gradle এ সেট সম্পত্তি পদ্ধতি ব্যবহার করুন এবং প্রকল্পগুলি চালনার আগে গ্রেড সিঙ্ক করতে ভুলবেন না আশা করি এটি আপনার সমস্যার সমাধান করবে :)

গুগল আপডেট দ্বারা সম্প্রতি এটি যুক্ত করার জন্য একটি নতুন পদ্ধতি হ'ল আপনি এখন স্বাদ বা ভেরিয়েন্ট আউটপুট অনুসারে আপনার বিল্ডটির নাম পরিবর্তন করতে পারেন // নীচের উত্সটি বিকাশকারী অ্যান্ড্রয়েড ডকুমেন্টেশন থেকে রয়েছে আরও তথ্যের জন্য উপরের ডকুমেন্টেশন লিংকটি অনুসরণ
করুন ভেরিয়েন্ট আউটপুটগুলি ম্যানিপুলেট করতে ভেরিয়েন্ট এপিআই ব্যবহার করে নষ্ট হয়ে গেছে নতুন প্লাগইন সহ। এটি এখনও সাধারণ কাজের জন্য যেমন নীচের সময় মতো বিল্ড সময় চলাকালীন APK নাম পরিবর্তন করার জন্য কাজ করে:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

নাম পরিবর্তন .aab বান্ডিল এই চমত্কার উত্তর ডেভিড মেডেনজাক দ্বারা উত্তর

tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) {
        def renameTaskName = "rename${task.name.capitalize()}Aab"
        def flavor = task.name.substring("bundle".length()).uncapitalize()
        tasks.create(renameTaskName, Copy) {
            def path = "${buildDir}/outputs/bundle/${flavor}/"
            from(path)
            include "app.aab"
            destinationDir file("${buildDir}/outputs/renamedBundle/")
            rename "app.aab", "${flavor}.aab"
        }

        task.finalizedBy(renameTaskName)
    }
//@credit to David Medenjak for this block of code
}

উপরোক্ত কোডের কি দরকার আছে?

অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ সংস্করণে আমি যা পর্যবেক্ষণ করেছি 3.3.1 .1

.Ab বান্ডিলের পুনর্নামকরণটি পূর্ববর্তী কোড দ্বারা সম্পন্ন হয় সেখানে কোনও টাস্কের পুনরায় নামকরণের প্রয়োজন হয় না।

আশা করি এটি আপনাদেরকে সহায়তা করবে। :)


সুতরাং সেখানে স্ট্রিংটি ফর্ম্যাটডেটের ইন্সটাফ করা মত "অভিষেক চৌবেই" তে ব্যবহার করুন
অভিষেক

এটি কি versionNameকোনওভাবে যুক্ত করা সম্ভব ?
zygimantus

@ অভিষেকচৌবে আমি এপিডির নাম পরিবর্তন করার পরে অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে কোডটি আর চালাতে পারছি না, কোনও ধারণা? দয়া করে সহায়তা করুন ... এটি দেখায়The APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
বিয়িং জেকে

@ বিইভিজেজে প্রকল্পটি পুনর্নির্মাণ করুন বা একবার অ্যান্ড্রয়েড স্টুডিও বন্ধ করুন এবং বিল্ড ডিরেক্টরি থেকে আউটপুট ফোল্ডারটি মুছুন এবং তারপরে প্রকল্পটি পুনর্নির্মাণ করুন বা এটি পরিষ্কার করে দেখুন opeআপনি সাহায্য করতে পারেন
অভিষেক

4
অ্যান্ড্রয়েড স্টুডিও 3.0.০ আউটপুট.আউটপুট ফাইল কেবল পঠনযোগ্য। @ জন্নি-ডো এর উত্তর হ'ল নতুন সমাধান।
কৃষ্ণ

79

আপনি সর্বশেষতম অ্যান্ড্রয়েড গ্রেডেল প্লাগইন ( 3.0 ) এর মাধ্যমে ত্রুটি পেতে পারেন :

কেবলমাত্র পঠনযোগ্য সম্পত্তি 'আউটপুটফাইলে' এর মান সেট করা যায় না

মাইগ্রেশন গাইড অনুসারে , আমাদের এখন নিম্নলিখিত পদ্ধতিটি ব্যবহার করা উচিত:

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
    }
}

নোট 2 এখানে প্রধান পরিবর্তন:

  1. alleachবৈকল্পিক আউটপুটগুলিতে পুনরাবৃত্তি করার পরিবর্তে এখন ব্যবহৃত হয় ।
  2. outputFileName কোনও ফাইলের রেফারেন্সকে পরিবর্তিত করার পরিবর্তে সম্পত্তি ব্যবহার করা হয়।

1
এখন এটি অ্যান্ড্রয়েড স্টুডিও 3.0 বিটা 7 এর জন্য অক্টোবর 2017 এর সঠিক উত্তর Thanks ধন্যবাদ।
কৃষ্শ

3
আমার ক্ষেত্রে ${applicationName}সমাধান হয়েছে BuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...(স্বচ্ছতার জন্য সংক্ষিপ্ত)। এর ফলে প্যাকেজিং ব্যর্থ হয়েছিল। আমার জন্য ${applicationId}বা ${archivesBaseName}ভাল বিকল্প ছিল। এছাড়াও ${defaultConfig.versionName}আমার জন্য নাল হয়। তাই ${applicationId}_${variant.name}-${variant.versionName}আমি শেষ পর্যন্ত কি।
পিসিদেব

1
@KGCybeX সাধারণত এই কোডটি android{}একই স্তরের অংশে ব্যবহৃত হয় defaultConfig{}। তবুও আপনি বাইরে এটি ব্যবহার করতে পারেন android{}ব্যবহার android.applicationVariants.all { }সিনট্যাক্স
জনি ডো

1
আপনি জীবদ্দশক;)
রিক ভ্যান ভেলজেন


53

আমি পুরো ফাইলের নাম পরিবর্তন করতে @ অভিষেক চৌবেই উত্তরটি পরিবর্তন করেছি:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                project.ext { appName = 'MyAppName' }
                def formattedDate = new Date().format('yyyyMMddHHmmss')
                def newName = output.outputFile.name
                newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
                newName = newName.replace("-release", "-release" + formattedDate)
                //noinspection GroovyAssignabilityCheck
                output.outputFile = new File(output.outputFile.parent, newName)
            }
        }
    }
    debug {
    }
}

এটির মতো একটি ফাইলের নাম উত্পাদন করে: MyAppName-release20150519121617.apk



1
একটি কাস্টম 'অ্যাপনাম' সম্পত্তি যুক্ত করতে, আপনার মূল প্রকল্পে এর মতো কোড যুক্ত করুন: project.ext { appName = 'MyApplicatioName' }
মীহা

2
@ ranma2913 আমি apk নাম পরিবর্তন করার পরে অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে কোডটি চালাতে পারছি না, কোনও ধারণা? দয়া করে সহায়তা করুন ... এটি APK ফাইল / ব্যবহারকারী /... / আউটপুটস / অ্যাপক / নিউউনাম-debug-20161004172815.apk ডিস্কে বিদ্যমান নেই shows
বিয়িং জে কে

1
ম্যানুয়ালি মাইঅ্যাপনাম সেট করার পরিবর্তে rootProject.nameআপনাকে গ্রহের মতো প্রকল্পের নাম দেবে।
হিরেন দাবি

3
অ্যান্ড্রয়েড স্টুডিও 3.0 হিসাবে output.outputFileকেবল পঠিত। @ জন্নি-ডো এর উত্তর হ'ল নতুন সমাধান।
কৃষ্ণ

50

(অ্যান্ড্রয়েড স্টুডিও 3.0 এবং গ্রেডল 4 এর সাথে কাজ করার জন্য সম্পাদনা করুন)

আমি আরও জটিল এপিপি ফাইলের নাম পরিবর্তনের বিকল্পের সন্ধান করছিলাম এবং আমি এই সমাধানটি লিখেছিলাম যা নিম্নলিখিত ডেটা সহ এপিপির নাম পরিবর্তন করে:

  • গন্ধ
  • বিল্ড টাইপ
  • সংস্করণ
  • তারিখ

আপনি এটির মতো একটি এপিকে পাবেন : myProject_dev_debug_1.3.6_131016_1047.apk

আপনি এখানে পুরো উত্তর খুঁজে পেতে পারেন । আশা করি এটা সাহায্য করবে!

বিল্ড.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)
        }
    }
}

2
মহান। কেবলমাত্র উন্নতি করা হবে কিছু স্বাদ বা বিল্ডটাইপ (স্বাদ == "দেব" || বিল্ডটাইপ = "ডিবাগ") এর জন্য একটি ধ্রুবক ফাইলের নাম (সংস্করণ বা তারিখ ব্যতীত)
টনি বেনব্রাহিম

এখানে "প্রত্যেক" এর পরিবর্তে "সমস্ত" গুরুত্বপূর্ণ মনে হয়।
সান-কুন ক্লার্ক-ডেভিস

ত্রুটি দেয় > groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData। কেন কেবল পরিবর্তিত হয় না buildType = variant.buildType.name?
সোমালি

এটি বলেছে"file.apk" is not writeable
হোসেইন হকিকিয়ান

38

এখানে একটি আরও ছোট উপায়:

defaultConfig {
    ...
    applicationId "com.blahblah.example"
    versionCode 1
    versionName "1.0"
    setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
    //or so
    archivesBaseName = "$applicationId-v$versionCode($versionName)"
}

এটি আপনাকে com.blahblah.example-v1 (1.0) -debug.apk (ডিবাগ মোডে) নাম দেয়

অ্যান্ড্রয়েড স্টুডিও ডিফল্টরূপে বিল্ড টাইপের নাম দিয়ে সংস্করণনামসফিক্স যুক্ত করুন, আপনি যদি ওভাররাইড করতে চান তবে পরবর্তী করুন:

buildTypes {
    debug {
        ...
        versionNameSuffix "-MyNiceDebugModeName"
    }
    release {
        ...
    }
}

ডিবাগ মোডে আউটপুট: com.blahblah.example-v1 (1.0) -মাইনিइसডিবগমোডনেম.এপকে


3
ধন্যবাদ। এটি দ্রুততম বিকল্প!
জন

1
সাইড নোট আপনি আর্কাইভবেসনেম আপনার স্থানীয় গ্রেডল.প্রপার্টি ফাইলগুলিতে যুক্ত করতে পারেন।
Ge3ng

এটি সত্যিই আরও স্পষ্ট বলে মনে হচ্ছে। কেন এটি অগ্রাধিকারযুক্ত সমাধান নয়?
সান-কুন ক্লার্ক-ডেভিস

6

আমি @ উত্তর উত্তরের ভিত্তিতে আরও সার্বজনীন সমাধান লিখেছি।

এছাড়া গন্ধ এবং বিল্ড টাইপ ভিত্তিক কনফিগারেশন সঙ্গে কাজ করা উচিত applicationId, versionName, versionCode

বিল্ড.gradle এ:

android {
    ...
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def appId = variant.applicationId
            def versionName = variant.versionName
            def versionCode = variant.versionCode
            def flavorName = variant.flavorName // e. g. free
            def buildType = variant.buildType // e. g. debug
            def variantName = variant.name // e. g. freeDebug

            def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
            output.outputFile = new File(output.outputFile.parentFile, apkName)
        }
    }
}

APK নাম উদাহরণ: com.example.app_freeDebug_1.0_1.apk

variantভেরিয়েবল সম্পর্কে আরও তথ্যের জন্য দেখুন ApkVariant এবং বেসভেরিয়েন্ট ইন্টারফেস সংজ্ঞা।


4

android.applicationVariants.allআপনার অ্যাপ স্তরের গ্রেডেলের নীচের মতো ব্লক যুক্ত করুন

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            lintOptions {
                disable 'MissingTranslation'
            }
            signingConfig signingConfigs.release
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
                }
            }
        }
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '_debug'
        }
    }

2019/03/25 এ উপলব্ধ



2

প্রথমে আপনার মডিউলটির নাম অ্যাপ্লিকেশন থেকে সার্ভে অ্যাপে রাখুন name

দ্বিতীয়টি এটি আপনার প্রকল্পের শীর্ষ-স্তরের (মূল প্রকল্প) গ্রেডে যুক্ত করুন। এটি গ্রেডল ৩.০ নিয়ে কাজ করছে

//rename apk for all sub projects
subprojects {
    afterEvaluate { project ->
        if (project.hasProperty("android")) {
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${project.name}-${variant.name}-${variant.versionName}.apk"
                }
            }
        }
    }
}

2

বিল্ড.gradle (মডিউল: অ্যাপ) এ নিম্নলিখিত কোড যুক্ত করুন

android {
    ......
    ......
    ......
    buildTypes {
        release {
            ......
            ......
            ......
            /*The is the code fot the template of release name*/
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def formattedDate = new Date().format('yyyy-MM-dd HH-mm')
                    def newName = "Your App Name " + formattedDate
                    output.outputFile = new File(output.outputFile.parent, newName)
                }
            }
        }
    }
}

এবং প্রকাশের বিল্ডের নামটি আপনার অ্যাপ্লিকেশন নাম হবে 2018-03-31 12-34


1

আমার সমাধানটিও কারও সহায়ক হতে পারে।

গ্রেডেল ৪.৪ সহ ইন্টেলিজি 2017.3.2 এ পরীক্ষিত এবং কাজ করে

দৃশ্যপট:

আমার অ্যাপ্লিকেশনটিতে আমার 2 টি স্বাদ রয়েছে এবং তাই আমি চেয়েছিলাম প্রতিটি প্রকাশের প্রতিটি স্বাদ অনুসারে যথাযথভাবে নামকরণ করা হোক।

নীচের কোডটি আপনার মডিউল গ্রেড বিল্ড ফাইলটিতে পাওয়া যাবে:

{app-root}/app/build.gradle

গ্রেডল কোডটি android{ }ব্লকে যুক্ত করা হবে :

android {
    // ...

    defaultConfig {
        versionCode 10
        versionName "1.2.3_build5"
    }

    buildTypes {
        // ...

        release {
            // ...

            applicationVariants.all { 
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(output.outputFile.name, variant.flavorName + "-" + defaultConfig.versionName + "_v" + defaultConfig.versionCode + ".apk"))
                }
            }

        }
    }

    productFlavors {
        myspicyflavor {
            applicationIdSuffix ".MySpicyFlavor"
            signingConfig signingConfigs.debug
        }

        mystandardflavor {
            applicationIdSuffix ".MyStandardFlavor"
            signingConfig signingConfigs.config
        }
    }
}

উপরেরটি নীচে পাওয়া APK গুলি সরবরাহ করে {app-root}/app/ :

myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.apk

আশা করি এটি কারও কাজে লাগতে পারে।

আরও তথ্যের জন্য, প্রশ্নে উল্লিখিত অন্যান্য উত্তরগুলি দেখুন


0

আমি মনে করি এটি সহায়ক হবে।

buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                project.ext { appName = 'MyAppName' }
                def formattedDate = new Date().format('yyyyMMddHHmmss')
                def newName = output.outputFile.name
                newName = newName.replace("app-", "$project.ext.appName-")
                newName = newName.replace("-release", "-release" + formattedDate)
                output.outputFile = new File(output.outputFile.parent, newName)
            }
        }
    }
}
productFlavors {
    flavor1 {
    }
    flavor2 {
        proguardFile 'flavor2-rules.pro'
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.