You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity2022更新后安卓构建启动时出现ClassNotFoundException求助

Unity 2022升级后Android启动致命异常:Google Play Services类缺失问题

问题描述

将旧游戏Unity版本升级至2022版并更新所有相关包体后,构建可成功完成,但在Android设备启动时触发致命异常,核心报错为Google Play Services相关类无法找到,具体日志如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mycompany.mygame, PID: 1612
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/wrappers/Wrappers;
        at com.google.android.gms.ads.internal.client.zzek.attachInfo(com.google.android.gms:play-services-ads-lite@@22.3.0:1)
        at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(com.google.android.gms:play-services-ads-lite@@22.3.0:1)
        at android.app.ActivityThread.installProvider(ActivityThread.java:7724)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:7202)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7070)
        at android.app.ActivityThread.access$1500(ActivityThread.java:263)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2013)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:8164)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.wrappers.Wrappers" on path: DexPathList[[zip file "/data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/lib/arm64, /data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        ... 13 more
E/AppLovinSdk: [DataCollector] Could not collect Google Advertising ID - this will negatively impact your eCPMs! Please integrate the Google Play Services SDK into your application. More info can be found online at http://developer.android.com/google/play-services/setup.html. If you're sure you've integrated the SDK and are still seeing this message, you may need to add a ProGuard exception: -keep public class com.google.android.gms.** { public protected *; }
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/Preconditions;
        at com.google.android.gms.ads.identifier.AdvertisingIdClient.<init>(com.google.android.gms:play-services-ads-identifier@@17.1.0:2)
        at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(com.google.android.gms:play-services-ads-identifier@@17.1.0:1)
        at com.applovin.impl.sdk.utils.d.collectGoogleAdvertisingInfo(SourceFile:173)
        at com.applovin.impl.sdk.utils.d.c(SourceFile:142)
        at com.applovin.impl.sdk.utils.d.b(SourceFile:88)
        at com.applovin.impl.sdk.utils.d.a(SourceFile:52)
        at com.applovin.impl.sdk.utils.j$1.run(SourceFile:37)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.Preconditions" on path: DexPathList[[zip file "/data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/lib/arm64, /data/app/~~wWMnafso-cl80rzr01yToQ==/com.mycompany.mygame-memj5xJRNWIrb26_QayQTQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        ... 8 more
E/AppLovinSdk: [DataCollector] Unable to determine if Fire OS limited ad tracking is turned on
    android.provider.Settings$SettingNotFoundException: limit_ad_tracking
        at android.provider.Settings$Secure.getIntForUser(Settings.java:5702)
        at android.provider.Settings$Secure.getInt(Settings.java:5692)
        at com.applovin.impl.sdk.utils.d.collectFireOSAdvertisingInfo(SourceFile:219)
        at com.applovin.impl.sdk.utils.d.c(SourceFile:147)
        at com.applovin.impl.sdk.utils.d.b(SourceFile:88)
        at com.applovin.impl.sdk.utils.d.a(SourceFile:52)
        at com.applovin.impl.sdk.utils.j$1.run(SourceFile:37)
        at java.lang.Thread.run(Thread.java:923)

当前使用的ProGuard配置文件:

-keep class com.google.unity.** {
   *;
}
-keep public class com.google.android.gms.ads.**{
   public *;
}
-keep public class com.google.ads.**{
   public *;
}
-keepattributes *Annotation*
-dontobfuscate

-keep class com.google.android.gms.games.leaderboard.** { *; }
-keep class com.google.android.gms.games.snapshot.** { *; }
-keep class com.google.android.gms.games.achievement.** { *; }
-keep class com.google.android.gms.games.event.** { *; }
-keep class com.google.android.gms.games.stats.** { *; }
-keep class com.google.android.gms.games.* { *; }
-keep class com.google.android.gms.common.api.ResultCallback { *; }
-keep class com.google.android.gms.signin.** { *; }
-keep class com.google.android.gms.dynamic.** { *; }
-keep class com.google.android.gms.dynamite.** { *; }
-keep class com.google.android.gms.tasks.** { *; }
-keep class com.google.android.gms.security.** { *; }
-keep class com.google.android.gms.base.** { *; }
-keep class com.google.android.gms.actions.** { *; }
-keep class com.google.games.bridge.** { *; }
-keep class com.google.android.gms.common.ConnectionResult { *; }
-keep class com.google.android.gms.common.GooglePlayServicesUtil { *; }
-keep class com.google.android.gms.common.api.** { *; }
-keep class com.google.android.gms.common.data.DataBufferUtils { *; }
-keep class com.google.android.gms.nearby.** { *; }
-keep class com.google.android.gms.common.** { *; }
-keep class com.google.android.gms.common.internal.Preconditions { *; }

-keep public class com.google.android.gms.** { public protected *; }

解决方案

1. 统一Google Play Services包版本

日志中play-services-ads-lite版本为22.3.0,play-services-ads-identifier为17.1.0,版本差异过大导致依赖类不兼容。需将所有com.google.android.gms相关包升级至同一大版本(例如22.x系列):

  • 在Unity Package Manager中找到所有Google Play Services相关包,统一版本号。
  • 使用Google Play Services Resolver工具重新解析依赖,确保所有包版本同步。

2. 完善ProGuard规则

添加缺失类的保护规则,避免ProGuard误删:

# 新增缺失类的保护规则
-keep class com.google.android.gms.common.wrappers.** { *; }
-keep class com.google.android.gms.common.internal.** { *; }

确保-keep public class com.google.android.gms.** { public protected *; }规则位于配置文件末尾,覆盖所有子包,避免被更具体的规则覆盖。

3. 检查Unity Android构建配置

  • 打开Player Settings > Publishing Settings,确认"Custom ProGuard File"已勾选,并指向当前配置文件路径。
  • 确保"Minify"选项设置为"ProGuard",保证配置文件被正确应用。
  • 删除项目根目录下的Library文件夹,重新构建项目,让Unity重新下载并同步所有依赖包。

4. 启用MultiDex(针对Android 6.0以下设备)

如果目标设备包含Android 6.0(API 23)以下版本,需在Player Settings > Publishing Settings中开启"Enable MultiDex"选项,避免Dex方法数限制导致必要类未被打包进主Dex文件。

内容的提问来源于stack exchange,提问作者Gag Baghdasaryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:37:04