Xamarin.Android运行应用时出现java.lang.NoClassDefFoundError错误求助
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/R$string;错误 嘿,这个错误我之前在集成Google Play Services的时候也踩过坑!本质上是你的项目找不到Google Play Services相关的资源类,大概率是依赖配置或者构建缓存的问题,给你几个亲测有效的解决步骤:
统一Google Play Services NuGet包版本
先检查你项目里所有和Google Play Services沾边的NuGet包(比如Xamarin.GooglePlayServices.Measurement、Xamarin.GooglePlayServices.Base这类),确保它们的版本完全一致。不同版本的包很容易引发资源冲突,建议要么统一升级到最新稳定版,要么降级到同一个兼容版本。彻底清理并重建项目
有时候构建缓存会残留旧的资源文件,导致冲突。按这个流程来:- 右键解决方案 → 清理解决方案
- 手动删除项目目录下的
bin和obj文件夹 - 右键解决方案 → 重建解决方案
补全AndroidManifest.xml的必要配置
检查你的AndroidManifest.xml里有没有添加Google Play Services的版本元数据,如果没有的话,加上这一行:<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />这行配置会自动引用Google Play Services的版本资源,避免找不到相关类的问题。
启用MultiDex(针对API 21以下的项目)
如果你的应用目标API低于21,默认不支持MultiDex,而Google Play Services的类数量可能超过了单个DEX文件的方法数限制。可以这样开启:- 右键Android项目 → 属性 → Android选项
- 勾选“启用MultiDex”
同时要确保你的MainApplication类继承自MultiDexApplication,或者在Application的attachBaseContext方法里调用MultiDex.install(this)。
调整ProGuard/R8混淆规则
要是你开启了代码混淆,可能不小心把Google Play Services的资源类给混淆掉了。在ProGuard配置文件里加上这些规则:-keep class com.google.android.gms.** { *; } -keep class com.google.android.gms.R$* { *; }这样能保护Google Play Services的类和资源不被混淆处理。
内容的提问来源于stack exchange,提问作者Lennie

