.NET MAUI Android深度链接异常:无法实例化MainActivity
.NET MAUI Android深度链接配置报错:ClassNotFoundException
点击深度链接打开应用时触发以下错误:
Java.Lang.RuntimeException: 'Unable to instantiate activity ComponentInfo{app.mydomain/MyApp.Client.MAUI.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "MyApp.Client.MAUI.MainActivity" on path: DexPathList[[zip file "/data/app/~~0C9vYHAHNOr9CaB4f63clQ==/app.mydomain-YYQ6ZPc3-KSVnF8_VcuQVQ==/base.apk"], nativeLibraryDirectories=[/data/app/~~0C9vYHAHNOr9CaB4f63clQ==/app.mydomain-YYQ6ZPc3-KSVnF8_VcuQVQ==/lib/arm64, /data/app/~~0C9vYHAHNOr9CaB4f63clQ==/app.mydomain-YYQ6ZPc3-KSVnF8_VcuQVQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]'
现有代码
MainActivity.cs
namespace MyApp.Client.MAUI { [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] [IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataScheme = "https", DataHost = "mydomain.app", DataPathPattern = "/.*", AutoVerify = true)] public class MainActivity : MauiAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); } protected override void OnResume() { base.OnResume(); Platform.OnResume(this); } protected override void OnNewIntent(Intent intent) { base.OnNewIntent(intent); var data = intent.DataString; if (intent.Action != Intent.ActionView) return; if (string.IsNullOrWhiteSpace(data)) return; var path = data.Replace(@"https://mydomain.app", ""); //todo - handle path StartActivity(typeof(MainActivity)); } }
AndroidManifest.xml中的手动配置
<activity android:name="MyApp.Client.MAUI.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="mydomain.app" android:pathPattern="/.*" /> </intent-filter> </activity>
解决步骤
移除AndroidManifest.xml中手动添加的activity配置
.NET MAUI会自动根据MainActivity类上的[Activity]和[IntentFilter]特性生成AndroidManifest.xml内容,手动重复配置会导致类名匹配冲突,保留代码中的特性即可。修复OnNewIntent中的错误逻辑
当前代码处理完链接后调用StartActivity(typeof(MainActivity))会重复启动Activity,引发不必要的错误,应改为直接处理链接导航逻辑:
protected override void OnNewIntent(Intent intent) { base.OnNewIntent(intent); var data = intent.DataString; if (intent.Action != Intent.ActionView || string.IsNullOrWhiteSpace(data)) return; var path = data.Replace(@"https://mydomain.app", ""); // 替换为实际的导航逻辑,比如跳转到对应页面 // Application.Current.MainPage?.Navigation.PushAsync(new YourTargetPage(path)); }
清理重建项目
- 右键项目选择「清理」
- 删除项目根目录下的
bin和obj文件夹 - 重新构建项目,可查看
obj\Debug\net7.0-android下自动生成的AndroidManifest.xml确认配置正确性
检查包名与命名空间一致性
确认AndroidManifest.xml根节点的package属性值和MainActivity的命名空间、应用包名保持一致,避免类查找路径错误。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

