Подтвердить что ты не робот

Исчерпывание времени в библиотеке пространства контировки при вызове номеров inMemoryBuilder

Когда вы следуете руководству по настройке библиотеки сохранения номеров, я запускаю эту ошибку при тестировании на устройстве Android.

java.lang.RuntimeException: не удается найти реализацию для PackageName.AppDatabase. AppDatabase_Impl не существует

Я знаю, что был задан аналогичный вопрос, однако проблемы были вызваны проблемами kotlin gradle. Возможный дубликат

Класс тестирования:

@RunWith(AndroidJUnit4.class)
public class LocalDatabaseTest {

    private PhotoDao mPhotoDao;
    private AppDatabase mDb;

    @Before
    public void createDb() {
        Context context = InstrumentationRegistry.getTargetContext();
        mDb = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class).build();
        mPhotoDao = mDb.photoDao();
    }

    @After
    public void closeDb() throws IOException {
    //mDb.close();
}

    @Test
    public void testPreConditions() {
        assertNotNull(mDb);
   }

Dao:

    @Dao
    public interface PhotoDao {
    @Delete()
    public void delete(Photo... photos);

    @Update
    public void update(Photo ... photos);

    @Insert
    public void insert(Photo ... photos);
    }

База данных:

@Database(entities = {Photo.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract PhotoDao photoDao();
}

Трассировка стека:

java.lang.RuntimeException: cannot find implementation for *PackageName*.AppDatabase. AppDatabase_Impl does not exist
at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90)
at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:340)
at pics.chooz.choozpics.LocalDatabaseTest.createDb(LocalDatabaseTest.java:40)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853)

Gradle:

apply plugin: "com.android.application"
apply plugin: "android-apt"

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "*Package Name*"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 50
        versionName "1.0.32"
        multiDexEnabled true
        testInstrumentationRunner     "android.support.test.runner.AndroidJUnitRunner"
}

dexOptions {
    javaMaxHeapSize "4g"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
    debug {
        debuggable true
    }
}

lintOptions {
    abortOnError false
    disable "ResourceType"
}

sourceCompatibility = 1.7
targetCompatibility = 1.7
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
}
}
dependencies {

androidTestCompile "com.android.support:support-annotations:$androidVersion"
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'

    compile "android.arch.persistence.room:runtime:1.0.0-alpha1"
    annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"
}
4b9b3361

Ответ 1

Я изменил ключевое слово 'annotationProcessor' на 'kapt' в моем файле gradle. Например:

kapt "android.arch.persistence.room:compiler:1.0.0"

Ответ 2

Правило большого пальца при использовании Kotlin:

Замените зависимые annotationProcessor на kapt. Кроме того, включите apply plugin: 'kotlin-kapt' в ваше приложение build.gradle.

Ответ 3

Посмотрите этот поток

Решение заключается в замене:

annotationProcessor "android.arch.persistence.room:compiler:VERSION"

с:

kapt "android.arch.persistence.room:compiler:VERSION"

Ответ 4

Вы должны добавить зависимость процессора аннотаций к модулю, в котором находится ваша AppDatabase. Я предположил, что приложение возьмет depencency из моего модуля библиотеки API, где мои классы моделей данных, но, видимо, это не так.

Ответ пришел из этой проблемы google: https://issuetracker.google.com/issues/67520422 И это ответ: fooobar.com/questions/419812/...

Ответ 5

Была такая же проблема с

  • Gradle 3.2.0-alpha09
  • Колтин 1.2.31

Из-за удаления apply plugin: 'kotlin-kapt' и других глючных вещей.. Мне пришлось перейти на kotlin 1.1.60, чтобы он заработал. Затем используйте:

apply plugin: 'kotlin-kapt'

dependencies {
    ...
    implementation 'android.arch.persistence.room:runtime:1.0.0'
    kapt "android.arch.persistence.room:compiler:1.0.0"
}

другой вариант - вместо этого писать сущности БД /DAO и базу данных на Java.

Ответ 6

В моем случае я изменил схему, но забыл изменить номер версии.

@Database(entities = {Task1.class, Task2.class}, version = 2)

Ответ 7

Для котлина

 //Room
implementation "android.arch.persistence.room:runtime:1.0.0"
//Room annotation processor
kapt "android.arch.persistence.room:compiler:1.0.0"

apply plugin: 'kotlin-kapt'

Ответ 8

измените annotationProcessor с annotationProcessor 'android.arch.persistence.room:runtime:1.1.0' на  annotationProcessor 'android.arch.persistence.room:compiler:1.1.0'