एंड्रॉइड स्टूडियो प्रोजेक्ट से एक .jar कैसे बनाएं


96

मैं AndroidStudio का उपयोग कर रहा हूं और मेरे पास यह प्रोजेक्ट है जैसा कि दिखाया गया है:

यहां छवि विवरण दर्ज करें

नीले घेरे के अंदर क्या है myLib। myLib को बाहरी परिवाद का उपयोग करने की भी आवश्यकता होती है जो लाल घेरे के अंदर होता है, और एक अपाचे पैकेज (हरा वृत्त)।

इसलिए मैं इस पूरी चीज़ को एकल बनाना चाहता हूँ।

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

धन्यवाद!


1
मुझे लगता है कि आप जो चाहते हैं वह एअर फाइल (एंड्रॉइड आर्काइव) है जिसे एक निर्भरता के रूप में सरल से जोड़ा जा सकता है। मूल रूप से आपको एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट बनाने की आवश्यकता है। लेकिन मैं दिमाग से सटीक कदम नहीं लिख सकता।
rekire

2
मुझे एक .jar फ़ाइल की आवश्यकता है ताकि मैं किसी भी जावा प्रोजेक्ट में उपयोग कर सकूं। केवल Android का ही नहीं।
dum4ll3

1
लगभग एक ही होना चाहिए - एक पुस्तकालय परियोजना बनाएं और इसे निर्यात करें।
थ्रैश बीन

इस बग में एंड्रॉइड ग्रेडल प्लगइन की कमी का वर्णन किया गया है जो जार लक्ष्य को जोड़ने के लिए आसानी से अपग्रेड बिल्डफिल को हैक करने से रोकता है ...
mmigdol

जवाबों:


135
  • लाइब्रेरी प्रोजेक्ट के लिए build.gradle खोलें यहां छवि विवरण दर्ज करें

  • Build.gradle - deleteJar और createJar में दो कार्य लिखें और नियम createJar.dependsOn जोड़ें (DeleteJar, build) यहां छवि विवरण दर्ज करें

ऊपर से कोड:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • ग्रेडिंग पैनल को दाईं ओर से विस्तृत करें और सभी कार्यों को yourlibrary-> दूसरों के अंतर्गत खोलें। आपको वहां दो नए कार्य दिखाई देंगे - createJar और deleteJar यहां छवि विवरण दर्ज करें

  • CreateJar पर डबल क्लिक करें यहां छवि विवरण दर्ज करें

  • एक बार कार्य सफलतापूर्वक चलने के बाद, अपने जनरेट किए गए जार को निर्माण कार्य में वर्णित कार्य अर्थात libs / xxxx.jar से प्राप्त करें यहां छवि विवरण दर्ज करें

  • अपने आवश्यक प्रोजेक्ट के लीवर फोल्डर में नव सृजित जार को कॉपी करें -> राइट क्लिक करें -> "ऐड फ़ॉर लाइब्रेरी" चुनें


4
कभी-कभी लोग पढ़ने के बजाय देखने से समझते हैं। यह एक अच्छा UX है जिसे आप ☺
अभिनव त्यागी

5
ठीक है, तो मुझे आपको बताना चाहिए कि मुझे यकीन नहीं है release। मुझे मिल गया है debugऔर defaultकोई releaseफ़ोल्डर नहीं है । आप किस प्लगइन का उपयोग कर रहे हैं? क्या आपको पता है कि यह कहीं भी प्रलेखित है?
कैमरून लोवेल पामर

3
मेरे पास releaseफ़ोल्डर नहीं है ।
कामरान बिगडेल

4
आप क्या कॉपी करने की कोशिश कर रहे हैं ?? क्या हम एपीके फ़ाइल वाले फ़ोल्डर्स को लक्षित करने वाले हैं ?? मेरा मतलब है ('बिल्ड / इंटरमीडिएट / बंडल / डिफॉल्ट') से यह लाइन आपके लिए क्या है। नाम के बंडलों के साथ मेरे एंड्रॉइड स्टूडियो में कोई फ़ोल्डर नहीं है, और मुझे क्रिएटजार टास्क में NO SOURCE मिल रहा है
Bawender Yandra

12
एंड्रॉइड स्टूडियो 3.1.3 और ग्रेड संस्करण 4.4 के लिए ('बिल्ड / इंटरमीडिएट / बंडल / रिलीज /') से ('बिल्ड / इंटरमीडिएट / पैकेज्ड-क्लास / रिलीज /') में परिवर्तन
वैशाख

59

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

वह कोड लें जिसे एक जार में संकलित करने की आवश्यकता है, और इसे एंड्रॉइड स्टूडियो में एक अलग सादे जावा मॉड्यूल में स्थानांतरित करें:

  1. फ़ाइल मेनू> नया मॉड्यूल ... > जावा लाइब्रेरी
  2. विज़ार्ड में लायब्रेरी, जावा पैकेज नाम और वर्ग नाम सेट करें। (यदि आप नहीं चाहते हैं कि यह आपके लिए एक क्लास बनाए, तो आप इसे मॉड्यूल के बनने के बाद हटा सकते हैं)
  3. अपने Android कोड में, नए मॉड्यूल पर निर्भरता सेट करें ताकि वह आपके नए पुस्तकालय में कोड का उपयोग कर सके:
  4. फ़ाइल > प्रोजेक्ट संरचना > मॉड्यूल > (आपका Android मॉड्यूल) > निर्भरता > + > मॉड्यूल निर्भरता । नीचे स्क्रीनशॉट देखें: यहां छवि विवरण दर्ज करें
  5. आने वाले संवाद में सूची से अपना मॉड्यूल चुनें: यहां छवि विवरण दर्ज करें

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


आपका बहुत बहुत धन्यवाद! आपका जवाब वास्तव में मददगार था, सबसे अंतिम स्क्रीनशॉट में जो ग्रैडल कार्यों को दर्शाता है। मुझे नहीं पता था। मैं आपके चरणों का पालन कर सकता हूं, लेकिन मुझे अभी भी याद आ रही है। org.apache.http.Header मैं इसे अपने परिवाद में कैसे आयात कर सकता हूं?
dum4ll3

जब आप कहते हैं कि आप इसे याद कर रहे हैं तो आपका क्या मतलब है?
स्कॉट बार्टा

1
एक ही प्रोजेक्ट स्ट्रक्चर> निर्भरता प्रवाह के माध्यम से जाओ, लेकिन अपनी परियोजना के बजाय अपने पुस्तकालय मॉड्यूल का चयन करें, और उसी तरह से निर्भरता जोड़ें। अपने जवाब में मैं कहता हूं कि यह जार फाइल को बिल्ड / लिबास में रखता है जो इसके मॉड्यूल डायरेक्टरी में है।
स्कॉट बार्टा

1
मुझे मिला: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams। यह मेरा बाहरी पुस्तकालय है जो मैं अपने साथ संकलित कर रहा हूं।
dum4ll3

2
यह केवल जावा लाइब्रेरी के साथ काम करता है, और एंड्रॉइड लाइब्रेरी में जार कार्य मौजूद नहीं है
cuasodayleo

26

एंड्रॉइड स्टूडियो आईडीई में, " रन एनीथिंग बार " तक पहुंचें :

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

उसके बाद आप अपने प्रोजेक्ट में इस फोल्डर में अपना आर्टिफैक्ट पाएंगे
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


या


ग्रैडल पहले से ही इसके Taskलिए है, otherफ़ोल्डर के नीचे, ग्रेडल साइड-मेनू में ।

ढाल टूलबार

फिर नीचे स्क्रॉल createFullJarReleaseकरें और उसे क्लिक करें।

ग्रेड कार्य

उसके बाद आप अपने प्रोजेक्ट में इस फोल्डर में अपना आर्टिफैक्ट पाएंगे

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
यह विकल्प नहीं देख सकता। क्या इसे हाल ही के स्टूडियो संस्करण में जोड़ा गया है?
डिब्जमानिया

1
मैं निर्माण करता हूँ और जब पाता हूँ * .jar यह नाम है: full.jar। 30mins इसे पाया
lob

1
मेरे मामले में, मैंने इसे पायाbuild\intermediates\intermediate-jars\release
Yusril Maulidan Raji

मेरा एक सवाल है। मेरे मामले में, यह 3 जार फाइलें उत्पन्न करता है। classes.jar, full.jarऔर res.jar। जब भी मैं इसका उपयोग करना चाहता हूं, क्या मुझे सभी जार फ़ाइलों को आयात करना चाहिए?
युसरिल मौलिदन राजी

बस फुल का उपयोग करें।
हारून हैजेम

11

बस अपने जावा मॉड्यूल के build.gradle में इसे जोड़ें। इसमें संग्रह में आश्रित पुस्तकालय शामिल होंगे।

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

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

इसका परिणाम [मॉड्यूल_नाम] / निर्माण / काम / / मॉड्यूल_नाम] .jar फ़ाइल होगा।


लेकिन एक .jar पुस्तकालय में एक मुख्य वर्ग होगा? ओपी कहते हैं कि वे एक .jar फ़ाइल का निर्माण कर रहे हैं "इसलिए मैं अन्य परियोजनाओं में उपयोग कर सकता हूं" (एसआईसी)। यह एक पुस्तकालय की तरह लगता है।
स्टीव व्हाइट

केवल इस आदमी को वास्तव में समझ में आया कि, सिर्फ जार निर्माण प्रोब को हल नहीं करता है। क्या होगा अगर हमें इसे निष्पादित करने की आवश्यकता है। उपरोक्त कोड "jar- फाइल को निष्पादित नहीं कर सकता:" कोई मुख्य प्रकट विशेषता नहीं है "" त्रुटि से बचा जाता है।
मोबाइलएवंजेलिस्ट जूल

1

जब आपके एप्लिकेशन को कंपाइल / रन किया जाएगा तो .jar फाइल अपने आप जेनरेट हो जाएगी।

आप अपने class.jar फ़ाइल को root_folder / ऐप / बिल्ड / इंटरमीडिएट / बंडल / डीबग से पा सकते हैं

जार फ़ाइल स्थान


1
  1. एंड्रॉइड स्टूडियो में ग्रैडल टैब पर जाएं, फिर लाइब्रेरी प्रोजेक्ट चुनें।

  2. इसके बाद टास्क पर जाएं

  3. फिर अन्य पर जाएं

  4. BundleReleaseaar पर डबल क्लिक करें

आप के .aarतहत अपनी फ़ाइलें पा सकते हैंyour_module/build/outputs/aar/your-release.aar

यहाँ छवि


मैं कहीं भी "ग्रैड टैब" नहीं देखता। अंत में मैंने मदद खोज में "ग्रैडल" टाइप किया, और आपके ग्रैडल दृश्य जैसा कुछ मिला। लेकिन अंदर की सूची बहुत अलग है, आपकी तुलना में बहुत छोटी है। कार्य-> अन्य के तहत कोई बंडलरेलसीयर नहीं है। एक "createJar" है, लेकिन जब मैं उस पर क्लिक करता हूं, तो मुझे रूट प्रोजेक्ट में "Task 'createJar' नहीं मिलता है ... मैं अटक गया हूं। और ... हम क्यों चाहते हैं। .ar फाइलें? ओपी ने .jar फ़ाइल मांगी। क्या यह वही बात है>
स्टीव व्हाइट

लेकिन सवाल यह है कि .jarनहीं बनाने के लिए कैसे.aar
अलेक्सी Timoshchenko

0

जिस तरह से मैंने पाया था कि प्रोजेक्ट कंपाइलर आउटपुट (प्रोजेक्ट संरचना> प्रोजेक्ट) को ढूंढना था। तब आप जिस मॉड्यूल को जार में बदलना चाहते हैं, उसका कंप्लायंस फोल्डर खोजें, इसे ज़िप से कंप्रेस करें और आउटपुट का एक्सटेंशन ज़िप से जार में बदल दें।


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

यदि आप AndroidStudio [और अधिक] से एक gradle कार्य चलाते हैं

assembleRelease 
//or
bundleReleaseAar

या टर्मिनल के माध्यम से

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

तब तुम भीतर खोज .aarसकोगे

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aar(Android लाइब्रेरी) फ़ाइल में .jar(Java लाइब्रेरी) फ़ाइल और अतिरिक्त Android संसाधन होते हैं। .aarफ़ाइल है यही कारण है कि आप की जगह ले सकता आर एक्सटेंशन के साथ एक ज़िप फ़ाइल है .aarसाथ .zipया रन

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