[英]ClassNotFoundException with generated class after redeploy with jack android
I am creating an app with schematic library generating SQL database and content provider for me. 我正在用原理图库创建一个应用程序,为我生成SQL数据库和内容提供程序。 I am also using a bunch of other libraries, I will include my gradle file in the bottom. 我还使用了许多其他库,我将gradle文件放在底部。
When I deploy my app first, it runs correctly, but if I change something in the code (even if I just insert a log) and redeploy the app it crashes on startup with the following exception: 当我第一次部署应用程序时,它可以正常运行,但是如果我更改了代码中的某些内容(即使我只是插入了日志)并重新部署了该应用程序,它也会在启动时崩溃,但会出现以下异常:
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)
The MovieProvider class should be generated with the schematic library (which is at the first deploy, but it disappears for some reason after). MovieProvider类应使用逻辑示意图库生成(该逻辑库在第一次部署时,但由于某种原因其消失了)。
If I clean the project I can deploy and run my app again correctly, but it's pretty annoying to clean the project after every modification. 如果我清理项目,则可以正确部署并再次运行我的应用程序,但是每次修改后清理项目都非常烦人。 :) :)
Can you help me what could cause the problem? 您能帮我造成问题的原因吗?
Here is my build.gradle file: 这是我的build.gradle文件:
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'
}
I have solved the problem, it was because I used jack and java 1.8. 我已经解决了问题,这是因为我使用了jack和java 1.8。 After I removed these lines from my gradle (and the lambda functions from my app) the crash disappeared: 在我从gradle中删除了这些行(以及我的应用中的lambda函数)后,崩溃消失了:
jackOptions {
enabled true
}
...
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
Thanks for the help! 谢谢您的帮助!
This could be because of minification, done by ProGuard. 这可能是由于ProGuard缩小了尺寸。 You have to specify manually to ignore your external libraries from getting minified. 您必须手动指定以忽略您的外部库。
You can specify it in your proguard-rules.pro
file like this.. 您可以像这样在proguard-rules.pro
文件中指定它。
-keep class com.package.** { *; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.