0

Ich erstelle eine App mit schematic Bibliothek Generierung von SQL-Datenbank und Content-Provider für mich. Ich benutze auch eine Reihe von anderen Bibliotheken, ich werde meine Gradle-Datei in den Boden aufnehmen.ClassNotFoundException mit generierten Klasse nach der Bereitstellung mit Jack Android

Als ich meine App bereitstellen, läuft es richtig, aber wenn ich etwas in dem Code zu ändern (auch wenn ich legen Sie einfach ein Protokoll) und umschichten die App stürzt beim Start mit folgenden Ausnahme:

02-08 20:53:40.279 29400-29400/hu.bendaf.udacity.popularmovies.popularmoviesapp E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: hu.bendaf.udacity.popularmovies.popularmoviesapp, PID: 29400 
    java.lang.RuntimeException: Unable to get provider hu.bendaf.udacity.popularmovies.popularmoviesapp.data.generated.MovieProvider: java.lang.ClassNotFoundException: Didn't find class "hu.bendaf.udacity.popularmovies.popularmoviesapp.data.generated.MovieProvider" on path: DexPathList[[zip file "/data/app/hu.bendaf.udacity.popularmovies.popularmoviesapp-1/base.apk"],nativeLibraryDirectories=[/data/app/hu.bendaf.udacity.popularmovies.popularmoviesapp-1/lib/arm64, /system/lib64, /vendor/lib64]] 
    at android.app.ActivityThread.installProvider(ActivityThread.java:5856) 
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5445) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384) 
    at android.app.ActivityThread.-wrap2(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "hu.bendaf.udacity.popularmovies.popularmoviesapp.data.generated.MovieProvider" on path: DexPathList[[zip file "/data/app/hu.bendaf.udacity.popularmovies.popularmoviesapp-1/base.apk"],nativeLibraryDirectories=[/data/app/hu.bendaf.udacity.popularmovies.popularmoviesapp-1/lib/arm64, /system/lib64, /vendor/lib64]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 
    at android.app.ActivityThread.installProvider(ActivityThread.java:5841) 
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5445)  
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384)  
    at android.app.ActivityThread.-wrap2(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  

Die MovieProvider-Klasse sollte mit der Schematic-Bibliothek generiert werden (die sich bei der ersten Bereitstellung befindet, aber aus irgendeinem Grund später verschwindet).

Wenn ich das Projekt bereinige, kann ich meine App erneut bereitstellen und ausführen, aber es ist ziemlich ärgerlich, das Projekt nach jeder Änderung zu bereinigen. :)

Können Sie mir helfen, was könnte das Problem verursachen?

Hier ist meine build.gradle Datei:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "hu.bendaf.udacity.popularmovies.popularmoviesapp" 
     minSdkVersion 15 
     targetSdkVersion 25 
     versionCode 2 
     versionName "1.1" 
     vectorDrawables.useSupportLibrary = true 
     jackOptions { 
      enabled true 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     targetCompatibility 1.8 
     sourceCompatibility 1.8 
    } 
} 

repositories { 
    mavenCentral() 
} 

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.1.1' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.android.support:design:25.1.1' 
    compile 'com.google.code.gson:gson:2.4' 
    compile 'com.squareup.retrofit2:retrofit:2.1.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.0.2' 
    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' 
    compile 'com.jakewharton:butterknife:8.5.1' 
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' 
    compile 'com.android.support:recyclerview-v7:25.1.1' 
    compile 'com.android.support:cardview-v7:25.1.1' 
    annotationProcessor 'net.simonvt.schematic:schematic-compiler:0.7.0' 
    compile 'net.simonvt.schematic:schematic:0.7.0' 
} 

Sie können mein ganzes Projekt auf github

+0

Hallo, ich habe die (fast) gleiche Anwendung auf Idacity. Ich habe schematisch verwendet und es funktioniert gut. Warum verwenden Sie "anotationProcessor" anstelle von "compile" in Gradle-Datei für die Schaltplan-Compiler-Bibliothek? (Ich habe "kompilieren" verwendet). Hast du versucht es zu ändern? –

+0

Nun, ich habe gerade die zwei Zeilen aus der Readme-Datei der Schaltplanbibliothek kopiert. Ich habe es gerade mit kompilieren auch versucht, aber es löst das Problem nicht :( – bendaf

Antwort

1

ich das Problem gelöst haben, es war, weil ich verwendet Buchse und Java 1.8. Nachdem ich diese Zeilen von meinem gradle (und die Lambda-Funktionen von meiner app) der Absturz entfernt verschwunden:

jackOptions { 
    enabled true 
} 
... 
compileOptions { 
    targetCompatibility 1.8 
    sourceCompatibility 1.8 
} 

Danke für die Hilfe!

0

Dies könnte wegen minification, getan von ProGuard finden. Sie müssen manuell angeben, dass Ihre externen Bibliotheken nicht minimiert werden.

Sie können diese Option in Ihrem proguard-rules.pro diese Datei wie ..

-keep class com.package.** { *; } 

mehr lesen here ..

+0

Ich habe dies in meine proguard-rules.pro-Datei platziert, aber es hat das Problem nicht gelöst :( '-halten Klasse hu. bendaf.udacity.popularmovies.popularmoviesapp.data.generated. ** {*;} ' – bendaf

+0

Fügen Sie ' -keep class hu.bendaf.udacity hinzu. ** {*;} ' – Msp

+0

Probieren Sie es auch für andere externe Bibliotheken aus , sollten Sie Klassen von 'com.android' behalten. – Msp

Verwandte Themen