更新Android Studio后出现IllegalAccessError

时间:2018-05-26 09:07:44

标签: android

在更新到最新的Google服务和Firebase库版本后,我之前稳定的应用程序(99.6%无崩溃用户)变得不稳定,25%的用户开始遇到崩溃。

我在我的应用程序中没有更改任何代码。我所做的唯一更改是将Grade文件更新为最新版本。我收到一个错误,我无法在任何地方找到有关在线的信息:

Exception java.lang.IllegalAccessError: com.google.android.gms.measurement.AppMeasurementService
dalvik.system.DexFile.defineClassNative (DexFile.java)
dalvik.system.DexFile.defineClass (DexFile.java:226)
dalvik.system.DexFile.loadClassBinaryName (DexFile.java:219)
dalvik.system.DexPathList.findClass (DexPathList.java:338)
dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:54)
java.lang.ClassLoader.loadClass (ClassLoader.java:511)
java.lang.ClassLoader.loadClass (ClassLoader.java:469)
android.app.ActivityThread.handleCreateService (ActivityThread.java:2859)
android.app.ActivityThread.-wrap4 (ActivityThread.java)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1427)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:148)
android.app.ActivityThread.main (ActivityThread.java:5421)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

或者像这样的各种类似的例外之一:

Exception java.lang.IllegalAccessError: Interface com.google.android.gms.internal.measurement.zzge implemented by class com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver is inaccessible (declaration of 'com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver' appears in /data/app/com.mycompanyname/base.apk)
java.lang.VMClassLoader.findLoadedClass (VMClassLoader.java)
java.lang.ClassLoader.findLoadedClass (ClassLoader.java:738)
java.lang.ClassLoader.loadClass (ClassLoader.java:363)
java.lang.ClassLoader.loadClass (ClassLoader.java:312)
android.app.ActivityThread.handleReceiver (ActivityThread.java:3299)
android.app.ActivityThread.-wrap17 ()
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1771)
android.os.Handler.dispatchMessage (Handler.java:106)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6753)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:482)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

我的顶级gradle文件中包含这些库:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'io.fabric.tools:gradle:1.25.4'
        classpath 'com.google.gms:google-services:3.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

(编辑)模型gradle:

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

android {
    compileSdkVersion 26
    buildToolsVersion '27.0.3'
    flavorDimensions "default"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    /*implementation 'com.android.support:appcompat-v7:23.4.0'*/
    implementation 'com.android.support:support-v4:26.1.0'
    implementation 'com.google.firebase:firebase-appindexing:15.0.1'
    implementation 'com.google.firebase:firebase-crash:16.0.0'
    implementation 'com.google.firebase:firebase-ads:15.0.1'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.3'
    testImplementation 'junit:junit:4.12'
}

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

升级后我遇到了Proguard的问题,所以可能与此有关。我的Proguard规则:

-dontwarn com.google.android.gms.**
-keep class com.firebase.** { *; }
-keep class com.google.android.gms.** { *; }
-keep class org.apache.** { *; }
-keep class com.android.vending.billing.**
-keepnames class com.firebase.** { *; }
-keepnames class com.google.android.gms.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }

更新:

我想也许我已经达到了我需要多索引的程度。但分析APK显示"此dex文件使用30311方法定义5112个类,并引用36641个方法。"

有趣的是,将这个新的糟糕APK与旧版本的APK进行对比,新版本还有很多图书馆,比如播放服务 - 地下室,播放服务 - gass等等。

1 个答案:

答案 0 :(得分:0)

好吧经过一些小小的研究,只有帮助我的是将谷歌播放服务更新到4.0.0 + ....