বিভিন্ন গ্রেড বিল্ডটাইপগুলির জন্য কীভাবে বিভিন্ন অ্যান্ড্রয়েড অ্যাপ আইকন সরবরাহ করবেন?


107

আমার গ্রেড ফাইলটিতে দুটি বিল্ড টাইপ সেট আছে: debugএবং release। আমি debugবিল্ড টাইপের জন্য একটি আলাদা অ্যাপ আইকন সেট করতে সক্ষম হতে চাই । পণ্যের স্বাদে না গিয়ে কেবল বিল্ড টাইপের মাধ্যমে কি এর কোনও উপায় আছে? build.gradle ফাইলটি নীচে রয়েছে।

apply plugin: 'android'

//...

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 30
        versionName "2.0"
    }
    buildTypes {
        debug {
            packageNameSuffix '.debug'
            versionNameSuffix '-SNAPSHOT'
        }
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}


উত্তর:


165

এটা বের করে আনা। আপনাকে যা করতে হবে তা হল একটি পৃথক এসসিআর ফোল্ডার তৈরি করা debugযা বিভিন্ন আইকন ধারণ করে। উদাহরণস্বরূপ, যদি আপনার প্রকল্পের লেআউটটি নীচে থাকে এবং আপনার লঞ্চার আইকনটি বলা হয় ic_launcher.png:

[Project Root]
  -[Module]
    -src
      -main
        -res
          -drawable-*
            -ic_launcher.png

তারপরে ডিবাগ বিল্ড প্রকারের জন্য একটি পৃথক আইকন যুক্ত করতে, আপনি যুক্ত করুন:

[Project Root]
  -[Module]
    -src
      -main
        -res
          -drawable-*
            -ic_launcher.png
      -debug
        -res
          -drawable-*
            -ic_launcher.png

তারপরে, আপনি যখন ডিবাগ বিল্ড প্রকারের নীচে নির্মাণ করবেন, এটি ডিবাগ ফোল্ডারে পাওয়া আইক_লাঞ্চ ব্যবহার করবে।


সোর্সসেট ঘোষণার সাথে আপনাকে কি অতিরিক্ত ডিবাগ ফোল্ডারটি নির্দিষ্ট করতে হবে না?
ncoronges

4
পছন্দ করেছেন দেখে মনে হবে যেহেতু ডিবাগ একটি বিল্ট-ইন বিল্ড টাইপ, এর উত্স সেটটিও অন্তর্নির্মিত।
উন্মাদতানাবুন

4
@ স্কট এটি 'ডিবাগ' ব্যবহার করে আমার জন্য কাজ করে যদি আমি প্রতিটি অঙ্কনযোগ্য ফোল্ডারে আমার আইকনটি স্রেফ রাখি। উদাহরণস্বরূপ অঙ্কনযোগ্য-এমডিপিআই, অঙ্কনযোগ্য-এইচডিপিআই, ইত্যাদি আমার ডিবাগ ফোল্ডারে অন্য কোনও সংস্থান বা কোডের দরকার নেই।
রোজার

4
কবজ মত কাজ করে। সবেমাত্র সমস্ত মিপম্যাপ ডিরেক্টরিগুলি ডিবাগ ফোল্ডারে অনুলিপি করতে হয়েছিল
অমিত ভান্ডারী

4
আলাদা অ্যাপের নাম কীভাবে রাখবেন?
DKV

95

এটি একটি সুবিধাজনক পদ্ধতির যদিও এটির একটি গুরুত্বপূর্ণ ডাউনসাইড রয়েছে ... উভয় প্রবর্তক আপনার এপিপিতে লাগানো হবে। - বারটেক লিপিনস্কি

আরও ভাল উপায়: উন্মাদতাবাবুর উত্তর's

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল

<manifest 

    ...
        <application
        android:allowBackup="true"
        android:icon="${appIcon}"
        android:roundIcon="${appIconRound}"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

    ...

    </application>

</manifest>

build.gradle

android {

    ...
        productFlavors{
        Test{
            versionName "$defaultConfig.versionName" + ".test"
            resValue "string", "app_name", "App-Test"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher_test",
                    appIconRound: "@mipmap/ic_launcher_test_round"
            ]
        }

        Product{
            resValue "string", "app_name", "App"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher",
                    appIconRound: "@mipmap/ic_launcher_round"
            ]
        }
    }
}

গিথুব ইউআরএল: গ্রেডল সহ একাধিক সংস্করণ অ্যাপ তৈরি করুন


4
এটি একটি সুবিধাজনক পদ্ধতির যদিও এটির একটি গুরুত্বপূর্ণ ডাউনসাইড রয়েছে ... উভয় প্রবর্তক আপনার এপিপিতে লাগানো হবে।
বারটেক লিপিনস্কি

-_- # এটা একটা সমস্যা আছে, আমি it.The ভাল উপায় আপডেট করুন: -> stackoverflow.com/a/22876224/703225
qinmiao

4
এটা কেন খারাপ দিক? এটি আমার কাছে খুব গুরুত্বপূর্ণ বলে মনে হচ্ছে না, এবং এটি ভাল এবং পরিষ্কার গ্রেডল দ্রবণ
লুকি

4
আমি দ্বিতীয় @ লুকির প্রশ্ন। কেন এই খারাপ দিক? আমি মনে করব অতিরিক্ত শীর্ষ স্তরের ডিরেক্টরি যুক্ত করা (আমার প্রকল্পে আমার চারটি আলাদা বিল্ড রূপ রয়েছে) ম্যানিফেস্ট প্লেসোল্ডার ব্যবহারের চেয়ে কম পরিষ্কার। বিশেষত যখন এই ডিরেক্টরিগুলিতে কেবল একটি একক আইকন থাকে।
গ্রেগস্যান্টুলি

আপনি যদি এইভাবে ব্যবহার করতে চান এবং উত্পাদন APK এ দুটি আইকন যুক্ত করা বন্ধ করতে চান তবে আপনি manifestPlaceholdersকেবলমাত্র মৃত্যুদন্ড পর্বে বা পিছনে এবং ifবিবৃতিতে সেট করতে পারেন । আমি এটি করছি কারণ আমার 1 টি অপ-প্রোডাকশন বিল্ড টাইপ রয়েছে যাতে দুটি পৃথক আইকন থাকতে পারে (এবং আমি অন্য একটির সাথে কেবল 1 পার্থক্য সহ পুরো বিল্ড টাইপটি রাখতে চাই না)
নাহুয়েল ব্যারিওস

12

আপনি পণ্যের স্বাদের আংশিক AndroidManLive.xML ফাইলে আইকনটিও নির্দিষ্ট করতে পারেন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
    <application
        tools:replace="android:icon"
        android:icon="@drawable/alternative_icon" />
</manifest>

এটি আসল অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে আপনার নির্দিষ্ট করা আইকনটি ওভাররাইট করবে


4
প্রশ্নটি পরীক্ষা করুন। " পণ্যের স্বাদে না গিয়ে কেবল বিল্ড টাইপের মাধ্যমে কি এর কোনও উপায় আছে ?"
উন্মাদতাবনাবুন

4
যদিও জিজ্ঞাসা করা হয়নি, আমাকে অনেক সাহায্য করেছিল!
v

4
এটি করার সর্বোত্তম উপায়, আপনার যদি ইতিমধ্যে স্বাদে নির্দিষ্ট ম্যানিফেস্ট ফাইল থাকে।
জ্যাক্স

এটি এখন পর্যন্ত আমি একমাত্র সমাধান দেখেছি যেখানে আপনি লঞ্চ আইকনগুলির জন্য অনন্য নাম বজায় রাখতে পারেন .. বনাম। 10+ সংস্করণ রয়েছে ic_launcher.png, কোনটি কোনটি যেখানে এটি অবস্থিত বা আসলে এটি খোলার মাধ্যমে জানতে হবে (তাই নয়) সুন্দর)। আমি জানতাম না যে মেনিফেস্ট ফাইলের জন্য এই ধরণের প্রসারিত করা এমনকি সম্ভব ছিল, এটি এসওতে বা অন্যথায় এখানে আগে কখনও উল্লেখ করা দেখেনি। নিশ্চিতভাবে মার্জিত
জিন বো বো

6

একাধিক মাত্রা সহ বিভিন্ন স্বাদ ব্যবহার করার সময় বিভিন্ন আইকন পাওয়ার জন্য যেমন:

flavorDimensions "color", "size"
productFlavors {
    black {
        dimension "color"
    }
    white {
        dimension "color"
    }

    big {
        dimension "size"
    }
    small {
        dimension "size"
    }
}

এটি হিসাবে অর্জন করা যেতে পারে:

প্রথমে ডিবাগ সংস্থানগুলি আলাদা ফোল্ডারে রাখুন যেমন:

src/blackDebug/res
src/whiteDebug/res

দ্বিতীয়ত, একাধিক স্বাদের মাত্রাগুলি সহ কীটি রাখুন হ'ল উত্সসেট নামটিতে অবশ্যই সমস্ত সম্ভাব্য স্বাদ সমন্বয় থাকতে হবে, এমনকি যদি এর কয়েকটি মাত্রা আইকনকে প্রভাবিত না করে।

sourceSets {
    // Override the icons in debug mode
    blackBigDebug.res.srcDir 'src/blackDebug/res'
    blackSmallDebug.res.srcDir 'src/blackDebug/res'
    whiteBigDebug.res.srcDir 'src/whiteDebug/res'
    whiteSamllDebug.res.srcDir 'src/whiteDebug/res'
}

কেবল এটি পরিষ্কার করে দেওয়ার জন্য, একাধিক মাত্রা ব্যবহার করা হলে নিম্নলিখিতগুলি কাজ করবে না :

sourceSets {
    // Override the icons in debug mode
    blackDebug.res.srcDir 'src/blackDebug/res'
    whiteDebug.res.srcDir 'src/whiteDebug/res'
}

ম্যানিফেস্ট ফাইলটিতে লঞ্চ আইকন ঘোষণার পরে এটি কীভাবে সহায়তা করবে তা নিশ্চিত নয়। আপনি কি এই সমস্যাটির সমাধান করতে পারেন?
ডেভিড রেক্টর

4
উত্সের নামটি ম্যানিফেস্টে ঘোষণা করা হয়েছে তবে আমার পোস্টে বর্ণিত বিভিন্ন স্বাদ-নির্দিষ্ট ফোল্ডারে একই ফাইলের নামের সাথে আপনার বিভিন্ন আইকন থাকতে পারে।
হোসে

0

Mipmap-anydpi-v26 প্রতিস্থাপন এবং সমস্ত মাত্রার জন্য ফাইল রাখার সহ ধাপে ধাপে সমাধান:

অ্যান্ড্রয়েড -> বিল্ডটাইপস -> ডিবাগ, অভ্যন্তরীণ ইত্যাদিতে আপনার বিল্ড টাইপ (মডিউল: অ্যাপ্লিকেশন) এ প্রথমে সংজ্ঞায়িত করুন

প্রকল্পের শ্রেণিবিন্যাসে, অ্যান্ড্রয়েডের নীচে, অ্যাপে ডান ক্লিক করুন -> নতুন -> চিত্র সম্পদ -> পথে আপনার আইকনটি চয়ন করুন -> ব্যাকগ্রাউন্ড স্তর এবং উত্তরাধিকার -> পরবর্তী -> রেস ডিরেক্টরিতে অন্য কোনও পরিবর্তন আপনার পছন্দসই বিল্ড প্রকারটি চয়ন করুন ( ডিবাগ, অভ্যন্তরীণ, প্রধান, ইত্যাদি) -> সমাপ্ত

এইভাবে আইকনগুলি আপনার প্রতিটি পুরানো আইকন প্রতিস্থাপন করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.