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

升级API33后Xamarin.Android应用DeepLink失效:无法找到MainActivity

解决方案

1. 移除AndroidManifest.xml中手动声明的MainActivity条目

Xamarin.Android会通过Activity特性自动生成对应的Manifest条目,你手动添加的.MainActivity条目会和自动生成的条目冲突,导致出现两个不同类名的MainActivity(一个是你写的.MainActivity,另一个是Xamarin自动生成的crc64xxxx.MainActivity),这是异常的核心原因。

删除Manifest中这段代码:

<activity android:name=".MainActivity" android:exported="true">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW"/>
        ...
    </intent-filter>
</activity>

2. 在MainActivity的特性中显式指定类名、Exported属性及IntentFilter

把IntentFilter直接通过特性添加到MainActivity上,同时指定固定的类名,避免Xamarin自动生成crc64前缀的类名:

[Activity(
    ScreenOrientation = ScreenOrientation.Portrait, 
    NoHistory = true, 
    MainLauncher = true,
    Name = ".MainActivity", // 显式指定类名,和DeepLink期望的一致
    Exported = true)] // API33要求有IntentFilter的Activity必须显式设置Exported=true
[IntentFilter(
    new[] { Android.Content.Intent.ActionView },
    AutoVerify = true,
    DataSchemes = new[] { "your-deeplink-scheme" }, // 替换成你的DeepLink Scheme
    DataHost = "your-deeplink-host", // 替换成你的DeepLink Host
    Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable })]
public class MainActivity : AppCompatActivity
{
    ...
}

3. 清理并重建项目

  • 右键项目 → 清理
  • 删除项目根目录下的bin和obj文件夹
  • 重新生成解决方案,确保Manifest是Xamarin自动生成的正确版本

4. 调整ProGuard/R8配置(如果启用)

如果你的项目启用了代码混淆,添加以下规则避免MainActivity被混淆:

-keep class PACKAGENAME.MainActivity { *; }

将PACKAGENAME替换成你的应用实际包名。

问题说明

日志中出现的crc645ff435851f1c2612.MainActivity是Xamarin自动生成的类名,当你没有通过Name特性指定固定类名时,Xamarin会为了避免类名冲突生成带crc64前缀的类名,而你手动在Manifest中声明的是.MainActivity,导致DeepLink的Intent找不到正确的Activity,同时触发ClassNotFoundException。

内容的提问来源于stack exchange,提问作者Pavel Derevyankin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:10:32