android - नई ग्रैडल एंड्रॉइड बिल्ड सिस्टम का उपयोग करके मैन्युअल रूप से बाहरी आरा पैकेज को कैसे शामिल करें




gradle android-gradle (12)

मैं नए एंड्रॉइड बिल्ड सिस्टम के साथ प्रयोग कर रहा हूं और मैंने एक छोटी सी समस्या में भाग लिया है। मैंने एक्शनबारशेलॉक के अपने स्वयं के पैकेज को संकलित किया है जिसे मैंने 'actionbarsherlock.aar' कहा है। मैं जो करने की कोशिश कर रहा हूं वह वास्तव में मेरा अंतिम एपीके बनाने के लिए इस आर्य का उपयोग करता है। यदि मैं संकलन परियोजना (': actionbarsherlock') का उपयोग कर अपने मुख्य प्रोजेक्ट में एंड्रॉइड-लाइब्रेरी मॉड्यूल के रूप में संपूर्ण एक्शनबारशेलॉक लाइब्रेरी को शामिल करता हूं, तो मैं बिना किसी समस्या के सफलतापूर्वक निर्माण करने में सक्षम हूं।

लेकिन मेरी समस्या यह है कि मैं उस निर्भरता को एक आर्ल फ़ाइल पैकेज के रूप में प्रदान करना चाहता हूं मैन्युअल रूप से अगर मैं एक जार होगा तो मुझे यह पता लगाना प्रतीत नहीं होता कि इसे मेरे प्रोजेक्ट में सही तरीके से कैसे शामिल किया जाए। मैंने संकलन विन्यास का उपयोग करने का प्रयास किया है लेकिन यह काम नहीं कर रहा है। मैं संकलन के दौरान प्रतीक नहीं ढूंढ पा रहा हूं जो मुझे बताता है कि कक्षा पैकेज से class.jar क्लासपाथ में शामिल नहीं हो रहा है।

क्या किसी को फ़ाइल के रूप में मैन्युअल रूप से एक आरा पैकेज को शामिल करने के लिए सिंटैक्स के बारे में पता है?

build.gradle

buildscript {

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

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

संपादित करें: तो जवाब यह है कि यह वर्तमान में समर्थित नहीं है, अगर आप इसे ट्रैक करना चाहते हैं तो यहां issue है।

संपादित करें: वर्तमान में यह अभी भी समर्थित नहीं है, सबसे अच्छा विकल्प @RanWakshlak से प्रस्तावित समाधान प्रतीत होता है

संपादित करें: @VipulShah द्वारा प्रस्तावित वाक्यविन्यास का उपयोग करके भी सरल


  1. अपनी परियोजना पर राइट क्लिक करें और "मॉड्यूल सेटिंग्स खोलें" का चयन करें।

  1. नया मॉड्यूल जोड़ने के लिए विंडो के ऊपरी बाएं कोने में "+" बटन पर क्लिक करें।

  1. "आयात करें। जेएआर याएएआर पैकेज" का चयन करें और "अगला" बटन पर क्लिक करें।

  1. "फ़ाइल नाम" फ़ील्ड के बगल में एलीपिसिस बटन "..." का उपयोग करके एएआर फ़ाइल खोजें।

  1. ऐप के मॉड्यूल को चयनित रखें और निर्भरता के रूप में नया मॉड्यूल जोड़ने के लिए निर्भरता फलक पर क्लिक करें।

  1. निर्भरता स्क्रीन के "+" बटन का प्रयोग करें और "मॉड्यूल निर्भरता" का चयन करें।

  1. मॉड्यूल का चयन करें और "ठीक" पर क्लिक करें।


2 तरीके हैं:

  • पहला रास्ता

1: अपने एंड्रॉइड स्टूडियो को खोलें और फ़ाइल-> नया-> नया मॉड्यूल द्वारा "नया मॉड्यूल बनाएं" विंडो पर नेविगेट करें ...

2: "आयात। जेएआर / एएआर पैकेज" आइटम का चयन करें और अगला बटन क्लिक करें

3: build.gradle फ़ाइल में निर्भरता जोड़ें जो आपके app मॉडल्यू से संबंधित है।

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

यह सब।

  • दूसरा रास्ता

1 aars जैसे libs निर्देशिका में एक फ़ोल्डर बनाएँ।

2 अपने एआर lib को आर्स फ़ोल्डर में रखें।

3 कोड स्निपेट जोड़ें

repositories { flatDir { dirs 'libs/aars' } }

आपकी build.gradle फ़ाइल में ऐप मॉड्यूल से संबंधित है।

4 build.gradle फ़ाइल में निर्भरता जोड़ें जो आपके app मॉडल्यू से संबंधित है।

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

यह सब

यदि आप चीनी पढ़ सकते हैं, तो आप ब्लॉग को देख सकते हैं 什么是AAR文件以及如何在Android开发中使用


आप कोड की केवल कुछ पंक्तियों के साथ एकाधिक aar निर्भरता जोड़ सकते हैं।

स्थानीय flatDir भंडार जोड़ें:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

निर्भरता विन्यास compile करने के compile libs निर्देशिका में हर aar जोड़ें:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}

किसी एप्लिकेशन में एएआर फ़ाइल आयात करने का मानक तरीका https://developer.android.com/studio/projects/android-library.html#AddDependency में दिया गया है

फ़ाइल> नया> नया मॉड्यूल क्लिक करें। आयात करें। जेएआर / एएआर पैकेज पर क्लिक करें और फिर अगला क्लिक करें। संकलित एएआर या जेएआर फ़ाइल का स्थान दर्ज करें और फिर समाप्त क्लिक करें।

कृपया अगले चरणों के लिए उपरोक्त लिंक देखें।


नीचे दिया गया दृष्टिकोण नवीनतम एंड्रॉइड स्टूडियो (> v0.8.x) के साथ काम करता है:

  • एप मॉड्यूल के libs फ़ोल्डर के तहत aar फ़ाइल को सहेजें (उदाहरण: <project>/<app>/libs/myaar.aar )

  • अपने "ऐप" मॉड्यूल फ़ोल्डर के निर्माण के लिए नीचे जोड़ें (अपने प्रोजेक्ट रूट build.gradle नहीं)। संकलन रेखा में नाम नोट करें, यह myaar @ aar नहीं myaar.aar है।

    dependencies {
        compile 'package.name.of.your.aar:[email protected]'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • Tools -> Android -> Sync Project with Gradle Files क्लिक करें


पहले (डिफ़ॉल्ट)

implementation fileTree(include: ['*.jar'], dir: 'libs')

सरणी include में बस '*.aar' जोड़ें।

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

यह एंड्रॉइड स्टूडियो 3.x पर अच्छी तरह से काम करता है।


मुझे एंड्रॉइड इश्यू ट्रैकर में यह कामकाज मिला: https://code.google.com/p/android/issues/detail?id=55863#c21

चाल (फिक्स नहीं) आपके .aar फ़ाइलों को एक उपप्रोजेक्ट में अलग करना और अपनी libs को कलाकृतियों के रूप में जोड़ना है:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

अधिक जानकारी: Handling-transitive-dependencies-for-local-artifacts-jars-and-aar


मुझे यह समस्या भी मिली है। यह समस्या रिपोर्ट: issue ऐसा सुझाव देता है कि सीधे संदर्भित करें .एएआर फ़ाइल समर्थित नहीं है।

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

वाक्यविन्यास यहां परिभाषित किया गया है http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library संदर्भ-ए-लाइब्रेरी


मेरे मामले में मेरे पास मेरी लाइब्रेरी में कुछ डिप्टीयां हैं और जब मैं इससे एक एआर बनाता हूं तो मैं चूक गया, क्योंकि मिस्ड डिप्टीज़ की वजह से, मेरा समाधान है कि मेरी lib से सभी एआरआई को arr फाइल के साथ जोड़ दें।

तो मेरा प्रोजेक्ट लेवल build.gradle ऐसा दिखता है:

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

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) तो:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

और लाइब्रेरी build.gradle :

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}

मैं बस सफल रहा हूँ!

  1. libs / फ़ोल्डर के तहत mylib-0.1.aar फ़ाइल कॉपी करें

  2. इन लाइनों को build.gradle के नीचे जोड़ें [ऐप होना चाहिए, प्रोजेक्ट नहीं]

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:[email protected]'
    }
    
  3. अब तक सब ठीक है। यहां सबसे महत्वपूर्ण बिंदु आता है:

ग्रैडल को निर्भरता के लिए नेटवर्क तक पहुंचने की आवश्यकता है जब तक ऑफ़लाइन मोड सक्षम न हो।

इसलिए आपको यह सुनिश्चित करना होगा कि आपने परियोजना संरचनाओं / ग्रैडल में ऑफ़लाइन कार्य चेकबॉक्स सक्षम किया है

- या -

नेटवर्क तक पहुंचने के लिए कॉन्फ़िगर प्रॉक्सी सेटिंग्स

प्रॉक्सी सेटिंग्स को कॉन्फ़िगर करने के लिए आपको प्रोजेक्ट http और https की gradle.properties फ़ाइल को अलग से नीचे संशोधित करना होगा :

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

उम्मीद है कि यह काम करता है ..


वर्तमान में स्थानीय .aar फ़ाइल का संदर्भ नहीं है (जैसा कि जेवियर ड्यूक्रोकेट द्वारा पुष्टि की गई है)

इसके बजाय आप एक स्थानीय मैवेन रिपोजिटरी (इसे लगता है उससे कहीं अधिक सरल) स्थापित कर सकते हैं और वहां से .aar का संदर्भ ले सकते हैं।

मैंने एक ब्लॉगपोस्ट लिखा है कि यह कैसे काम कर रहा है:

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


कृपया इसे काम करने के लिए नीचे दिए गए चरणों का पालन करें (मैंने इसे एंड्रॉइड स्टूडियो 2.2 तक परीक्षण किया है)

आइए कहें कि आपने libs फ़ोल्डर में aar फ़ाइल रखी है। (मान लें कि फ़ाइल का नाम cards.aar )

फिर ऐप build.gradle निम्न निर्दिष्ट करें और build.gradle फ़ाइलों के साथ सिंक प्रोजेक्ट पर क्लिक करें। ओपन प्रोजेक्ट लेवल build.gradle और flatDir{dirs 'libs'} को नीचे की तरह जोड़ें

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

और अब ऐप स्तर build.grdle फ़ाइल खोलें और .aar फ़ाइल जोड़ें

    dependencies {
       compile(name:'cards', ext:'aar')
}

यदि सब कुछ ठीक हो जाता है तो आप देखेंगे कि पुस्तकालय प्रविष्टि निर्माण में बनाई गई है -> विस्फोट-एआर

यह भी ध्यान रखें कि यदि आप किसी अन्य प्रोजेक्ट से .aar फ़ाइल आयात कर रहे हैं जिसमें निर्भरता है तो आपको इन्हें अपने build.gradle में भी शामिल करना होगा।





build.gradle