android - syllabus - लाइब्रेरियन कोर्स क्या है




Gradle: लाइब्रेरी के एक विशिष्ट स्वाद के लिए निर्भरता जोड़ें (2)

मेरे पास एक पुस्तकालय परियोजना और एक आवेदन है। मैं लाइब्रेरी और एप्लिकेशन दोनों के लिए 2 उत्पाद स्वाद ( स्टोर , देव ) रखना चाहता हूं। जब मैं एप्लिकेशन के लिए स्टोर स्वाद का निर्माण करता हूं तो मैं पुस्तकालय से स्टोर स्वाद का उपयोग करना चाहता हूं। इसके अलावा जब मैं एप्लिकेशन के लिए देव स्वाद का निर्माण करता हूं तो मैं पुस्तकालय से देव स्वाद का उपयोग करना चाहता हूं। मैंने लाइब्रेरी और एप्लिकेशन दोनों के लिए एक ही उत्पाद स्वाद स्थापित करने की कोशिश की लेकिन यह काम नहीं करता है।

यहां मेरी कॉन्फ़िगरेशन है:

पुस्तकालय

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "ro.amarkovits.graddletest.lib"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors{
        store{

        }
        dev{

        }
    }

}

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

और मेरे पास ये फ़ाइलें हैं: src / main / res / values ​​/ strings.xml और src / store / res / values ​​/ strings.xml

आवेदन

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        applicationId 'ro.amarkovits.mymodule.app'
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors{
        store{

        }
        dev{

        }
    }
}

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

इस स्थिति में मुझे यह त्रुटि मिलती है: त्रुटि: (12, 23) कोई संसाधन नहीं मिला जो दिए गए नाम से मेल खाता है ('टेक्स्ट' पर 'मूल्य' @ string / app_name 'के साथ)। App_name लाइब्रेरी में string.xml में परिभाषित किया गया है ( मुख्य और स्टोर निर्देशिका दोनों में)

यदि मैं लाइब्रेरी से उत्पाद फ़्लेवर्स को हटाता हूं तो यह बनाता है लेकिन हमेशा मुख्य निर्देशिका से values.xml का उपयोग करता है


आपकी लाइब्रेरी में आपको प्रत्येक संस्करण को हर बार बनाने के लिए धीरे-धीरे बताना होगा:

android {
    publishNonDefault true
}

फिर आपके आवेदन में, हाल ही में मुझे लगता है कि, आप यह कर सकते हैं:

dependencies {
    (...)
    devCompile project(path: ':lib', configuration: 'devDebug') // or 'devRelease'
    storeCompile project(path: ':lib', configuration: 'storeRelease') // or 'storeDebug'
}

पुस्तकालय प्रकाशन के तहत आधिकारिक दस्तावेज में मिला।

संपादित करें:

संस्करण 0.14.3 (2014/11/18) के बाद से, अब आपके पास स्वाद-निर्माण प्रकार-संकलन निर्देश भी हो सकता है:

एंड्रॉइड {} स्कोप से पहले अपने build.gradle में निम्नलिखित जोड़ें:

configurations {
    devDebugCompile
    devReleaseCompile
    storeDebugCompile
    storeReleaseCompile
}

फिर आप स्वाद-बिल्डटाइप प्रति अपनी लाइब्रेरी के विभिन्न संस्करणों की घोषणा और उपयोग कर सकते हैं:

dependencies {
    (...)
    devDebugCompile project(path: ':lib', configuration: 'devDebug')
    devReleaseCompile project(path: ':lib', configuration: 'devRelease')
    storeDebugCompile project(path: ':lib', configuration: 'storeDebug')
    storeReleaseCompile project(path: ':lib', configuration: 'storeRelease') 
}

संपादित करें:

एंड्रॉइड ग्रैडल प्लगइन 3.0.0 के बाद से मॉड्यूल के बीच निर्भरता प्रबंधन बदल गया है। यह स्वचालित रूप से आपके ऐप और पुस्तकालयों / मॉड्यूल के बीच स्वादों से मेल खाता है जो यह निर्भर करता है।

संपूर्ण स्पष्टीकरण के लिए प्रलेखन देखें!


प्रत्येक स्वाद के लिए विशिष्ट निर्भरता को परिभाषित करने के लिए आप "compile" के बजाय "nameOfTheFlavorCompile" का उपयोग कर सकते हैं

dependencies {
    storeCompile project(':lib')
}




android-productflavors