Xamarin.Android java.lang.ClassNotFoundException [英] Xamarin.Android java.lang.ClassNotFoundException

查看:114
本文介绍了Xamarin.Android java.lang.ClassNotFoundException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Intent和Action.Send从外部应用程序接收文件.我在选择器列表中选择了我的应用,然后尝试启动的应用却崩溃了:

I'm trying to receive files from external apps using Intent and Action.Send. I chose my app at chooser list and then app trying to start but it crashes:

java.lang.ClassNotFoundException:未找到类 路径上的"net.inlu.Incrypta.MainActivity":DexPathList [[zip文件 "/data/app/net.inlu.Incrypta-1.apk"],nativeLibraryDirectories=[/data/app-lib/net.inlu.Incrypta-1, /vendor/lib,/system/lib]] dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在java.lang.ClassLoader.loadClass(ClassLoader.java:497)在 java.lang.ClassLoader.loadClass(ClassLoader.java:457)在 android.app.Instrumentation.newActivity(Instrumentation.java:1084)在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248) 在android.app.ActivityThread.access $ 800(ActivityThread.java:138)处 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1199) 在android.os.Handler.dispatchMessage(Handler.java:102)处 android.os.Looper.loop(Looper.java:136)在 android.app.ActivityThread.main(ActivityThread.java:5054)位于 java.lang.reflect.Method.invokeNative(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:515)在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:788) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)处 dalvik.system.NativeStart.main(本机方法)

java.lang.ClassNotFoundException: Didn't find class "net.inlu.Incrypta.MainActivity" on path: DexPathList[[zip file "/data/app/net.inlu.Incrypta-1.apk"],nativeLibraryDirectories=[/data/app-lib/net.inlu.Incrypta-1, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at android.app.Instrumentation.newActivity(Instrumentation.java:1084) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248) at android.app.ActivityThread.access$800(ActivityThread.java:138) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5054) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) at dalvik.system.NativeStart.main(Native Method)

我的清单文件:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="6" android:versionName="1.0.1" package="net.inlu.Incrypta" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <application android:allowBackup="true" android:label="@string/app_name" android:logo="@drawable/Logo" android:theme="@style/StartTheme" android:windowSoftInputMode="stateVisible|adjustPan" android:icon="@drawable/Logo">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
        </activity>
    </application>
</manifest>

我已经在Android上看到了很多这样的问题,但是并没有发现Xamarin.Android的确切支持.可能有人知道如何解决它.

I've seen a lot of such issues for Android, but didn't find anuthing exactly for Xamarin.Android. May be anyone knows how to fix it.

MainActivity:

MainActivity :

namespace Android.App
{
    [Activity (MainLauncher = true, Icon = "@drawable/Logo", NoHistory = true)]
    public class MainActivity : Activity
    {
        protected override async void OnCreate (Bundle savedInstanceState)
        {
            BootStrapper.RegisterDependencies(new IoCModule());

            Intent intent = Intent;
            string action = intent.Action;
            string type = intent.Type;

            //Xamarin.Insights.Initialize (XamarinInsights.ApiKey, this);
            base.OnCreate (savedInstanceState);
            //SetContentView(Resource.Layout.splash);
            try
            {
                var srv= BootStrapper.Container.Resolve<IServiceManager>();
                var credentials = await srv.ConnectAsync();
                StartActivity(credentials != null ? typeof(BaseActivity) : typeof(LoginActivity));
            }
            catch (Exception)
            {
                StartActivity(typeof(LoginActivity));
            }
        }
    }
} 

推荐答案

尝试显式更改MainActivity的ACW(Android可调用包装器)名称.这可以通过多种方法完成,但是最简单的方法是使用[Activity]属性中的Name属性指定名称.然后,您可以将该名称设置为要查找的名称.

Try to explicitly change the ACW(Android Callable Wrapper) name of your MainActivity. This can be done multiple ways, but the easiest way would be to use the Name property inside the [Activity] attribute to specify a name. You would then set that name to the name it's looking for.

[Activity(Name="net.inlu.incrypta.MainActivity")]

注意:请确保您的名称空间遵循Java约定,这是完全限定的名称.

Note: Ensure your namespace follows Java conventions in the sense of a fully qualified name.

EX: com.my.package.ClassName

EX: com.my.package.ClassName

https://developer.xamarin.com /releases/android/xamarin.android_5/xamarin.android_5.1/#Android_Callable_Wrapper_Naming

这篇关于Xamarin.Android java.lang.ClassNotFoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆