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


84

मैंने कुछ पुस्तकालय स्रोतों को डाउनलोड किया है और इसे एंड्रॉइड स्टूडियो का उपयोग करके जार फ़ाइल के रूप में निर्यात करना चाहूंगा। क्या एंड्रॉइड स्टूडियो का उपयोग करके जार फ़ाइल को निर्यात करने का एक तरीका है?

संपादित करें:

मैं जिस लाइब्रेरी को जार के रूप में निर्यात करना चाहता हूं, वह एक लाइब्रेरी है। इसे "स्टैंडऑट" कहा जाता है और इसे GitHub से डाउनलोड किया जा सकता है। https://github.com/pingpongboss/StandOut


कृपया उस लायब्रेरी के बारे में अधिक जानकारी दें, जिसे आप निर्यात करना चाहते हैं
गमग

मैंने एंड्रॉइड लाइब्रेरी के विवरण के साथ अपना प्रश्न संपादित किया।
ऋषि प्रतिपदा

जवाबों:


85

एंड्रॉइड लाइब्रेरी को जार फ़ाइल के रूप में निर्यात करना संभव नहीं है। हालाँकि, इसे aarफ़ाइल के रूप में निर्यात करना संभव है । AarAndroid पुस्तकालयों के लिए नई बाइनरी प्रारूप होने वाली फाइलें। Google I / O, नए बिल्ड सिस्टम वीडियो में उनके बारे में जानकारी है ।

सबसे पहले, अपने स्टूडियो gradle buildके रूट डायरेक्टरी से एंड्रॉइड स्टूडियो में लाइब्रेरी बनाएं या कमांड लाइन जारी करें।

यह <yourlibroot>/libs/build/yourlib.aarफ़ाइल में परिणाम होगा ।

यह एअर फ़ाइल आपके पुस्तकालय का एक द्विआधारी प्रतिनिधित्व है और इसे एक निर्भरता परियोजना के रूप में पुस्तकालय के बजाय आपकी परियोजना में जोड़ा जा सकता है।

Aar फ़ाइल को एक निर्भरता के रूप में जोड़ने के लिए आपको इसे maven केंद्रीय या अपने स्थानीय maven रिपॉजिटरी में प्रकाशित करना होगा, और फिर aar फ़ाइल को अपनी परियोजना की gradle.buildफ़ाइल में देखें।

हालाँकि, यह कदम थोड़ा जटिल है। मुझे यहाँ कैसे करना है, इसकी अच्छी व्याख्या मिली है:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds


2
एंड्रॉइड-लाइब्रेरी के साथ अन्य एंड्रॉइड-लाइब्रेरी के आधार पर भी चीजें टूट सकती हैं।
Lo13c Faure-Lacroix

क्या रेज फ़ोल्डर को अनार फाइल में शामिल किया जाएगा?
Bagusflyer

नीचे देखें @ Wallmart_Hobo का उत्तर, यह संभव है और मैं एक ग्रहण एंड्रॉइड ऐप परियोजना में निर्यात किए गए जार के काम की पुष्टि कर सकता हूं।
पेलेट

2
मुझे मेरी aar फ़ाइल इस लिंक में मिली: lib \ build \ outputs \ aar
साइमन


44

मैं .jarइस समाधान से दृष्टिकोण का उपयोग करके, संकलित फ़ाइल के लिए एक पुस्तकालय स्रोत कोड बनाने में सक्षम था : https://stackoverflow.com/a/19037807/1002054

यहाँ मैंने क्या किया का टूटना है:

1. चेकआउट पुस्तकालय भंडार

मामले में यह एक वॉली पुस्तकालय था

2. एंड्रॉइड स्टूडियो में लाइब्रेरी आयात करें।

मैंने एंड्रॉइड स्टूडियो 0.3.7 का उपयोग किया। मैंने उस चरण के दौरान कुछ मुद्दों का सामना किया है, अर्थात् मुझे gradleनए एंड्रॉइड प्रोजेक्ट से फ़ोल्डर कॉपी करना था इससे पहले कि मैं वॉली लाइब्रेरी सोर्स कोड आयात करने में सक्षम था, यह आपके द्वारा उपयोग किए जाने वाले स्रोत कोड के आधार पर भिन्न हो सकता है।

3. अपनी build.gradleफ़ाइल को संशोधित करें

// If your module is a library project, this is needed
//to properly recognize 'android-library' plugin
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.3'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 17
    buildToolsVersion = 17

    sourceSets {
        main  {
            // Here is the path to your source code
            java {
                srcDir 'src'
            }
        }
    }
}

// This is the actual solution, as in https://stackoverflow.com/a/19037807/1002054
task clearJar(type: Delete) {
    delete 'build/libs/myCompiledLibrary.jar'
}

task makeJar(type: Copy) {
    from('build/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'myCompiledLibrary.jar')
}

makeJar.dependsOn(clearJar, build)

4. gradlew makeJarअपने प्रोजेक्ट रूट से कमांड चलाएँ ।

मुझे मेरा मामला मुझे अपने लाइब्रेरी प्रोजेक्ट रूट में नए एंड्रॉइड प्रोजेक्ट से कॉपी gradlew.batऔर gradleफाइल करने का था । आपको अपनी संकलित लाइब्रेरी फ़ाइल निर्देशिका myCompiledLibrary.jarमें ढूंढनी चाहिए build\libs

मुझे आशा है कि किसी को यह उपयोगी लगता है।

संपादित करें:

चेतावनी

यह काम करता है, आप कई मॉड्यूल के साथ एक परियोजना को संकलित करते हुए डुप्लिकेट लाइब्रेरी अपवाद का सामना करेंगे, जहां एक से अधिक मॉड्यूल (एप्लिकेशन मॉड्यूल सहित) एक ही jarफाइल पर निर्भर करता है (जैसे। मॉड्यूल की खुद की लाइब्रेरी निर्देशिका है, जो build.gradleदिए गए मॉड्यूल का संदर्भ है ) ।

ऐसे मामले में जहां आपको एक से अधिक मॉड्यूल में एक लाइब्रेरी का उपयोग करने की आवश्यकता होती है, मैं इस दृष्टिकोण का उपयोग करने की सलाह दूंगा : एंड्रॉइड ग्रेडल बिल्ड और सपोर्ट लाइब्रेरी


मैंने पाया कि जार के अंदर रेस को शामिल करने का कोई तरीका नहीं है। क्या यह संभव है?
Bagusflyer

7
एंड्रॉइड स्टूडियो के हाल के संस्करणों में एक बदलाव की आवश्यकता है: लाइन को `से ('बिल्ड / इंटरमीडिएट / बंडल / रिलीज /') पढ़ना चाहिए
ग्रेग एनिस

@GregEnnis हां, लेकिन मेरे मामले में यह मेरे भीड़ के नाम के साथ एक जार बना रहा है और वास्तविक जार उस जार के अंदर है। मैंने अपने मॉड्यूल नाम जैसे मॉड्यूल_name.jar के साथ निर्मित जार निकाला है।
pyus13

6
@bagusflyer, यदि आप resफ़ोल्डर चाहते हैं, तो AAR फ़ाइल ठीक उसी प्रकार है - resफ़ोल्डर समर्थन के साथ एक JAR फ़ाइल ।
मार्टिन कोन्सेनी

कैसे इस जार उत्पन्न करने के लिए प्रहरी लागू करने के लिए?
अमृत ​​बिदरी

37

Android Studio V1.0 के बाद से जार फ़ाइल निम्न प्रोजेक्ट लिंक के अंदर उपलब्ध है:

डीबग करें: "your_app" \ build \ मध्यवर्ती \ बंडल \ debug \ classes.jar

रिलीज़ जारी करें: "your_app" \ build \ मध्यवर्ती \ बंडल \ रिलीज़ \ कक्षाएं \

JAR फ़ाइल बिल्ड प्रक्रिया पर बनाई गई है, Android Studio GUI में बिल्ड-> मेक प्रोजेक्ट से है और CMD लाइन से यह "gradlew build" है।


3
इस उत्तर के लिए आप मेरे सभी
इंटर्नेट

1
मिला, बिल्ड वेरिएंट में, हमें बिल्ड वेरिएंट को 'रिलीज़' चुनना होगा। लेकिन अब classes.jar रिलीज़ फ़ोल्डर में मौजूद नहीं है!
अपराजित साईराम

1
@ अपराजितसिरम आपने अपने JAR, कमांड लाइन या गुई का निर्माण कैसे किया?
एवी लेविन

1
@AparajithSairam, मुझे GUI में कुछ मिला लेकिन यह केवल एपीके फ़ाइलों के लिए प्रासंगिक है। संबंधित बिल्ड वैरिएंट को चुनने के बाद हरे "प्ले" आइकन को दबाएं। यह एक बैकग्राउंड असेंबली ग्रेडेल कमांड चलाएगा जो फाइल बनाएगा। CMD में एक JAR फ़ाइल के लिए, आपको gradlew assembleDebug या रिलीज़ या आपके पास जो भी स्वाद हो, चलाना होगा। उसके बाद JAR निम्न स्थान पर उपलब्ध होगा: your_app "\ build \ मध्यवर्ती \ बंडलों \" फालोअर "\ classes.jar आप" gradlew कार्यों "का उपयोग करके अपने सभी असेंबली कमांड देख सकते हैं
Avi Levin

1
मैंने एक साल पहले एक और उत्तर दिया। उस धंधे पर शिकंजा कसें। यह केक है! धन्यवाद!!
केविन

31

निम्नलिखित को build.gradle में शामिल करें:

android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
    }

    task("javadoc${variant.name}", type: Jar) {
        classifier = "javadoc"
        description "Bundles Javadoc into a JAR file for $variant.name."
        from tasks["generate${variant.name}Javadoc"]

    }

    task("jar${variant.name}", type: Jar) {
        description "Bundles compiled .class files into a JAR file for $variant.name."
        dependsOn variant.javaCompile
        from variant.javaCompile.destinationDir
        exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
    }
}

फिर आप इसके साथ ग्रेडिंग को अंजाम दे सकते हैं: ./gradlew clean javadocRelease jarReleaseजो आपके जार और build/libs/फ़ोल्डर में एक javadoc जार का निर्माण करेगा ।

EDIT: android gradle टूल्स के साथ 1.10। + android SDK dir मिलना पहले से अलग है। आपको निम्नलिखित को बदलना होगा (धन्यवाद विशाल!):

android.sdkDirectory 

के बजाय

android.plugin.sdkDirectory

महान जवाब, यह मेरे लिए पूरी तरह से काम किया। आप जारडबग कार्य को चलाने के लिए एंड्रॉइड स्टूडियो में एक ग्रेडल लक्ष्य भी जोड़ सकते हैं जो प्रयोग करने योग्य जार बनाएगा (मैंने इसे एक ग्रहण परियोजना में परीक्षण किया है और यह ठीक भी काम करता है)।
पेलेट

8
"नया" एंड्रॉइड बिल्ड सिस्टम इसे बदसूरत क्यों बनाता है :(?
मार्टिन कोन्सेनी

अब तक केवल यही एक उत्तर है जिसने काम किया। बहुत बहुत धन्यवाद @almart_Hobo
ड्रू

एक जार फ़ाइल उत्पन्न करने के लिए महान समाधान! क्या संसाधनों को भी इसमें शामिल करना संभव है?
गातन

12

मैं इस ट्यूटोरियल का उपयोग करके एंड्रॉइड स्टूडियो में एक जार फ़ाइल निर्यात करने में सक्षम था: https://www.youtube.com/watch?v=1i4I-Nph-Cw "Android स्टूडियो से जार निर्यात करने के लिए कैसे"

मैंने एंड्रॉइड स्टूडियो में एक JAR के निर्यात के सभी चरणों को शामिल करने के लिए अपने उत्तर को अपडेट किया:

1) Android एप्लिकेशन प्रोजेक्ट बनाएं, app-> build.gradle पर जाएं

2) इस फाइल में निम्नलिखित को बदलें:

  • संशोधित 'com.android.application': प्लगइन लागू करने के लिए प्लगइन लागू होते हैं: 'com.android.library'

  • निम्नलिखित निकालें: applicationId, versionCode और versionName

  • निम्नलिखित कोड जोड़ें:

// Task to delete old jar
task deleteOldJar(type: Delete){
   delete 'release/AndroidPlugin2.jar'
}
// task to export contents as jar
task exportJar(type: Copy) {
    from ('build/intermediates/bundles/release/')
    into ('release/')
    include ('classes.jar')
    rename('classes.jar', 'AndroidPlugin2.jar')
}
exportJar.dependsOn(deleteOldJar, build)

3) इस फ़ाइल में अब सिंक पर क्लिक करना न भूलें (शीर्ष दाईं ओर या सिंक बटन का उपयोग करें)।

4) ग्रैडल टैब (आमतौर पर मध्य दाएं) पर क्लिक करें और एक्सपोजर के लिए नीचे स्क्रॉल करें

5) एक बार जब आप रन विंडो में सफल संदेश देखते हैं, तो सामान्य फ़ाइल एक्सप्लोरर का उपयोग करके पथ का उपयोग करके निर्यात किए गए जार पर जाएं: C: \ Users \ name \ AndroidStudioProjects \ ProjectName \ app \ रिलीज़ जिसे आपको इस निर्देशिका में अपनी जार फ़ाइल को देखना चाहिए।

शुभ लाभ :)


1
चरण 2 महत्वपूर्ण है। किसी और ने इसका उल्लेख नहीं किया। धन्यवाद, यह मेरे लिए काम किया!
पोकी

9

यहाँ कुछ संवर्द्धन के साथ अभी तक एक और, थोड़ा अलग जवाब है।

यह कोड .ar के ठीक बाहर .ar लेता है। व्यक्तिगत रूप से, यह मुझे थोड़ा और विश्वास दिलाता है कि बिट्स के माध्यम से भेज दिया जा रहा है। इसका मतलब यह भी है कि यदि आप प्रोगार्ड का उपयोग कर रहे हैं, तो आउटपुट जार वांछित के रूप में बाधित हो जाएगा।

मैंने एक सुपर "मेकजार" कार्य भी जोड़ा, जो सभी बिल्ड वेरिएंट के लिए जार बनाता है।

task(makeJar) << {
    // Empty. We'll add dependencies for this task below
}

// Generate jar creation tasks for all build variants
android.libraryVariants.all { variant ->
    String taskName = "makeJar${variant.name.capitalize()}"

    // Create a jar by extracting it from the assembled .aar
    // This ensures that products distributed via .aar and .jar exactly the same bits
    task (taskName, type: Copy) {
        String archiveName = "${project.name}-${variant.name}"
        String outputDir = "${buildDir.getPath()}/outputs"

        dependsOn "assemble${variant.name.capitalize()}"
        from(zipTree("${outputDir}/aar/${archiveName}.aar"))
        into("${outputDir}/jar/")
        include('classes.jar')
        rename ('classes.jar', "${archiveName}-${variant.mergedFlavor.versionName}.jar")
    }

    makeJar.dependsOn tasks[taskName]
}

जिज्ञासु पाठक के लिए, मैं सही चर और मापदंडों को निर्धारित करने के लिए संघर्ष करता था जो com .android.library का उपयोग करता है। .ar फ़ाइलों के लिए। मैंने आखिरकार उन्हें यहां Android ओपन सोर्स प्रोजेक्ट में पाया ।


4

हम एंड्रॉइड स्टूडियो द्वारा संसाधन फ़ाइलों के बिना एंड्रॉइड लाइब्रेरी प्रोजेक्ट के लिए जार फ़ाइल निर्यात कर सकते हैं। यह भी आवश्यकता है कि मैं हाल ही में क्या मिला।

1. अपनी build.gradle फ़ाइल को कॉन्फ़िगर करें

    // Task to delete old jar

    task clearJar(type: Delete){
       delete 'release/lunademo.jar'
    }

    // task to export contents as jar
    task makeJar(type: Copy) {
       from ('build/intermediates/bundles/release/')
       into ('build/libs/')
       include ('classes.jar')
       rename('classes.jar', 'lunademo.jar')
    }
    makeJar.dependsOn(clearJar, build)

2. अपने प्रोजेक्ट रूट के तहत gradlew makeJar चलाएं

आप अपने परिवादों को निर्माण / परिवादों के रूप में dir के तहत देखेंगे / यदि आप सौभाग्य से हैं।

================================================== ==========

यदि आप कमांड लाइन पर "सॉकेट टाइमआउट अपवाद" के रूप में समस्या को पूरा करते हैं,

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

आप दाहिने हिस्से में ग्रेडल विंडो खोलने के लिए इस चरण का अनुसरण कर सकते हैं और इस तरह एंड्रॉइड स्टूडियो पर "मेकजार" पर क्लिक कर सकते हैं,

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

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

फिर निर्माण / libs dir पर जाएं, आपको अपनी जार फ़ाइल दिखाई देगी।

आशा है कि यह यू के लिए उपयोगी है।

शुभ लाभ @।@

लूना

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