2015-10-30 4 views
13

सारांश:कैसे एक आर पुस्तकालय में जार निर्भरता को शामिल करने के

मैं एक आर फ़ाइल है कि एक जार फ़ाइल पर निर्भर करता है है, जब मैं आर परियोजना का निर्माण, यह जार कोड नहीं है।

विवरण:

मुझे लगता है कि कोड है कि हम जावा वेब परियोजनाओं और इस तरह, इस पुस्तकालय Gradle उपयोग कर बनाई गई और एक आंतरिक गठजोड़ सर्वर में रहता है (एक जार के रूप में) है के लिए उपयोग होता है एक जावा एसडीके पुस्तकालय परियोजना है ।

लक्ष्य एएआर लाइब्रेरी के माध्यम से इस जेएआर लाइब्रेरी का "एंड्रॉइड कॉन्फ़िगर किया गया" संस्करण प्रदान करना है कि एकाधिक एंड्रॉइड एप्लिकेशन इसका उपयोग करने के लिए प्रयास (और बॉयलरप्लेट कोड) का उपयोग और कम कर सकते हैं। यह एएआर फ़ाइल एंड्रॉइड एप्लिकेशन प्रोजेक्ट्स द्वारा उपयोग किए जाने वाले नेक्सस सर्वर पर भी अपलोड की गई है।

मेरी एएआर प्रोजेक्ट में मेरी जावा एसडीके लाइब्रेरी (जेएआर) के लिए एक ग्रेडल निर्भरता शामिल है, लेकिन जब बनाया गया है, तो एएआर में से कोई भी वर्ग शामिल नहीं है।

कोड:

यह वह जगह है जावा एसडीके परियोजना की Gradle फ़ाइल:

apply plugin: 'java' 

//noinspection GroovyUnusedAssignment 
sourceCompatibility = 1.7 
version = '1.1.1' 

repositories { 
    mavenCentral() 
} 

jar { 
    from { 
     configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
    testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4' 
    compile 'org.springframework:spring-web:3.1.1.RELEASE' 
    compile 'com.google.code.gson:gson:2.3' 
} 

यह, मेरी आर परियोजना के लिए Gradle फ़ाइल है ध्यान दें कि मैं अपने गठजोड़ को Maven भंडार घोषणाओं से हटाया इससे सर्वर मुझे लगता है कि इस सवाल के लिए इससे कोई फर्क नहीं पड़ता।

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "2.2.2" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    lintOptions { 
     abortOnError false 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.0' 

    compile ('com.mycompany:javasdk:1.1.1') 
} 

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

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.mycompany.application1" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.0' 

    compile ('com.mycompany:androidsdk:[email protected]') 
} 

नोट: मैं शुरू में की lib निर्देशिका में जार जोड़कर समस्या हल हो जाती एएआर परियोजना, लेकिन यह अवांछित है। यह एक नेक्सस सर्वर बेकार बना देता है। यह अच्छा होगा कि हम एएआर प्रोजेक्ट की ग्रेडल फ़ाइल में जार के संस्करण संख्या को टक्कर दे सकते हैं और अपडेट संकलन समय पर स्वचालित रूप से होता है।

टिप्पणी 2: मैं एंड्रॉयड परियोजना में मेरी आर निर्भरता को transitive=true जोड़ने की कोशिश की लेकिन यह कुछ भी हल नहीं किया है, असली मुद्दा यह है कि जब आर परियोजना के निर्माण, जार परियोजना कोड बंडल नहीं प्राप्त करता है।

उत्तर

25

आप इस कार्य जोड़ सकते हैं:

task copyLibs(type: Copy) { 
    from configurations.compile 
    into 'libs' 
} 

निर्भरता आपके Nexus से डाउनलोड किया जाएगा, लेकिन जब आप पुस्तकालय पैकेज की जरूरत है, इस कार्य के पहले निष्पादित और jar फ़ाइलों की नकल की और शामिल किया जाएगा अंतिम aar अंदर।

+0

आदमी, मुझे लगता है कि यह वही है जो मैं ढूंढ रहा था, मैं इसे आज़माकर वापस आ गया। धन्यवाद! – rastadrian

+1

क्या आपने इसे आजमाया है? –

+0

हां, इसने इस मुद्दे को हल किया। मैंने [इस पोस्ट] के आधार पर libs निर्देशिका को साफ़ करने के लिए पहले 'क्लीन टास्क' जोड़ा है (https://discuss.gradle.org/t/how-do-i-delete-a-subset-of-files/ 6855/2)। इसके बाद मुझे 'मेटा-आईएनएफ' में कुछ जेनरेट की गई फ़ाइलों के लिए 'पैकेजिंग ऑप्शन' में कुछ बहिष्करण जोड़ना पड़ा, लेकिन कुल मिलाकर, यह काम किया! – rastadrian

संबंधित मुद्दे