Ich entwickle eine Android-Bibliothek und möchte die neue Android Room-Persistenzbibliothek darin verwenden. Doch beim Start habe ich diesen Fehler:Android Room Persistence Library funktioniert nicht im Bibliotheksprojekt
Caused by: java.lang.RuntimeException: cannot find implementation for MyLibraryName.Database.QSDatabase. QSDatabase_Impl does not exist at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90)
was bedeutet, dass die annotationProcessor nicht den zusätzlichen Code während der Kompilierung zu erzeugen.
Btw, alles funktioniert gut, wenn ich meine @Database Code in das App-Modul.
Meine gradle Datei (Bibliotheksmodul):
apply plugin: 'com.android.library'
apply plugin: 'groovyx.android'
buildscript {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'org.codehaus.groovy:groovy-android-gradle-plugin:1.1.0'
}
}
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/groovy'] } }
}
dependencies {
// google Room persistence library
compile "android.arch.persistence.room:runtime:1.0.0-alpha1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',
{
exclude group: 'com.android.support', module: 'support-annotations'
})
// google location service
compile 'com.google.android.gms:play-services-location:10.2.4'
androidTestCompile 'junit:junit:4.12'
// Http
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
// groovy
compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.4'
}
In meinem Fall funktioniert es. Doppel-Check möglicherweise Sie etwas vergessen haben. – Moinkhan
Ich habe es noch einmal überprüft, und schließlich scheint das Problem mit dem Einsatz von Groovy verbunden zu sein. Der Annotationsprozessor wird nicht aufgerufen, wenn ich meinen Code unter groovy/directory ablege. Ich weiß nicht, wie ich es beheben kann. '| ____ App | | ____ build.gradle | | ____ src | | | ____ Haupt | | | | ____ java | ____ MyLibraryName | | ____ build.gradle | | ____ src | | | ____ Haupt | | | | ____ groovy <= funktioniert nicht, wenn der Code unter groovy gesetzt wird/ | | | | ____ java <= funktioniert, wenn der Code unter java/'gesetzt wird – stevenwood