Xamarin.Android:无法实例化ComponentInfo活动

时间:2018-04-20 04:16:03

标签: xamarin xamarin.android android-manifest applinks

尝试在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覆盖能够触发,但我认为我没有使用我的清单和我在下面创建的类的命名约定。

[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解决方案中,我还有一个网页,其中包含以下代码..

&#13;
&#13;
<a href="superduperapp://QueryStringParamsGoHere"></a>
&#13;
&#13;
&#13;

当我从我的移动浏览器点击上面的链接时,它会触及移动应用,因为我收到以下错误

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

1 个答案:

答案 0 :(得分:3)

  

MyApp.Mobile.Droid.MainActivity}:java.lang.ClassNotFoundException:未找到类“MyApp.Mobile.Droid.MainActivity”

默认情况下,

Xamarin.Android使用基于MD5的类名生成Java包装器,以避免Java类名冲突,例如:

md579731053346ff64fcf21847b09163ce1.MainActivity 

您在清单中对android:name=".MainActivity"进行了硬编码,但默认情况下生成的类将基于MD5。

打开MainActivity并在ActivityAttribute课程的MainActvity内,在Name参数中添加完全限定名称属性,这将强制Xamarin.Android构建过程使用您选择的Java类名称与基于MD5的名称,因此它将匹配您的清单条目。

实施例

[Activity(Name = "MyApp.Mobile.Droid.MainActivity", Label = "MySuperDuperApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
   ~~~