更新到 API 后得到 java.lang.NoClassDefFoundError 23

Getting java.lang.NoClassDefFoundError after updating to API 23

我正在构建一个 android 应用程序,当我构建到一半时,我使用 SDK 管理器更新了我的 SDK 版本,我还将 Android Studio 更新到 1.3.2。执行此操作后,我的应用程序在某些设备上崩溃,但不是全部。

我收到的错误是

Process: com.pickingo.fe, PID: 11543
    java.lang.NoClassDefFoundError: android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:308)
            at com.activeandroid.ReflectionUtils.getModelClasses(ReflectionUtils.java:83)
            at com.activeandroid.DatabaseHelper.onCreate(DatabaseHelper.java:46)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
            at com.activeandroid.Registry.openDatabase(Registry.java:149)
            at com.activeandroid.Registry.initialize(Registry.java:107)
            at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:8)
            at com.pickingo.fe.Application.onCreate(Application.java:25)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1034)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4605)
            at android.app.ActivityThread.access00(ActivityThread.java:148)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5312)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

这是我的 Application.java class

import android.content.Context;

import com.activeandroid.ActiveAndroid;
import com.pickingo.fe.notification.NotificationManager;
import com.pickingo.fe.preference.PreferenceManager;
import com.pickingo.fe.sync.ServerUpdatePusher;
import com.pickingo.fe.test.StoreLogcat;

public class Application extends android.app.Application {


    public static boolean init = true;

    public static final String PF_INIT = "pf_init";


    @Override
    public void onCreate() {
        super.onCreate();
        new Thread(new StoreLogcat()).start();
        Context context = getApplicationContext();
        ActiveAndroid.initialize(context);
        ServerUpdatePusher.init(context);
        NotificationManager.init(context);
        PreferenceManager.init(context);
        //GPSFetcherSingleton.init(context);


        init = false;
        android.preference.PreferenceManager
                .getDefaultSharedPreferences(context).edit().putBoolean(PF_INIT, false).apply();
    }


}

这也是我的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.x.y"
        minSdkVersion 16
        targetSdkVersion 22
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')

    compile project(':lib_MaterialDesign_EditText')
    compile project(':library_Android_Validator')
    compile project(':lib_MaterialDesign')

    compile 'com.google.code.gson:gson:2.3.1'
    compile 'com.netflix.rxjava:rxjava-core:0.+'
    compile 'com.netflix.rxjava:rxjava-android:0.+'
    compile 'de.hdodenhof:circleimageview:1.2.1'
    compile 'com.android.support:recyclerview-v7:+'
    compile 'com.google.android.gms:play-services:7.5.+'

    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.0.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    compile 'com.oguzdev:CircularFloatingActionMenu:1.0.2'
    compile 'com.android.support:appcompat-v7:22.1.1'

}

如有任何帮助,我们将不胜感激。提前致谢!!

当使用 compile 'com.android.support:recyclerview-v7:+' 时,你是说你总是想要最新版本的 RecyclerView 库。然后这会引入最新的修订版(在本例中为 23.0.1),导致您的应用程序使用 API 23 个特定版本的 RecyclerView 及其依赖项 - 即 support-v4:23.0.1,这是你的错误来自。

您可以改为声明 RecyclerView 的特定版本级别,例如:

'com.android.support:recyclerview-v7:22.+'`

如果您想保留 API 22 内置依赖项,尽管在很多情况下,根本不使用动态版本号 is a bad idea - 请考虑使用 22.2.1 最新版本API 22 版本.

FingerprintManager 在 API 23 及更高版本中受支持。您的应用的最低 SDK 支持为 15。

如果您的应用 运行 在 Android 版本早于 Marshmallow 的设备上运行,那么您需要使用 FingerprintManagerCompat 否则您将遇到上述异常。