2013-03-02 20 views
16

के साथ बाहरी एंड्रॉइड लाइब्रेरी प्रोजेक्ट्स मैं ग्रैडल और Android Gradle plugin के साथ एक एंड्रॉइड प्रोजेक्ट बनाने की कोशिश कर रहा हूं। मैं बाहरी (मेवेन) भंडारों में पाए जाने वाले पुस्तकालय परियोजनाओं पर निर्भर होना चाहता हूं, उदा। ActionBarSherlock।ग्रैडल

यह official site के अनुसार संभव लगता है:

Using a library is done one of the following way:

Multi-project setup. Read here: http://www.gradle.org/docs/current/userguide/multi_project_builds.html

Dependencies through a repo such as maven or ivy.

मेरी build.gradle की वर्तमान सामग्री:

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

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'com.actionbarsherlock:library:4.2.0' 
} 

android { 
    target = 'android-16' 
    sourceSets { 
     main { 
      manifest { 
       srcFile 'AndroidManifest.xml' 
      } 
      java { 
       srcDir 'src' 
      } 
      res { 
       srcDir 'res' 
      } 
      assets { 
       srcDir 'assets' 
      } 
      resources { 
       srcDir 'src' 
      } 
     } 
    } 
} 

मैं Gradle 1.2 उपयोग कर रहा हूँ। जब मैं gradle assemble साथ बनाने की कोशिश, मैं निम्नलिखित त्रुटि मिलती है:

Error: duplicate files during packaging of APK /[path to project]/build/apk/[project name]-debug-unaligned.apk 
    Path in archive: AndroidManifest.xml 
    Origin 1: /[path to project]/build/libs/[apk name]-debug.ap_ 
    Origin 2: /[home directory]/.gradle/caches/artifacts-14/filestore/com.actionbarsherlock/actionbarsherlock/4.2.0/apklib/dd63451a922558005d8c10be1085b488ed731d19/actionbarsherlock-4.2.0.apklib 
:packageDebug FAILED 

ऐसा लगता है जैसे कि यह दोनों पुस्तकालय परियोजना और अपने प्रोजेक्ट से AndroidManifest.xml शामिल करने के लिए कोशिश कर रहा है। अगर मैं sourceSets में manifest विनिर्देश को हटा देता हूं, तो मुझे अभी भी वही त्रुटि मिलती है।

साइट लाइब्रेरी परियोजनाओं के लिए apply plugin: 'android-library' का उपयोग करने का उल्लेख करती है; मुझे लगता है कि यह केवल तभी होता है जब वास्तविक पुस्तकालय (बहु-परियोजना सेटअप के साथ) का निर्माण करने से ऐसा कोई एपीके नहीं बनता है।

मैं बाहरी एंड्रॉइड लाइब्रेरी प्रोजेक्ट निर्भरताओं को काम करने के लिए कैसे प्राप्त कर सकता हूं?

उत्तर

20

हालांकि मैवेन या आइवी भंडार के माध्यम से निर्भरता प्राप्त करना संभव है, लेकिन उन्हें मानक जार संग्रह में पैक नहीं किया जाता है। विशेष रूप से इस बिल्ड सिस्टम के लिए डिज़ाइन किया गया एक नया प्रारूप है। प्रकार 'एआर'

मेवेन सेंट्रल पर उपलब्ध वर्तमान एंड्रॉइड लाइब्रेरी मेवेन प्लगइन का उपयोग करके बनाए गए थे जो एक अलग संग्रह प्रारूप ('apklib') का उपयोग करते हैं, इसलिए वे संगत नहीं हैं।

यदि आप com.actionbarsherlock देखते हैं: actionbacksherlock (जो उस लाइब्रेरी का नया स्थान है), तो आप देखेंगे कि इसका प्रारूप apklib है। http://search.maven.org/#artifactdetails%7Ccom.actionbarsherlock%7Cactionbarsherlock%7C4.2.0%7Capklib

स्रोत कोड को देखते हुए, हम 'आर' पैकेजिंग के लिए जाँच करें और 'जार' जो स्पष्ट रूप से एक समस्या यहाँ है के रूप में अन्य सभी प्रसंस्करण के लिए वापस। हमें apklib का पता लगाना चाहिए और एक बेहतर त्रुटि संदेश प्रदान करना चाहिए।

+0

नई आर प्रारूप एक संकलित वितरण की तरह है जार, या apklib की तरह एक और कच्चे स्रोत ज़िप? – yorkw

+0

प्लगइन के संस्करण 0.3 के साथ, ऐसा लगता है कि एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट बनाने की तरह एक एएआर (संकलित वर्गों और संसाधनों के साथ संग्रह) उत्पन्न करता है। जब तक यह अधिक व्यापक न हो, क्या एंड्रॉइड ग्रैडल प्लगइन को मैवेन सेंट्रल (आदि) पर पाए गए मौजूदा एपीकेलिब पैकेज किए गए पुस्तकालयों के साथ काम करने का कोई तरीका है? संपादित करें: साइट पर वर्तमान संदेश पर विचार करना विशेष रूप से उपयोगी होगा: "पुस्तकालय की बाइनरी पैकेजिंग अभी भी परिवर्तनों के माध्यम से जा रही है। अभी तक मैवेन सेंट्रल (या अन्य समान रिपो) में पुस्तकालय अपलोड न करें।" – antonyt

+17

aar apklib के समान है जिसमें यह एक ज़िप फ़ाइल है जिसमें जार + अन्य फाइलें हैं। सहायक apklib वास्तव में योजनाबद्ध नहीं है, लेकिन मैं इसे देख सकता था। –

-1

आप एंड्रॉइड ग्रेडल प्लगइन का एक पुराना संस्करण उपयोग कर रहे हैं।
नवीनतम संस्करण 0.3 में इस क्षेत्र में बहुत कुछ सुधार हुआ है।

मैं आपको इस प्लगइन के संस्करण 0.3 तक पहुंचने की सलाह दूंगा। यह भी ध्यान रखें कि आपको धीरे-धीरे (1.3 या 1.4) के हालिया संस्करण का उपयोग करना होगा।

इस प्लगइन के साथ external libraries का उपयोग कैसे किया जा सकता है इसके बारे में अधिक जानकारी।

14

आप अब एक्शन के रूप में एक्शनबारशेलॉक को एकीकृत कर सकते हैं।

बस अपने build.gradle फाइल में अपनी निर्भरता परिभाषा से जोड़ें:

dependencies { 
    compile 'com.android.support:support-v4:18.0.+' 
    compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' 

जेक व्हार्टन प्रकाशित एक example project पता चलता है कि Gradle साथ ActionBarSherlock उपयोग करने के लिए कैसे

+0

थोड़ी देर के लिए इसे खोजने की कोशिश कर रहे थे! धन्यवाद –