2014-10-30 7 views
5

किसी कारण RoboBlender एनोटेशन डेटाबेस उत्पन्न नहीं करता है के लिए।RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl

dependencies { 
    provided 'org.roboguice:roboblender:3.0' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.roboguice:roboguice:3.0' 
} 

उत्तर

0

क्या अपनी परियोजना संरचना के बाकी कैसा दिखता है: मेरे build.gradle निम्नलिखित निर्भरता है?

विशेष रूप से, आप एंड्रॉयड स्टूडियो के RoboBlender wiki

बाद के संस्करणों में पढ़ा जाएगा, डिफ़ॉल्ट रूप से, एक परियोजना है कि Configuring RoboBlender for a large application using libraries -category में गिर जाता है उत्पन्न की है। नीचे

फिक्स निम्नलिखित है:

build.gradle में
  • आपूर्ति सूचक अपनी परियोजना के लिए
  • प्रारंभिक मॉड्यूल परियोजना में GuiceModule को
    1. पुनर्व्यवस्थित निर्भरता


    diff --git a/app/build.gradle b/app/build.gradle 
    index 1e69cec..8450fff 100644 
    --- a/app/build.gradle 
    +++ b/app/build.gradle 
    @@ -34,9 +34,9 @@ android { 
    } 
    
    dependencies { 
    - provided 'org.roboguice:roboblender:3.0' 
        compile fileTree(dir: 'libs', include: ['*.jar']) 
        compile 'org.roboguice:roboguice:3.0' 
    + provided 'org.roboguice:roboblender:3.0' 
    } 
    
    project.tasks.withType(JavaCompile) { task -> 
    diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml 
    index 017d11e..dba9e49 100644 
    --- a/app/src/main/AndroidManifest.xml 
    +++ b/app/src/main/AndroidManifest.xml 
    @@ -8,6 +8,7 @@ 
         android:label="@string/app_name" 
         android:theme="@style/AppTheme" > 
         <meta-data android:name="roboguice.annotations.packages" android:value="org.jush.roboguice3test"/> 
    +  <meta-data android:name="roboguice.modules" android:value="org.jush.roboguice3test.GuiceModule"/> 
         <activity 
          android:name="org.jush.roboguice3test.MainActivity" 
          android:label="@string/app_name" > 
    


    package org.jush.roboguice3test; 
    
    import android.app.Application; 
    
    import com.google.inject.AbstractModule; 
    
    public class GuiceModule extends AbstractModule { 
        private Application application; 
    
        public GuiceModule(Application application) { 
         this.application = application; 
        } 
    
        @Override 
        protected void configure() { 
        } 
    } 
    
  • +0

    मैं एंड्रॉयड प्रकट में संकलक तर्क और मेटा डेटा गयी। आपको कम से पूर्ण परियोजना पा सकते हैं: https://github.com/jush/RoboGuice3Test त्रुटि अभी भी है: पथ पर "नहीं मिला वर्ग" org.jush.roboguice3test.AnnotationDatabaseImpl ":/डेटा/ऐप्स/ऑर्ग .jush.roboguice3test-1.apk " – jush

    +0

    ' '' AndroidManifest.xml''' तरह '' '<मेटा डेटा एंड्रॉयड कुछ याद आ रही है: नाम =" roboguice.modules "एंड्रॉयड: value =" org.jush.roboguice3test। GuiceModule "/>' '' और फिर अपनी परियोजना में, उस मॉड्यूल को भी बनाएं। यह बहुत अच्छी तरह से खाली हो सकता है। सुझाव के लिए धन्यवाद –

    +0

    लेकिन यह मदद नहीं की, भले ही मैं इसे कहा: https://github.com/jush/RoboGuice3Test/commit/0726a14e447b81b5fd003fde0f0d03957a96e9e8 – jush

    1

    ठीक है, तो ऐसा लगता है कि के बाद से मैं मुख्य वर्ग MainActivity में किसी भी इंजेक्शन नहीं था यह भीतरी AsyncTask का एनोटेशन संसाधन ट्रिगर नहीं किया। इसलिए कोई एनोटेशन डेटाबेस नहीं बनाया गया था।

    इसके अलावा, ऐसा लगता है कि गुमनाम इनर क्लासों में इंजेक्शन समर्थित नहीं है। तो AsyncTask जरूरतों एक उचित वर्ग होने के लिए (यह अभी भी MainActivity अंदर हो सकता है)।

    मैं अभी तक पता लगा नहीं किया है RoboGuice बताने के लिए इनर क्लासों का निरीक्षण करने के भले ही बाहरी एक इंजेक्शन नहीं है।

    +0

    क्या आप इसे समझने में सक्षम थे? – amadib

    +1

    नहीं, हम [2 डैगर] (http://google.github.io/dagger/) करने के लिए स्विच करने का फैसला किया। – jush

    0

    क्या आपको लगता है कि यह टिप्पणी संसाधन ट्रिगर किया था क्या ज़रूरत थी? मेरी मुख्य गतिविधि में इंजेक्शन हैं। मुख्य गतिविधि एक अमूर्त गतिविधि से प्राप्त होती है जिसमें इंजेक्शन भी होते हैं। वह अमूर्त गतिविधि RoboActivity से विरासत में मिलता है।

    जब मैं roboguice.annotations.packagesroboguice को NoClassFound अपवाद अब और नहीं फेंका जाता है निर्धारित करते हैं, लेकिन मैं पहले इंजेक्षन-वस्तु है कि मैं उपयोग करना चाहते हैं के लिए एक NullPointer अपवाद मिलता है।

    मैं ग्रहण का उपयोग अनुप्रयोग शुरू करने के लिए।

    जब मैं रोबोब्लेंडर को अक्षम करता हूं (RoboGuice.setUseAnotation डेटाबेस (झूठा);) इंजेक्शन काम करता है।

    +0

    यदि आपकी गतिविधि RoboActivity से प्राप्त होती है तो यह मेरे पास से एक अलग समस्या है। इसके अलावा, आप कहते हैं कि यदि आप एनोटेशन डेटाबेस अक्षम करते हैं तो यह काम करता है। इसलिए, इंजेक्शन काम कर रहा है लेकिन डीबी उत्पन्न नहीं होता है। इसके अलावा मुझे आंतरिक अज्ञात वर्ग के इंजेक्शन को ट्रिगर करने का कोई तरीका नहीं मिला। मुझे अपनी कक्षा में जाना पड़ा। – jush

    +0

    क्या Roboblender ग्रहण के साथ भी काम करता है? मैं AnnotationDatabaseImpl पर noclassdeffound प्राप्त करना जारी रखता हूं, कक्षा उत्पन्न नहीं होती है। – Christine

    4

    उपलब्ध है यह एक अंतिम समाधान नहीं है, लेकिन यह आप कर सकते हैं। मुझे नहीं पता क्यों, लेकिन RoboGuice 3.0 और 3.0.1 इस अपवाद को फेंकता है।आप क्या करना है अपने MainActivity में डेटाबेस के लिए अक्षम एनोटेशन इस प्रकार है:

    static { 
        RoboGuice.setUseAnnotationDatabases(false); 
    } 
    

    मैं इस मदद आशा

    संबंधित मुद्दे