简体   繁体   English

使用Jack Android重新部署后,生成类具有ClassNotFoundException

[英]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'
}

You can find my whole project on github 您可以在github上找到我的整个项目

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.** { *; }

Read more here .. 在这里阅读更多..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将一个类从一个应用程序复制到另一个应用程序后,Android发出ClassNotFoundException异常 - ClassNotFoundException android after copy a class from one app to another one 重新部署项目后,存储在会话中的对象将与同一类不匹配 - Object stored in session will not match same class after redeploy of project 生成的JAR会为主类抛出ClassNotFoundException - Generated JAR throws ClassNotFoundException for main class Android Jack mockito另类 - Android Jack mockito alternative Android耳机Jack Listener - Headphone Jack Listener Android 将Android Studio项目从Windows移动到Mac后的ClassNotFoundException(AppCompatActivity.class) - ClassNotFoundException (AppCompatActivity.class) after moving Android studio project from Windows to Mac ClassNotFoundException:androidx 迁移后未找到类“android.support.v4.content.FileProvider” - ClassNotFoundException: Didn't find class “android.support.v4.content.FileProvider” after androidx migration Android ClassNotFoundException:未在路径上找到类 - Android ClassNotFoundException: Didn't find class on path Android ClassNotFoundException:未在路径上找到类 - Android ClassNotFoundException: Didn't find class on path android ClassNotFoundException:没有找到类MainActivity - android ClassNotFoundException: Didn't find class MainActivity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM