Xamarin.Android: 无法实例化 activity ComponentInfo
Xamarin.Android: Unable to instantiate activity ComponentInfo
我在 Android 上尝试通过短信 URL 启动 Xamarin 表单应用程序时收到此错误。我一直在按照 THIS 文章中提到的步骤进行操作。
这里是我的应用节点AppManifest.xml
<application android:label="Label A">
<activity android:icon="@drawable/Icon" android:label="LabelB" android:name=".MainActivity">
<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="superduperapp" />
</intent-filter>
</activity>
</application>
根据这篇文章,我需要对 Intent 对象做一些事情才能触发 OnCreate 覆盖,但我认为我没有将某些东西与我的清单和我创建的 class 的命名约定相匹配下面。
[Activity(Label = "urlentryclass")]
public class OpenFromURI : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Intent outsideIntent = Intent;
var x = Intent.Data.EncodedAuthority;
}
}
因此,将上述代码添加到我的 xamarin 解决方案后,我还有一个包含以下代码的网页..
<a href="superduperapp://QueryStringParamsGoHere"></a>
当我从移动浏览器中点击上面的 link 时,它会触及移动应用程序,因为我收到以下错误
MyApp.Mobile.Droid.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "MyApp.Mobile.Droid.MainActivity" on path: DexPathList[[zip file "/data/app/MyApp.Mobile.Droid-1/base.apk"],nativeLibraryDirectories=[/data/app/MyApp.Mobile.Droid-1/lib/arm64, /data/app/MyApp.Mobile.Droid-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]] occurred
MyApp.Mobile.Droid.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "MyApp.Mobile.Droid.MainActivity"
Xamarin.Android
,默认情况下,使用基于 MD5 的 class 名称生成 Java 包装器以避免 Java class 名称冲突,例如:
md579731053346ff64fcf21847b09163ce1.MainActivity
您在清单中硬编码了 android:name=".MainActivity"
,但生成的 class 默认是基于 MD5 的。
打开您的 MainActivity
并在 MainActvity
class 的 ActivityAttribute
中添加一个 完全限定名称 该属性的 Name
参数,这将强制 Xamarin.Android
构建过程使用您选择的 Java-class 名称与基于 MD5 的名称,因此它将匹配您的清单条目。
示例:
[Activity(Name = "MyApp.Mobile.Droid.MainActivity", Label = "MySuperDuperApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
~~~
我在 Android 上尝试通过短信 URL 启动 Xamarin 表单应用程序时收到此错误。我一直在按照 THIS 文章中提到的步骤进行操作。
这里是我的应用节点AppManifest.xml
<application android:label="Label A">
<activity android:icon="@drawable/Icon" android:label="LabelB" android:name=".MainActivity">
<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="superduperapp" />
</intent-filter>
</activity>
</application>
根据这篇文章,我需要对 Intent 对象做一些事情才能触发 OnCreate 覆盖,但我认为我没有将某些东西与我的清单和我创建的 class 的命名约定相匹配下面。
[Activity(Label = "urlentryclass")]
public class OpenFromURI : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Intent outsideIntent = Intent;
var x = Intent.Data.EncodedAuthority;
}
}
因此,将上述代码添加到我的 xamarin 解决方案后,我还有一个包含以下代码的网页..
<a href="superduperapp://QueryStringParamsGoHere"></a>
当我从移动浏览器中点击上面的 link 时,它会触及移动应用程序,因为我收到以下错误
MyApp.Mobile.Droid.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "MyApp.Mobile.Droid.MainActivity" on path: DexPathList[[zip file "/data/app/MyApp.Mobile.Droid-1/base.apk"],nativeLibraryDirectories=[/data/app/MyApp.Mobile.Droid-1/lib/arm64, /data/app/MyApp.Mobile.Droid-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]] occurred
MyApp.Mobile.Droid.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "MyApp.Mobile.Droid.MainActivity"
Xamarin.Android
,默认情况下,使用基于 MD5 的 class 名称生成 Java 包装器以避免 Java class 名称冲突,例如:
md579731053346ff64fcf21847b09163ce1.MainActivity
您在清单中硬编码了 android:name=".MainActivity"
,但生成的 class 默认是基于 MD5 的。
打开您的 MainActivity
并在 MainActvity
class 的 ActivityAttribute
中添加一个 完全限定名称 该属性的 Name
参数,这将强制 Xamarin.Android
构建过程使用您选择的 Java-class 名称与基于 MD5 的名称,因此它将匹配您的清单条目。
示例:
[Activity(Name = "MyApp.Mobile.Droid.MainActivity", Label = "MySuperDuperApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
~~~