वितरण के लिए एक Android जार लाइब्रेरी बनाएं


160

मुझे एंड्रॉइड लाइब्रेरी प्रोजेक्ट्स के बारे में पता है, जो आपको एक साझा-स्रोत प्रोजेक्ट बनाने की अनुमति देता है जिसे आवश्यकतानुसार Android एप्लिकेशन में खींचा जा सकता है। हालाँकि, इसके लिए उस स्रोत की आवश्यकता होती है।

मैं एक बंद-स्रोत लाइब्रेरी बनाने और वितरित करने का एक तरीका ढूंढ रहा हूं, जिसका उपयोग अन्य एंड्रॉइड प्रोजेक्ट्स जैसे पारंपरिक जार में किया जा सकता है। इसके लिए एंड्रॉइड संकलक के उपयोग की आवश्यकता होगी, इसलिए यह वैनिला-जावा जार फ़ाइल नहीं है। FWIW, मुझे JAR में संसाधनों / लेआउट को एम्बेड करने की आवश्यकता नहीं है।

मैंने http://andparcel.com/ देखा है, लेकिन यह वर्कअराउंड की तरह लगता है, और मैं Google द्वारा 'आधिकारिक रूप से समर्थित' कुछ का उपयोग करूंगा। इसके अलावा, मुझे यह सुनिश्चित करने की आवश्यकता है कि JAR I निर्माण एंड्रॉइड एसडीके के पुराने / नए संस्करण के साथ संगत है (यानी मुझे लक्ष्य प्लेटफ़ॉर्म संस्करण, आदि को सेट करने के लिए एक तरीका चाहिए)।

क्या नवीनतम Android टूलसेट JAR बायनेरिज़ के निर्माण / उपभोग की अनुमति देते हैं? क्या आप कुछ प्रलेखन की ओर इशारा कर सकते हैं कि मैं इसे कैसे कर सकता हूं?


क्या आपको अपने प्रश्न का उत्तर मिल गया है? मुझे एक समान आवश्यकता है .. आप जार फाइलें बनाने के बारे में कैसे गए?
कृष्णभद्र

एंड्रॉइड के लिए .jar को वितरित करने के लिए आपको एंड्रॉइड डीएक्स कंपाइलर की आवश्यकता नहीं है, नियमित रूप से जावा कंपेरल काम करता है। यदि आप एक जार वितरित करते हैं तो यह ऐप बनते ही dx bytecode में परिवर्तित हो जाता है।
थॉमस डब्ल्यूयू

जवाबों:


49

यदि आप किसी भी संसाधन के बिना एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट बनाते हैं, तो ADT (पहली बार r16 में देखा गया) 'बिन' फ़ोल्डर में प्रोजेक्ट के समान नाम वाला एक .jar बनाएगा।


pls इस प्रश्न को देखें stackoverflow.com/questions/12970802/…
vnshetty

1
यह मुझे जार मिलता है, लेकिन क्या मुझे अभी भी संसाधन फ़ोल्डर वितरित करने की आवश्यकता है? एक्शनबार शरलॉक और मेरी परियोजनाओं को बंद करने की कोशिश कर रहा है क्योंकि वे एक्शनबार संसाधनों को नहीं पा सकते हैं।
नाथन श्वानमैन

1
@schwiz यह केवल गैर-संसाधन परियोजनाओं के लिए काम करता है (जैसे मैं उत्तर में बताता हूं)। अन्यथा आपको इसे मानक एंड्रॉइड लाइब्रेरी प्रोजेक्ट के रूप में आयात करने की आवश्यकता है।
फ्रेड्रॉयड

1
क्या यह अभी भी सच है? मैं फ़ोल्डर myapp.jarमें नहीं देख रहा हूँ /bin। वहाँ है classes.jar, लेकिन यह सही नहीं है?
कचरा पात्र

मैं नवीनतम ADT चला रहा हूं और मुझे अभी भी एक <प्रोजेक्ट का नाम> .jar मेरे / बिन फ़ोल्डर में है। लेकिन अगर आपकी परियोजना संसाधनों पर निर्भर करती है तो यह अच्छा नहीं है और परियोजना को एक पुस्तकालय परियोजना के रूप में शामिल करने की आवश्यकता है (आप अभी भी एक
.जार

23

Android एक विशेष प्रकार का Android-JAR प्रदान नहीं करता है। लेकिन आप क्या कर सकते हैं अपने प्रोजेक्ट में build.xml जोड़ रहा है और चींटी के साथ JAR का निर्माण कर रहा है।

मेरा build.xml इस तरह दिखता है:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

ant jarअपनी परियोजनाओं के मुख्य फ़ोल्डर में चलाकर JAR का निर्माण करें ।


इसे आज़माया और JAR फ़ाइल बनाने में सक्षम था, लेकिन JAR को लाइब्रेरी निर्यात करते समय इसकी तुलना में आकार विषम (केवल 343 बाइट्स) था। क्या झंडे गायब हैं पर कोई विचार?
शेन ऑलिवर

आप एक संग्रह कार्यक्रम (JAR ज़िप है) के साथ JAR की सामग्री की जाँच कर सकते हैं और देख सकते हैं कि क्या गायब है और उन्हें जोड़ें। आप अधिक जानकारी यहाँ पा सकते हैं: ant.apache.org/manual/Tasks/jar.html
white_gecko

5
नवीनतम एंड्रॉइड एसडीके के साथ, जावा फाइलें संकलित की जाती हैं bin/classes, इसलिए <jar destfile="MyAndroidLib.jar" basedir="bin/">होना चाहिए<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
थियो

17

आप एक "नियमित" जावा परियोजना बना सकते हैं और वहां से Android.jar आयात कर सकते हैं। फिर, आपके पास एसडीके में प्रत्येक घटक तक पहुंच होगी। फिर, आप अपनी परियोजना को जार के रूप में निर्यात कर सकते हैं ... और इसे अपने एंड्रॉइड ऐप से लोड कर सकते हैं। यह बहुत अच्छा काम करता है और ऐसा करने के लिए यह एक सीधा सरल तरीका लगता है।


1
उस स्थिति में कैसे सेवाओं, गतिविधियों, प्रसारण, इरादों की तरह पुस्तकालय के घटकों को घोषित करने के लिए। क्या ग्राहक आवेदन को इन सभी घोषणाओं को प्रकट करने की आवश्यकता है?
रॉन

@ferostar मैं java प्रोजेक्ट में android.jar को कैसे आयात कर सकता हूं?
कृष्णभद्र

यदि लाइब्रेरी के पास संसाधन हैं, तो R.java कैसे उत्पन्न करें और इसे JAR में कैसे जोड़ें

15

बस उस प्रॉपर्टी के गुणों पर जाएं जिसके आप जार बनाना चाहते हैं। Android टैब पर क्लिक करें। और पुस्तकालय में टिक है। अब आप बिन फ़ोल्डर में .jar फ़ाइल देख सकते हैं। इसे उपयोग करें जहाँ आप उपयोग करना चाहते हैं।


2
यह काम लगता है अगर LibraryProject के पास संसाधन नहीं हैं। किसी भी विचार कैसे यह संसाधनों के साथ काम करने के लिए प्राप्त करने के लिए?
नाथन श्वानमैन

यह एक बुरा जवाब है, हालांकि, यदि आपका पुस्तकालय प्रोजेक्ट अन्य परियोजनाओं पर निर्भर करता है। उन संदर्भों को नहीं उठाया जाएगा।
stevebot

10

Google द्वारा एकमात्र समाधान 'आधिकारिक रूप से समर्थित' लाइब्रेरी प्रोजेक्ट है, और इसे वितरित करने के लिए स्रोत कोड की आवश्यकता होती है। आप सामान्य तरीके से एक JAR बना सकते हैं, लेकिन आप इसके भीतर या संसाधनों को शामिल नहीं कर सकते।

दुर्भाग्य से मुझे लगता है कि स्रोत कोड की आवश्यकता के आसपास पाने के साधन के रूप में एक पुस्तकालय परियोजना के भीतर एक पैक जार को शामिल करना भी संभव नहीं है।


"आप सामान्य तरीके से एक JAR बना सकते हैं, लेकिन आप इसके भीतर या संसाधनों को शामिल नहीं कर सकते।" <- यदि मैं एंड्रॉइड कक्षाओं का संदर्भ देता हूं या एंड्रॉइड कंपाइलर का उपयोग करता हूं तो ग्रहण में सही काम नहीं करता है। कैसे काम पाने के लिए पर सुराग?
मनोचिकित्सा

5
मैं सिर्फ एक्लिप्स में एक सामान्य जावा प्रोजेक्ट बनाता हूं, android.jar को बिल्ड पथ में जोड़ता हूं, फिर Export - Java - Jar फ़ाइल का चयन करता हूं।
जेफ गिलफेल्ट

@JeffGilfelt और यदि आप android.jar को android-13 sdk डायरेक्टरी के लिए उदाहरण में शामिल करते हैं, तो क्या आप उच्च एपीआई स्तर के लिए अपने जार लाइब्रेरी का उपयोग अभी भी परियोजनाओं में कर पाएंगे?
Fran Marzoa

10

एंड्रॉइड स्टूडियो 1.2 के नवीनतम बिल्ड में, JAR लाइब्रेरी का निर्माण बिंदु और क्लिक के रूप में सरल बनाया गया है।

अनुसरण करने के चरण:

  • गोटो फ़ाइल -> नया -> नया मॉड्यूल यहां छवि विवरण दर्ज करें
  • विकल्प सूची के अंत में "जावा लाइब्रेरी" चुनें यहां छवि विवरण दर्ज करें
  • जार लिब का नाम और उसमें क्लास का नाम और हिट फिनिश बटन डालें यहां छवि विवरण दर्ज करें
  • बस !

अगला कदम आपकी जार लाइब्रेरी को आपके ऐप में निर्भरता के रूप में जोड़ रहा है। सरल बस के रूप में

  • गोटो फ़ाइल -> परियोजना संरचना -> 'ऐप' चुनें -> 'निर्भरता' चुनें
  • सबसे नीचे '+' का चयन करें -> 'मॉड्यूल डिपेंडेंसी' चुनें यहां छवि विवरण दर्ज करें
  • अपने जार लिबर मॉड्यूल का चयन करें जो आपने अभी बनाया है यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें
  • ठीक है और यह चयन करें!

.... या आप बस अपनी अपग्रेड फ़ाइल में नीचे की लाइन जोड़ सकते हैं

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

गूगल एंड्रॉयड आर्काइव (आर) बढ़ावा दे रहा है, भले ही जार समर्थित करने के लिए वापस लाया जाता है एंड्रॉयड studio.To आर और जार के बीच अंतर पता लगाना उल्लेख इस लिंक


मुझे समझ नहीं आता कि यह एक नया जार फ़ाइल कैसे बनाता है। ऐसा लगता है कि आप एक नया मॉड्यूल बना रहे हैं, जो आपके एंड्रॉइड प्रोजेक्ट में एक लाइब्रेरी के रूप में उपयोग किया जाएगा
Jejefcgb

क्या?! आप कुछ भी नहीं से नया जार बनाएँ?
इवोक्स 16

@ ईवोक: आप मॉड्यूल बनाने के बाद, आपको इसमें कक्षाएं जोड़ना होगा। एक बार हो जाने पर, आप इसे एक निर्भरता के रूप में जोड़ते हैं
निशांत।

2
प्रश्न था: स्रोत कोड के साथ एक अंतर्निहित पुस्तकालय है। इसे जार कैसे बनाया जाता है इसलिए पूरे पुस्तकालय स्रोत कोड के बजाय किसी अन्य प्रोजेक्ट में सिर्फ जार का उपयोग किया जाता है .. या मुझे कुछ याद आया?
Ewoks

2
@Nishant। मेरे लिए काम किया! धन्यवाद!
ramires.cabral

6

यह कोशिश करें: यह काम करता है

1) अपने लाइब्रेरी प्रोजेक्ट को एक सामान्य प्रोजेक्ट बनाते हैं, जो कि IsLibrary ध्वज को अचयनित करता है।

2) एंड्रॉइड एप्लिकेशन के रूप में अपनी परियोजना को निष्पादित करें। (यह कोई त्रुटि नहीं दिखाएगा)

3) आपको .apk के साथ बिन फोल्डर में एक .jar फ़ाइल मिल जाएगी।

४) आपको .jar जो आपके पुस्तकालय का उपयोग करना चाहते हैं।

5) उन्हें बताएं कि बाहरी जार को केवल निर्माण पथ में आयात करें।

यह सभी संसाधनों के साथ ठीक काम करेगा। शुभकामनाएँ।


1
मुझे इस पोस्ट को सही करना है: JAR- फाइलों में केवल कोड हो सकता है, कोई एंड्रॉइड संसाधन नहीं। यदि कोई संसाधन शामिल / आवश्यक हैं, तो हमें लाइब्रेरी प्रोजेक्ट को खुला रखना होगा और केवल एक साधारण JAR- फाइल का उपयोग नहीं कर सकते।
कोडी

@ कोडी: हम संसाधनों के साथ जार फ़ाइल कैसे बनाते हैं और इसे किसी अन्य प्रोजेक्ट में उपयोग करते हैं?
महंतेश एम अम्बी

1

ADT एक बिन फ़ोल्डर बनाता है जिसमें आपकी परियोजना के सभी मिलान स्रोत फ़ाइल और निर्देशिकाओं के लिए सभी वर्ग फाइलें होती हैं, आप जार कमांड का उपयोग कर सकते हैं, एक जार संग्रह बना सकते हैं जिसमें ये वर्ग फाइलें और निर्देशिकाएं होती हैं और आपकी लाइब्रेरी को मानती हैं, लेकिन निश्चित रूप से क्लास फाइल प्लेटफ़ॉर्म स्तर केवल प्रोजेक्ट बिल्ड के वर्तमान स्तर के लिए लक्षित होगा- आपको प्रत्येक प्लेटफ़ॉर्म स्तर के लिए एक अलग जार फ़ाइल की आवश्यकता होगी; हालाँकि इस बारे में बड़ी बात यह है कि R.class फ़ाइल प्रोजेक्ट डायरेक्टरी ट्री में शामिल है और इसके लिए आपके पास इसके संसाधनों तक पहुँच है। मुझे नहीं पता कि यह एंड्रॉइड में चीजों को करने का आधिकारिक तरीका है, लेकिन यह मेरे लिए काम करता है।


0

हमारी परियोजना में, हम एपीके (एपीके बिल्डर का उपयोग करके) बना रहे हैं, जो कि / सिस्टम / फ्रेमवर्क में स्थापित है और इस एपीके को डिफ़ॉल्ट क्लासपैथ में जोड़ा गया है। जार का उपयोग करके अनुप्रयोगों के संकलन के लिए, हम एक जार फ़ाइल (जार सी का उपयोग करके) बना रहे हैं।

नोट: हमारे पास पुस्तकालय में कोई संसाधन नहीं हैं।


0

.jar सिर्फ एक .zip फाइल है जिसमें .class फाइल (आप किसी भी .jar फ़ाइल के एक्सटेंशन को बदलने की कोशिश कर सकते हैं .zip में तब परिणाम देख सकते हैं)। आसानी से, आप .class फ़ाइल को किसी भी उद्देश्य के लिए किसी भी .jar पुस्तकालय बना सकते हैं।


कड़ाई से सच नहीं है, सूक्ष्म अंतर के लिए en.wikipedia.org/wiki/JAR_(file_format) देखें (मुख्य रूप से
जिप के

0

कदम :

1) ओपन प्रोजेक्ट project.properties

2) मूल्य जोड़ें android.library=true

3) फ़ाइल सहेजें

4) परियोजना के लिए ग्रहण मेनू से, स्वचालित रूप से निर्माण करें फिर स्वच्छ का चयन करें

परिणाम: ब्रांड नया जार बिन के तहत बनाया गया है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.