android studio中的奇怪错误,网上没有类似的东西,也不知道原因

Posted

技术标签:

【中文标题】android studio中的奇怪错误,网上没有类似的东西,也不知道原因【英文标题】:Strange error in android studio, nothing similar online and no idea of the cause 【发布时间】:2020-11-26 02:01:41 【问题描述】:

我是一个新的 android 开发者,每次尝试运行模拟器来测试我的应用程序时,我都会收到以下错误:

2020-08-05 15:08:30.625 8361-8361/com.example.tender E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tender, PID: 8361
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzx;
    at com.google.android.gms.measurement.internal.zzw.zzaT(Unknown Source:0)
    at com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(Unknown Source:4)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2388)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2358)
    at android.app.ActivityThread.installProvider(ActivityThread.java:7239)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:6780)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6697)
    at android.app.ActivityThread.access$1300(ActivityThread.java:237)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzx" on path: DexPathList[[zip file "/data/app/~~7yQ-4JW3qh-QJVNZiOJdsA==/com.example.tender-hor871ahRQoy1oE54-r8dg==/base.apk"],nativeLibraryDirectories=[/data/app/~~7yQ-4JW3qh-QJVNZiOJdsA==/com.example.tender-hor871ahRQoy1oE54-r8dg==/lib/x86, /system/lib, /system_ext/lib, /product/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.google.android.gms.measurement.internal.zzw.zzaT(Unknown Source:0) 
    at com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(Unknown Source:4) 
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2388) 
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2358) 
    at android.app.ActivityThread.installProvider(ActivityThread.java:7239) 
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:6780) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6697) 
    at android.app.ActivityThread.access$1300(ActivityThread.java:237) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

知道是什么原因造成的吗?我在过去两天恢复了我的更改无济于事,并搜索了谷歌,没有人遇到类似的情况。如果有人可以理解错误,请提供帮助。就上下文而言,我最近将 Google Places SDK 添加到我的应用程序中,但即使我注释掉与此相关的所有代码也会出现此错误。

编辑:根据要求,这是我的模块级 build.gradle 文件:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig 
        applicationId "com.example.tender"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    

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


dependencies 
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services:8.4.0'
    implementation 'com.google.android.libraries.places:places:2.2.0'

【问题讨论】:

【参考方案1】:

我还不能发表评论,但我假设您在构建时使用的是 R8 或 Proguard,它会混淆 Google Places SDK 中它试图在运行时通过反射找到的类/字段/接口等。

找到该库的相关规则以包含在您的 R8/Proguard 规则文件中,以便在构建时它们不会被混淆。

编辑:另外,您是否在此应用程序中使用了 multidex?

EDIT2:在 cmets 中与 OP 合作 - 问题似乎源于将旧的通用捆绑“play-services”库与特定的 play-services 库(如地图和地方)。删除捆绑的库解决了他们的问题。

【讨论】:

我使用的是最低 sdk 版本 21,因此内置了 multidex。我必须在添加位置依赖项后将其更改为此,因为它包含的方法比单个 dex 文件中的方法要多。实际上,据我所知,我并没有使用 R8 或 Proguard,只是使用了 multidex。这个问题会不会是multidex引起的? 您介意编辑您的帖子以包含您的模块级 build.gradle (app/build.gradle) 吗? 好的,所以implementation 'com.google.android.gms:play-services 是使用播放服务库的旧方式。它引入了所有其他游戏服务库,如地图和地点(您也直接引入)。我很惊讶即使在没有重复类错误的情况下构建。删除该通用依赖项并仅提取您需要的特定播放服务库(完整列表请参见此处:developers.google.com/android/reference/packages)。先这样做,看看它是否能解决您的问题。 这似乎已经解决了,谢谢大家的帮助 没问题,我很高兴能帮上忙。随意接受这个作为正确答案。我还将对其进行更新,以便将来的人们不知道确切的问题是什么。

以上是关于android studio中的奇怪错误,网上没有类似的东西,也不知道原因的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的gradle错误android studio

Android studio,构建kotlin时出现奇怪错误:生成错误代码

Android Studio 1.0.1在很多地方显示了奇怪的文字(发现:Darcula主题中的bug)

Android Studio - build.gradle 未捕获翻译错误 ExecutionException OutOfMemory 中的问题

奇怪的错误 java.lang.reflect.Method.invokeNative(Native Method) Android Studio 请回答

不在 UI 中的 Visual Studio 构建错误