गतिविधि वर्ग AAR फ़ाइल java.lang.NoClassDefFoundError में नहीं मिल सकता है




android android-activity (5)

समस्या का कारण यह है कि क्लास ScannerViewActivity को आपके AAR के अंदर एक निर्भरता के रूप में कहा जाता है:

apply plugin: 'com.android.library'
android{...}
dependencies {
    compile 'com.me.scanner:[email protected]' //library which contains ScannerViewActivity
}

लेकिन जब आप aar का उपयोग करते हैं (सकर्मक इस aar निर्भरता को नहीं जोड़ेंगे!), तो आपको दूसरी निर्भरता को जोड़ना होगा जैसे:

dependencies {
...
compile ('com.me.app:[email protected]')// remove{ transitive = true; }
compile ('com.me.scanner:[email protected]')
...
}

मैंने एक एंड्रॉयड लाइब्रेरी बनाई है, इसमें एक गतिविधि कक्षा है जो कैमरे के इरादे को खोलने के लिए उपयोग करती है, लाइब्रेरी उस भाग के लिए एकदम सही excepts का काम करती है जो स्क्रीन पर दिखाई देने के लिए गतिविधि को आमंत्रित करती है और एप्लिकेशन को निम्नलिखित त्रुटियों को फेंकने में क्रैश होता है

Suppressed: java.lang.ClassNotFoundException: com.me.scanner.ScannerViewActivity
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                    ... 14 more
         Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

निम्नलिखित मेरी build.gradle फाइल है जो इस पुस्तकालय का उपयोग करेगी

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.me.app:[email protected]'
    compile ('com.me.app:[email protected]'){ transitive = true; }
    testCompile 'junit:junit:4.12'
}

कृपया ध्यान दें:

  • यह पुस्तकालय मॉड्यूल परियोजना के रूप में पूरी तरह से काम करता है,

    compile project(':scannercontrol')

    लेकिन परियोजना में aar रूप में इसका उपयोग करते समय नहीं

  • मैंने बिना और { transitive = true; } { transitive = true; } , कोई परिवर्तन नहीं

  • मैंने scanner.aar लिए मेरी एर फ़ाइल का नाम बदल scanner.aar
  • मैंने /[library-project]/build/outputs/aar/scanner-release.aar फाइल फॉर्म लिया है /[library-project]/build/outputs/aar/scanner-release.aar

अपडेट 1 - 2017-09-14

गतिविधि ScannerViewActivity मेरी लाइब्रेरी का हिस्सा है, ScannerViewActivity ही इसे पुस्तकालय कक्षा में से एक से बुलाया गया है

Intent scannerView = new Intent();
scannerView.putExtra(MESSAGE_RECEIVER, new MessageReceiver());
scannerView.setClass(context, ScannerViewActivity.class);
scannerView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scannerView);

यह context android.app.Applicationandroid.app.Application का उदाहरण है। android.app.Application और किसी भी Activity

अपडेट 2 - 2017-09-14

सौभाग्य से Google पर 2 दिनों के रोमिंग के बाद मुझे प्रश्न के उत्तर में आ गया है जो कक्षा में नहीं मिला । मैंने इस परियोजना के लिए लाइब्रेरी की निर्भरताओं को जोड़ दिया है और इसे aar साथ चलाने में सक्षम हूं लेकिन यह मेरी समस्या का समाधान नहीं है,

निम्नलिखित प्रवाह और मुद्दा है मैं वर्तमान में सामना कर रहा हूँ

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

  • हम चाहते हैं कि डेवलपर को AAR फाइलें scanner-sandbox.aar और scanner-sandbox.aar scanner.aar को निकाले गए SDK से scanner.aar और scanner.aar से किसी एक का उपयोग करें

  • हम डेवलपर को अपने .gradle फ़ाइल में अतिरिक्त निर्भरता नहीं जोड़ना चाहते हैं यदि वे लायब्रेरी के सैंडबॉक्स संस्करण को चलाने के लिए चाहते हैं,

  • निम्नलिखित निर्भरता है कि एक बारकोड स्कैनर के रूप में डिवाइस कैमरे को अनुकरण करने के लिए उपयोग किया जा रहा है

    compile 'me.dm7.barcodescanner:zxing:1.9.8'

अद्यतन प्रश्न है

किसी भी फाइल को बिना किसी भी रिपॉजिटरी को प्रकाशित किए बिना एक एर फ़ाइल को वितरित करने का क्या संभव तरीका है और जब डेवलपर .gradle फ़ाइल को सिंक करता है तो स्थापित लायब्रेरी की सभी निर्भरताएं


जीशान

मुझे एक ही समस्या का सामना करना पड़ा है, मैंने कई शोध किए हैं और मुझे उम्मीद है कि यह आपकी मदद करेगी

एक परियोजना के लिए .aar फ़ाइल बनाना:

  1. लाइब्रेरी मॉड्यूल के लिए, .aar फ़ाइल स्वचालित रूप से एंड्रॉइड स्टूडियो द्वारा बनाई गई है। किसी भी संसाधन फ़ाइल या पुस्तकालयों के साथ एक प्रोजेक्ट के लिए, .aar फाइल को अगले चरणों में बताए अनुसार जनरेट किया जा सकता है।
  2. प्लगइन की जांच करें यह निम्नानुसार होना चाहिए, यदि वह आवेदन में है, तो पुस्तकालय में परिवर्तन, प्लगइन लागू करें: 'com.android.library'
  3. खुली दाहिने सीमा की चौड़ाई बार खोलें और "अपनी परियोजना" -> कार्य-> निर्माण करें और फिर दोबारा इकट्ठा करें रिलेज पर जाएं। परियोजना का निर्माण करने पर, आपको ऐप / बिल्ड / आउटपुट / एआर / निर्देशिका के अंदर दो। एआर फाइलें (ऐप- डीबग.एआर और ऐप-रिलीज़। एआर) मिलेंगी। अपने प्रोजेक्ट में .aar फ़ाइल का उपयोग करना:
  4. "ऐप-रिलीज़। एअर" फ़ाइल प्राप्त करें और उसे अपने प्रोजेक्ट के लिब्स फ़ोल्डर में पेस्ट करें। अगर लिब्स फ़ोल्डर मौजूद नहीं है, तो ऐप निर्देशिका में "libs" नामक निर्देशिका बनाएं

  5. ऐप ग्रेडेल फ़ाइल में निम्नलिखित को जोड़ें, भंडार {फ्लैटडीर {डीआईआरएस 'लिब्स'}} निर्भरता {संकलन (नाम: 'ऐप-रिलीज़', एक्सट: 'एर')}

  6. समन्वयन पर, आपका प्रोजेक्ट लाइब्रेरी फ़ाइलों का उपयोग करने के लिए तैयार है। नोट: .एअर ग्रेडेल निर्भरता को मैन्युअल रूप से आपके प्रोजेक्ट एप ग्रेडले में जोड़ना होगा उदाहरण: नीचे

त्रुटियों का आकलन: सिस्टम। एर: java.lang.NoClassDefFound त्रुटि:

उपाय:

.एअर ग्रेडेल निर्भरता को मैन्युअल रूप से आपके प्रोजेक्ट एप ग्रेडेल में जोड़ना होगा


आपकी लाइब्रेरी वितरित करने के 3 तरीके हैं:

  1. एक स्थानीय मेवेन लाइब्रेरी बनाने से जनरेटेड एर को वितरित किया जाता है।
    आप Gradle एंड्रॉइड मैवेन प्लगइन का उपयोग करके एक स्थानीय एयर बना सकते हैं। इसे कैसे करे:

    ए। प्लगइन क्लासपाथ को build.gradle रूट में build.gradle :

    buildscript {
      repositories {
        jcenter()
        mavenCentral()
      }
      dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    
      }
    }
    
    allprojects {
      repositories {
        jcenter()
      }
    }

    ख। Maven प्लगइन सेट करें, और ग्रुप और संस्करण नाम को library build.gradle में जोड़ें:

    apply plugin: 'com.android.library'
    apply plugin: 'com.github.dcendents.android-maven'
    
    group = 'com.your.packagename'
    version = '1.0.0'
    ext.versionCode = 1000
    
    android {
      compileSdkVersion 25
      buildToolsVersion "25.0.3"
    
      defaultConfig {
        minSdkVersion 9
        targetSdkVersion 25
        versionCode versionCode
        versionName version
      }
      buildTypes {
        ...
      }
    
    }
    
    dependencies {
      ...
    }

    सी। ArtifactId को सेट करें सेटिंग्स.gradle में सेट है:

    rootProject.name = 'yourlibraryname'

    घ। पुस्तकालय को अपने स्थानीय मेवेन में बनाएँ और स्थापित करें
    आप चला सकते हैं। / ./gradlew प्रोजेक्ट फ़ोल्डर या उपयोग पर स्थापित करें

    Gradle -> YourLibrary -> अन्य -> ​​एंड्रॉइड स्टूडियो से स्थापित करें (एंड्रॉइड स्टूडियो के दाईं ओर)

    ई। सीधे स्थापित अपने प्रोजेक्ट में स्थापित पुस्तकालय का उपयोग करें।
    आप अपने रूट build.gradle को mavenLocal() जोड़कर पुस्तकालय का उपयोग कर सकते हैं

    allprojects {
      repositories {
        jcenter()
        mavenLocal() // for local maven.
      }
    }

    फिर प्रोजेक्ट पर निर्भरता जोड़ें:

    compile 'com.your.packagename:modulename:1.0.0'

    या आप जनरेट की गई प्रतिलिपि को स्थानीय मेवेन पथ से कॉपी कर सकते हैं। लिनक्स में, आप इसे /your/userpath/.m2/repository/ या ~/.m2/repository/

  2. नंबर 1 में एक ही तकनीक का उपयोग करें, लेकिन प्रत्येक डेवलपर कंप्यूटर के लिए ~/.m2/repository/ central की ओर इशारा करते हुए ~/.m2/repository/

  3. एक निजी मेवेन रिपॉजिटरी का उपयोग करें आप JFrog Artifactory oss या नेक्सस रिपॉज़िटरी ओएसएस का उपयोग कर सकते हैं


आपके "अपडेट 2 - 2017-09-14" का जवाब - एक वसा वाली एआर फ़ाइल का निर्माण कर सकता है। जिसमें सभी निर्भरताएं होंगी, एक चीज जिसे आपको संभालना पड़ सकता है निर्भरता में संघर्ष कुछ समय एक समस्या पैदा कर सकता है। वसा के आकार का आकार बहुत बड़ा हो सकता है तो कोशिश दे दो


इसे इस्तेमाल करे,

त्वरित चलाएं अक्षम करें

फ़ाइल -> सेटिंग -> बिल्ड, निष्पादन, परिनियोजन -> त्वरित चलाएं

अगर यह काम नहीं करता है, तो मुझे बताएं





aar