বিভিন্ন পণ্যের স্বাদে কীভাবে আলাদা নির্ভরতা নির্ধারণ করতে হয়


153

আমি আমার একটি অ্যাপ্লিকেশনকে গ্রেডলে রূপান্তর করছি এবং নতুন বিল্ড ফ্লেভার বৈশিষ্ট্যগুলি অর্থ প্রদানের জন্য এবং একটি বিনামূল্যে বিজ্ঞাপন ভিত্তিক স্বাদ ব্যবহার করতে চাই।

আমি চাই কেবল বিজ্ঞাপন ভিত্তিক সংস্করণটি অ্যাডমোব এসডিকে নির্ভর করবে।

আমার বিল্ড ফাইলটি দেখতে এমন দেখাচ্ছে:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    productFlavors {
        Pro {
            packageName "de.janusz.journeyman.zinsrechner.pro"
        }
        Free { 
            dependencies {

            }
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile fileTree(dir: 'libs', include: '*.jar')
}

ফ্রি প্রোডাক্ট ফ্লেভারের নির্ভরতা কনফিগার করার কোনও উপায় আছে যা মূল স্বাচ্ছন্দ্যে ফোল্ডারের সাথে একত্রীকরণ করা হয় যেখানে উভয় স্বাদে সাধারণ লাইব্রেরি রয়েছে?

যদি এটি সম্ভব হয় তবে আমি কীভাবে এই ফোল্ডারটি সংজ্ঞায়িত করব?


এই থ্রেডটি দেখুন: স্ট্যাকওভারফ্লো
আলী

উত্তর:


190

স্বাদ নির্দিষ্ট নির্ভরতা সংজ্ঞায়িত করতে আপনি আপনার নির্ভরতা বিভাগের proCompileপরিবর্তে ব্যবহার করতে পারেন compile। আপনি যখন গ্রেড বৈশিষ্ট্যগুলি চালনা করেন আপনি স্বয়ংক্রিয়ভাবে তৈরি কনফিগারেশনের একটি ওভারভিউ পাবেন।

সঠিক বিল্ড ফাইলটি এর মতো দেখাচ্ছে:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}
apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 22
    }

    productFlavors {
        pro {
            packageName "de.janusz.journeyman.zinsrechner.pro"
        }
        free { }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.2.0'
    freeCompile 'com.google.android.gms:play-services-ads:7.5.0'
}

2
আমি এটি চেষ্টা করছি এবং এই ত্রুটিটি Error:(28, 0) Build script error, unsupported Gradle DSL method found: 'glassCompile()'!পাচ্ছি , (আমি যে
গন্ধটি

19
আহ, মনে হচ্ছে আপনাকে dependenciesব্লকের নীচে ব্লকটি সরিয়ে নিতে হবে android। কতটা স্বজ্ঞাত।
এনএমআর

14
দ্রষ্টব্য যে xxxCompileগ্রেডল উত্সগুলি ক্লোজারগুলি উত্পন্ন করে যদি গন্ধের নাম মূলধনী অক্ষর দিয়ে শুরু হয়।
জ্যারেট মিল্লার্ড

2
"প্যাকেজনাম" "অ্যাপ্লিকেশনআইডি" হওয়া উচিত
অ্যাপসাইড

7
আপনি কীভাবে অ্যাড ক্লাসগুলি কল না করে পরিচালনা করবেন?
জ্যারেড বুরোজ

26

২০১ mid সালের মাঝামাঝি থেকে দ্রুত এগিয়ে। আপনাকে যুক্ত করতে হবে flavorDimensions

android {
    ...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "dimensionName"
    productFlavors {
        pro {
            dimension "dimensionName"
        }
        free {
            dimension "dimensionName"
        }
    }
}

dependencies {
    implementation 'com.android.support:support-v4:22.2.0'
    freeImplementation 'com.google.android.gms:play-services-ads:15.0.1'
}

এছাড়াও, দ্রষ্টব্য:

কনফিগারেশন 'সংকলন' অপ্রচলিত এবং 'বাস্তবায়ন' এবং 'এপিআই' দিয়ে প্রতিস্থাপন করা হয়েছে। এটি 2018 এর শেষে মুছে ফেলা হবে more আরও তথ্যের জন্য দেখুন: http://d.android.com/r/tools/update-d dependency-configurations.html


পরিবর্তে বিল্ডভারেন্টস দিয়ে এটি কীভাবে করবেন তা আপনি জানেন? প্রোডেবুগিমপ্লিমেন্টেশন এর মতো।
লিয়েনড্রো ওকাম্পো

1
দয়া করে এর জন্য একটি পৃথক প্রশ্ন যুক্ত করুন। মন্তব্য বিভাগে এটি এখানে লিঙ্ক। আপনি কী অর্জন করতে চাইছেন তার সম্পূর্ণ বিবরণ যোগ করুন। :)
ব্যবহারকারী1506104

11

প্রতিটি স্বাদের জন্য আপনাকে ম্যানুয়ালি কনফিগারেশন যুক্ত করতে হবে। উদাহরণ

configurations {
    proCompile
    freeCompile
}

dependencies {
    compile 'com.parse.bolts:bolts-tasks:1.3.0'

    proCompile 'com.android.support:design:23.1.1'
    freeCompile 'com.parse:parse-android:1.12.0'
}

1
সেখান থেকে কীভাবে যাব? কীভাবে বিভিন্ন কনফিগারেশন সক্রিয় করবেন? এটি কি কেবল অ্যান্ড্রয়েড বিল্ডের জন্য প্রযোজ্য? অ-অ্যান্ড্রয়েড বিল্ডসের সাথে এটি কি সম্ভব?
koppor

9

সম্পাদনা করুন: আমি অন্য কৌশলগুলির মধ্যে একটি ব্যবহার করার পরামর্শ দিচ্ছি!

গৃহীত উত্তরের বিকল্প হ'ল:

    ext {
        flavorType = ""
    }


    gradle.startParameter.getTaskNames().each { task ->

        if(task.contains("flavor1")){
            flavorType = "flavor1"
        } else if (task.contains("flavor2")){
            flavorType = "flavor2"
        } else {
            flavorType = "flavor3"
        }

    }

 if(flavorType == 'flavor1' || flavorType == 'flavor2') {
        compile 'com.android.support:support-v4:18.0.+'
    }

2
এটি আপনাকে একসাথে একাধিক স্বাদ তৈরি করতে দেয় না যা আমাদের বেশিরভাগের জন্য একধরণের ডিল ব্রেকার। তদ্ব্যতীত এটি অ্যান্ড্রয়েড স্টুডিওতেও খুব ভাল কাজ করতে পারে না
রিনি গ্রোস্কে

3
এই নির্ভরতা ব্লক হয়?
user1743524

2
এই ব্লক কি নির্ভরশীল?
করাকাগো

হুঁ ... 10 বা 50 স্বাদ দিয়ে ভাল স্কেল করে না এটি?
এওকস

@ কয়েক সপ্তাহে আমি প্রচুর স্বাদ তৈরি করতে চাই, আপনার কি আরও ভাল ধারণা আছে?
বিকাশ পরজুলি

6

সরল:

dependencies {

    ....
    ....

    gradle.startParameter.getTaskNames().each { task ->
        if(task.contains("free")) {
             implementation 'com.google.android.gms:play-services-ads:17.2.0'
        }
    }

    ....
    ....
}

বা শুধু:

FreeImplementation 'com.google.android.gms:play-services-ads:17.2.0'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.