2014-10-30 2 views
5

По какой-то причине RoboBlender не генерирует базу данных аннотаций. Мой build.gradle имеет следующие зависимости: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

Что остальная часть вашей структуры проекта выглядят как?

В частности, вы читали в RoboBlender wiki

Более поздние версии Android Studio, по умолчанию, создавать проект, который попадает в Configuring RoboBlender for a large application using libraries -категории.

Fix ниже делает следующее:

  1. переставить зависимостей в build.gradle
  2. Supplies указатель на GuiceModule в проекте
  3. рудиментарные модуль для вашего проекта


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 »на пути:/data/app/org .jush.roboguice3test-1.apk " – jush

+0

' '' AndroidManifest.xml''' отсутствует что-то вроде '' '' '', а затем ваш проект, создайте этот модуль. Это вполне может быть пустым. –

+0

спасибо за предложение, но это не помогло, хотя я добавил его: https://github.com/jush/RoboGuice3Test/commit/0726a14e447b81b5fd003fde0f0d03957a96e9e8 – jush

1

Ok, так что кажется, что с тех пор у меня не было каких-либо инъекции в основном классе MainActivity это не вызвало обработку аннотаций внутреннего AsyncTask. Поэтому никакой базы данных аннотаций не было создано.

Кроме того, кажется, что инъекция в анонимные внутренние классы не поддерживается. Таким образом, AsyncTask должен быть подходящим классом (он все еще может находиться внутри MainActivity).

Я еще не понял, как рассказать RoboGuice о проверке внутренних классов, даже если внешний не имеет инъекций.

+0

Вы могли понять это? – amadib

+1

Нет, мы решили переключиться на [Кинжал 2] (http://google.github.io/dagger/). – jush

0

Что вам нужно было сделать, чтобы вызвать обработку аннотаций? У моей основной деятельности есть инъекции. Основная деятельность наследуется от абстрактной деятельности, которая имеет также инъекции. Этот абстрактный актив наследуется от RoboActivity.

Когда я установить roboguice.annotations.packages к roboguice исключение NoClassFound не брошенные больше, но я получаю NullPointer исключение для первого нагнетающим-объекта, что я хочу использовать.

Я использую eclipse для запуска приложения.

Когда я отключу RoboBlender (RoboGuice.setUseAnnotationDatabases (false);) инъекции.

+0

Если ваша деятельность наследуется от RoboActivity, это другая проблема, чем у меня. Кроме того, вы говорите, что если вы отключите базу данных аннотаций, она будет работать. Поэтому инъекция работает, но db не генерируется. Также я не нашел способа запустить инъекцию внутреннего анонимного класса. Мне пришлось переехать в свой класс. – jush

+0

Работает ли Roboblender с Eclipse? Я продолжаю получать noclassdeffound в AnnotationDatabaseImpl, класс не генерируется. – Christine

4

Это не окончательное решение, но оно может помочь вам. Я не знаю, почему, но RoboGuice 3.0 и 3.0.1 выбрасывают это исключение.То, что вы должны сделать, это отключить аннотации для баз данных в вашем MainActivity следующим образом:

static { 
    RoboGuice.setUseAnnotationDatabases(false); 
} 

Я надеюсь, что эта помощь