NoClassDefFoundError возникает при применении Android Multidex - PullRequest
0 голосов
/ 04 июня 2019

Строка метода моего приложения получила 65536, поэтому я применил Multidex.Код, который я написал для применения Multidex, выглядит следующим образом.

buildscript {
repositories {
    flatDir {
        dirs 'libs/lib'
    }
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath ':dexguard:'
    classpath 'io.fabric.tools:gradle:1.27.1'
}
}

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

apply plugin: 'com.android.application'
apply plugin: 'dexguard'
apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.kihno.kihnoplay"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 7532
        versionName "1.984"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
        ndk {
            abiFilters "armeabi"
        }
    }
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            useProguard false
            shrinkResources false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            proguardFile getDefaultDexGuardFile('dexguard-debug.pro')
            proguardFile 'proguard-rules.pro'
        }
        release {
            debuggable false
            minifyEnabled true
            useProguard true
            shrinkResources false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            proguardFile getDefaultDexGuardFile('dexguard-release.pro')
            proguardFile 'proguard-rules.pro'
        }
        china {
            debuggable false
            minifyEnabled true
            useProguard true
            shrinkResources false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            proguardFile getDefaultDexGuardFile('dexguard-release.pro')
            proguardFile 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.ssomai:android.scalablelayout:2.1.3'
    testImplementation 'junit:junit:4.12'
    testImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:support-v13:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:percent:28.0.0'
    implementation 'com.android.support:support-media-compat:28.0.0'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    // JSON Parsing
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.github.bumptech.glide:glide:3.8.0'
    implementation 'com.github.omadahealth:swipy:1.2.3@aar'
    // Live JS Bridge 라이브러리
    implementation 'com.github.wendux:WebViewJavascriptBridge:master-SNAPSHOT'
    // Socket IO
    implementation('io.socket:socket.io-client:1.0.0') {
        // excluding org.json which is provided by Android
        exclude group: 'org.json', module: 'json'
    }
    implementation 'com.github.ybq:Android-SpinKit:1.2.0'
    // 커스텀 qr 리더 라이브러리
    implementation 'com.journeyapps:zxing-android-embedded:3.0.3@aar'
    implementation 'com.google.zxing:core:3.3.0'
    // 크롬 캐스트 라이브러리
    implementation 'com.android.support:mediarouter-v7:28.0.0'
    // Firebase crashlytics
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.google.android.gms:play-services-cast-framework:16.1.2'
    implementation 'com.google.android.gms:play-services-analytics:16.0.4'
    // FFMpeg
    implementation 'com.writingminds:FFmpegAndroid:0.3.2'
    // 새로운 슬라이드 이미지 라이브러리
    implementation 'com.yarolegovich:discrete-scrollview:1.4.7'
    // SNS GiraffePlayer2 커스텀화
    implementation 'com.github.tcking:viewquery:1.6'
    implementation 'com.github.tcking:ijkplayer-java:0.8.8'
    implementation 'com.github.tcking:ijkplayer-armv7a:0.8.8'
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.9@aar') {
        transitive = true;
    }
    // Dot Indicator
    implementation 'com.romandanylyk:pageindicatorview:1.0.0@aar'
    implementation 'me.omidh:liquidradiobutton:1.0.01'
    implementation 'com.getkeepsafe.taptargetview:taptargetview:1.12.0'
    implementation 'de.hdodenhof:circleimageview:3.0.0'
    implementation 'com.github.gsotti:EqualizerView:v0.2'
    implementation 'com.scottyab:rootbeer-lib:0.0.7'
    implementation 'com.android.support:multidex:1.0.3'
}

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

Это мой код app / build.gradle.

public class AppController extends MultiDexApplication { ... }

Это код моего класса Application.

<application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:allowClearUserData="true"
        android:banner="@drawable/icon_tv"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme"
        android:vmSafeMode="true"
        tools:replace="android:allowBackup">

Это мой код манифеста.

После применения и компиляции, как указано выше, я получаю следующую ошибку.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.kihno.kihnoplay, PID: 31582
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/R$string;
        at com.google.android.gms.common.internal.StringResourceValueReader.<init>(Unknown Source:4)
        at com.google.firebase.FirebaseOptions.fromResource(com.google.firebase:firebase-common@@16.0.2:160)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@16.0.2:301)
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(com.google.firebase:firebase-common@@16.0.2:53)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1925)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1900)
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(com.google.firebase:firebase-common@@16.0.2:47)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6572)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6127)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6037)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.R$string" on path: DexPathList[[zip file "/data/app/com.kihno.kihnoplay-VqxiJ_TyyN3-XKwP3gSXGw==/base.apk"],nativeLibraryDirectories=[/data/app/com.kihno.kihnoplay-VqxiJ_TyyN3-XKwP3gSXGw==/lib/arm, /data/app/com.kihno.kihnoplay-VqxiJ_TyyN3-XKwP3gSXGw==/base.apk!/lib/armeabi, /system/lib, /system/vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.google.android.gms.common.internal.StringResourceValueReader.<init>(Unknown Source:4) 
        at com.google.firebase.FirebaseOptions.fromResource(com.google.firebase:firebase-common@@16.0.2:160) 
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@16.0.2:301) 
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(com.google.firebase:firebase-common@@16.0.2:53) 
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1925) 
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1900) 
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(com.google.firebase:firebase-common@@16.0.2:47) 
        at android.app.ActivityThread.installProvider(ActivityThread.java:6572) 
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6127) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6037) 
        at android.app.ActivityThread.-wrap1(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6938) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
D/libEGL: loaded /vendor/lib/egl/libGLES_mali.so
Application terminated.

Я думаю, что есть некоторые конфликты с библиотеками поддержки Android.Но я не знаю, как отследить эти проблемы.

Кто-нибудь знает, что вызывает эту ошибку и как ее исправить?Я хотел бы, чтобы вы сообщили мне, если у вас есть идеи.Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Не забудьте исключить firebase в файле proguard-rules.pro.

чтобы исключить вещи в proguard.Вы можете использовать следующее:

add

-keep class com.google.firebase.** { *; }
0 голосов
/ 04 июня 2019

Сделать все зависимости до последней. Например, Firebase и все

...