AAR को JAR में कैसे बदलें


92

स्थिति :

मैं एक जावा पुस्तकालय का उपयोग करने का इरादा रखता हूं और मेरे पास केवल एएवी फाइल है जो मावेन रिपॉजिटरी से है लेकिन मुझे जार फाइल की आवश्यकता है ।

पीछे की कहानी:

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

मैंने अपनी IDEA IDE में इसका उपयोग करने की कोशिश की, लेकिन यह इसे नहीं देख सका। एक पुस्तकालय परियोजना को जार फ़ाइल में संकलित करने में सक्षम होना चाहिए, है ना?

प्रश्न :

उस AAR फ़ाइल को JAR फ़ाइल में बदलने के लिए मुझे क्या करना चाहिए?


1
आप इसे केवल .jar पर वापस नाम बदल सकते हैं, लेकिन आपके पर्यावरण के बारे में अधिक जानकारी के बिना यह हो सकता है या नहीं कि आपको क्या करने की आवश्यकता है, AAR विशिष्ट उपयोगों के साथ एक एक्सिस पुस्तकालय है।
21

1
आप हँस रहे होंगे, लेकिन मुझे कुछ गैर-नियमित शब्द जोड़ना पड़ा क्योंकि SO ने मेरे प्रश्न को पोस्ट नहीं होने दिया क्योंकि यह इतना सरल-शब्द था। और मुझे लगता है, यह सब कुछ बताता है कि लाइब्रेरी का डेवलपर ग्रैडल का उपयोग करके अपने स्वयं के प्रोजेक्ट को संकलित नहीं कर सकता है ...
नेस्टर

जवाबों:


141

आर फ़ाइल एक के होते हैं JAR फ़ाइल और कुछ संसाधन फ़ाइलों (यह मूल रूप से एक कस्टम फ़ाइल एक्सटेंशन के साथ एक मानक ज़िप फ़ाइल है)। यहाँ बदलने के लिए कदम हैं:

  1. मानक ज़िप निकालने का उपयोग करके AAR फ़ाइल निकालें ( इसे आसान बनाने के लिए * .zip का नाम बदलें )
  2. निकाली गई फ़ाइलों में classes.jar फ़ाइल खोजें
  3. इसे अपनी इच्छानुसार नाम बदलें और अपनी परियोजना में उस जार फ़ाइल का उपयोग करें

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

Spotify Android SDK के लिए ट्यूटोरियल के बाद, यह उत्तर उपाय था। ऐसा इसलिए है क्योंकि मैं Netbeans में प्रोजेक्ट विकसित करता हूं, जो AAR एक्सटेंशन के अनुपालन में नहीं लगता है। चुंगपाम की टिप्पणी इस उत्तर से संबंधित नहीं है, लेकिन AWT के उत्तर से संबंधित है, और फिर मैं चूंगपाम के साथ आंशिक रूप से सहमत हूं, अर्थात AAR से JAR तक सरल नाम काम नहीं कर रहा है। हालाँकि, मैं भी आंशिक रूप से असहमत हूँ क्योंकि "संसाधन" classes.jar फ़ाइल के लिए प्रासंगिक नहीं है।
कारल

11
मेरे पास यह जानने का एक कठिन समय था कि इसे मैक पर कैसे निकाला जाए, अगर दूसरों को भी: बस .AR को .zip और डबल क्लिक पर बदलें!
बैस्टियन बेयियर

5
तो संसाधन आधारित जार बनाने का क्या उपाय है?
2cupsOfTech

2
यह समाधान केवल जार फ़ाइल को निकालता है, लेकिन इसमें संसाधन शामिल नहीं हैं। कुछ तो गड़बड़ होगी।
टिंकर सूर्य

21

.AR एक मानक ज़िप आर्काइव है, जिसे .jar में प्रयोग किया जाता है। बस विस्तार बदलें और, यह मानते हुए कि यह भ्रष्ट या कुछ भी नहीं है, यह ठीक होना चाहिए।

यदि आपको जरूरत है, तो आप इसे अपने फाइल सिस्टम में निकाल सकते हैं और फिर इसे जार के रूप में दोहरा सकते हैं।

1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)

जब मैं जार xf चलाता हूं, मुझे कुछ नहीं मिलता है: C: \ Program Files \ Java \ jdk1.7.0_25 \ bin> jar xf c: \ dev \ 1 \ android-map-utils- 0.2.1.jar C: कार्यक्रम फ़ाइलें \ Java \ jdk1.7.0_25 \ bin>
नेस्टर

1
यार, चरण 1 पर्याप्त है। बस नाम बदलकर .jpg मेरे विचार में कदम (2) और (3) बेकार हैं
डॉ। देव

@DDDeo अगर मैं इसका नाम बदल देता हूं, तो ग्रहण परियोजना इसे एक पुस्तकालय के रूप में मान्यता नहीं दे रही है। क्या यह सामान्य है? कोई सुराग?
तानियासिस

1
अगर आप इसका नाम बदल देते हैं और जार के साथ इसे वापस नहीं करते हैं, तो यह प्रकट नहीं होने वाला है और यह इसे एक मान्य जार फ़ाइल के रूप में मान्यता नहीं देगा, मुझे विश्वास है।
AWT

16

जैसा कि कई अन्य लोगों ने बताया है, .AR फ़ाइल से .jar फ़ाइल को निकालना काफी कम नहीं है क्योंकि संसाधन गायब हो सकते हैं।

यहां मेरे लिए काम करने वाले चरण (एंड्रॉइड के संदर्भ में, आपके माइलेज भिन्न हो सकते हैं यदि आपके पास अन्य उद्देश्य हैं):

  1. .ARIP और निकालने के लिए .AR फ़ाइल का नाम बदलें।
  2. निकाला गया फ़ोल्डर एक ADT प्रोजेक्ट है जिसे आप कुछ मामूली संशोधनों के साथ ग्रहण में आयात कर सकते हैं (नीचे देखें)!
  3. निकाले गए फ़ोल्डर में निहित फ़ाइल वर्गों का नाम बदलें। जो कुछ भी आप चाहते हैं (इस उदाहरण में myProjectLib.jar) और इसे निकाले गए फ़ोल्डर के भीतर lib फ़ोल्डर में ले जाएं।
  4. अब ग्रहण के लिए इसे स्वीकार करने के लिए आपको दो फ़ाइलों को निकाले गए फ़ोल्डर रूट में डालने की आवश्यकता है:
    • .project
    • .classpath
  5. ऐसा करने के लिए, ग्रहण में एक नया एंड्रॉइड डमी प्रोजेक्ट बनाएं और फ़ाइलों की प्रतिलिपि बनाएँ, या किसी मौजूदा एंड्रॉइड प्रोजेक्ट से कॉपी करें।
  6. .Project फ़ाइल खोलें और XML नाम टैग की तलाश करें और इसकी सामग्री को myProjectLib (या जिसे आपने अपनी जार फ़ाइल को ऊपर कहा है) से सहेजें और सहेजें।
  7. अब ग्रहण में आप फाइल कर सकते हैं -> नया -> प्रोजेक्ट -> मौजूदा स्रोत से Android प्रोजेक्ट ।। और निकाले गए फ़ोल्डर की सामग्री को इंगित करें।
  8. आयात के बाद नए बनाए गए प्रोजेक्ट पर राइट क्लिक करें, प्रॉपर्टीज़ -> एंड्रॉइड का चयन करें , और लाइब्रेरी देखें
  9. अपने मुख्य प्रोजेक्ट में, जिसके लिए आप लाइब्रेरी का उपयोग करना चाहते हैं, प्रॉपर्टीज़ -> एंड्रॉइड पर भी जाएं और नए जोड़े गए myProjectLib को निर्भरता की सूची में जोड़ें।

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

8

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

  1. सभी * .AR फ़ाइलों के लिए दिखता है और उनसे classes.jar निकालता है
  2. नाम हटाए गए वर्गों। Aar की तरह होना लेकिन एक नए विस्तार के साथ

    find . -name '*.aar' -exec sh -c 'unzip -d `dirname {}` {} classes.jar' \;
    find . -name '*.aar' -exec sh -c 'mv `dirname {}`/classes.jar `echo {} | sed s/aar/jar/g`' \;

बस!


1
ज़रूर, किसी भी aar2jar परिवर्तित करने में संसाधन और प्रकट नहीं होंगे। हम कह सकते हैं (निश्चित रूप से नहीं, लेकिन करीब) aar=jar+res+manifest+libs। चलो rest=res+manifest+libs, से jar(aar)=aar-rest
ddmytrenko

यही तो मैं वास्तव में चाहता हूं! बहुत बहुत धन्यवाद। लेकिन यह वास्तव में डिस्क उपयोग को बढ़ाता है। क्योंकि हर समर्थन पुस्तकालय में कई संस्करण होते हैं। केवल नवीनतम
कथानक को

6

Android Studio (संस्करण: 1.3.2) आपको एक .AR के अंदर .jar का उपयोग करने की अनुमति देता है।

बोनस: यह स्वचालित रूप से कक्षाओं को विघटित करता है!

बस इन चरणों का पालन करें:

  1. File > New > New Module > Import .JAR/.AAR Package एक मॉड्यूल के रूप में आपको .AR आयात करने के लिए

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

  3. नीचे दिए गए कैप्चर में दिखाए गए अनुसार "classes.jar" पर राइट क्लिक करें, और "एक्सप्लोरर में शो" पर क्लिक करें। यहाँ तुम्हारा है।

access .jar से .aar


1
पहली परियोजना प्रबंधक में एंड्रॉयड के बजाय परियोजना का चयन तो बाहरी पुस्तकालयों दिखाएगा चाहिए
समद

5
 The 'aar' bundle is the binary distribution of an Android Library Project. .aar file 
 consists a JAR file and some resource files. You can convert it
 as .jar file using this steps

1) Copy the .aar file in a separate folder and Rename the .aar file to .zip file using 
 any winrar or zip Extractor software.

2) Now you will get a .zip file. Right click on the .zip file and select "Extract files". 
 Will get a folder which contains "classes.jar, resource, manifest, R.java,
 proguard(optional), libs(optional), assets(optional)".

3) Rename the classes.jar file as yourjarfilename.jar and use this in your project.

नोट: यदि आप अपने .AR फ़ाइल से केवल .jar फ़ाइल प्राप्त करना चाहते हैं तो उपरोक्त तरीके का उपयोग करें। मान लीजिए अगर आप अपनी .jar फ़ाइल के साथ मेनिफ़ेस्ट। Xml और संसाधन शामिल करना चाहते हैं तो इसका मतलब है कि आप सिर्फ .ar फ़ाइल पर राइट क्लिक कर सकते हैं और इसे .zip के रूप में सहेजने के बजाय सीधे .jar फ़ाइल के रूप में सहेज सकते हैं। आपके द्वारा निकाली गई .jar फ़ाइल को देखने के लिए, JD-GUI (Java Decompiler) डाउनलोड करें । फिर अपनी .jar फ़ाइल को इस JD_GUI में खींचें और छोड़ दें, आप .java फ़ाइल की तरह पठनीय प्रारूपों में .class फ़ाइल देख सकते हैं।

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


क्या इसका मतलब है कि हम AAR फाइल को JAR फाइल की तरह ही इस्तेमाल कर सकते हैं। इसे .AR से .jar में बदलकर?
सौम्या

@ सौम्या, नहीं, आप नहीं कर सकते।
ddmytrenko

2
दरअसल बातचीत का विषय ही गलत है। हम AAR को JAR या इसके विपरीत में परिवर्तित नहीं कर सकते हैं। केवल एक चीज जो हम कर सकते हैं वह है "AAR से JAR निकालना"। और मैंने लिखा है कि कैसे बैश कोड की दो पंक्तियों का उपयोग करके इस आटोमैटिकली को यहाँ करें: stackoverflow.com/a/29252592/746529
ddmytrenko

4

संसाधन आधारित .AR-प्रोजेक्ट्स

.Aar फ़ाइल के अंदर classes.jar फ़ाइल खोजना बहुत तुच्छ है। हालाँकि, यह दृष्टिकोण काम नहीं करता है, अगर .AR-प्रोजेक्ट ने कुछ संसाधनों को परिभाषित किया है (उदाहरण: R.layout.xyz)

  • इसलिए CommonsGuy के बहार ने मुझे एक .AR- फ़ाइल से बाहर एक वैध ADT- अनुकूल परियोजना प्राप्त करने में मदद की। मेरे मामले में मैंने सबसाम्‍प्‍लिंग-स्‍केल-इमेज-दृश्‍य को रूपांतरित किया । अपने पीसी पर माणिक स्थापित करने में मुझे लगभग एक घंटे का समय लगा।

  • एक अन्य दृष्टिकोण ग्रहण / एडीटी के लिए एंड्रॉइड- मावेन -प्लगइन का उपयोग कर रहा है क्योंकि कॉमन्सग्यू अपने ब्लॉग में लिखते हैं

  • फिर भी एक और तरीका यह हो सकता है कि बस पूरे वांछित प्रोजेक्ट को git से स्रोत के रूप में क्लोनिंग करें और इसे "मौजूदा Android प्रोजेक्ट" के रूप में आयात करें


1

यदि आप अपने बिल्ड के लिए ग्रैडल का उपयोग कर रहे हैं - एक ग्रैडल प्लग है जो आपको अपने जावा में कोटे पर निर्भरता जोड़ने की अनुमति देता है। kotlin। Scala | ... मॉड्यूल

https://github.com/stepango/aar2jar

plugins {
    id 'java'
    id 'com.stepango.aar2jar' version 0.6 // <- this one
}

dependencies {
    compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}

समझने की कोशिश कर रहा है, क्या android app / lib plugin के लिए 'compileOnlyAar' बनाना संभव है? मुझे पता है कि यह आपके पुस्तकालय के बारे में नहीं है, लेकिन शायद आपको पता है कि यह संभव है, क्योंकि एंड्रॉइड प्लगइन में 'compileOnlyAn' जैसे विरूपण साक्ष्य विन्यास नहीं है। आप समझ सकते हैं कि मुझे यहां इस कार्यक्षमता की आवश्यकता क्यों है ( stackoverflow.com/questions/60998072/… )
HeyAlex
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.