当前位置: 首页 > 知识库问答 >
问题:

Xamarin Android:java.lang.ClassNotFoundException启动第二个活动

李勇
2023-03-14

我刚开始使用Xamarin和VisualStudio2017在C#中为Android开发。与Windows生态系统完全不同的范例…Target是一个商业应用程序,将有特定的受众,但在我深入了解之前,我只是试图学习绳子,理解概念和程序…

因此,我从最简单的app开始,使用空白模板。这将创建一个项目,其中包含一个活动(mainactivity.cs)、两个资源(resources\layout\main.axml,res..\values\strings.xml)和一些其他项(例如properties\androidmanifest.xml、gettingstarted.xamarin等)。

我在附加的Blu Vivo 5 Mini(Android6.0-API23)上编译并运行它。到目前为止还好!

接下来是我第一次尝试玩任何东西…令人惊讶的结局很糟糕。

1.重命名MainActivity导致:

未处理的异常:java.lang.runtimeException:无法实例化活动ComponentInfo{app4.app4/md54bce54f405542800672a5cecd6c84592.mainActivity}:java.lang.ClassNotFoundException:未在路径:dexpathList[[zip文件“/data/app/app4.app4-1/base.apk”]上找到类“md54bce54f405542800672a5cecd6c84592.mainActivity”,meabi-v7a,/vendor/lib,/system/lib]]

名称mainactivity是某种预定义的入口点吗,类似于C/C++的main()
我没有看到任何关于它的引用。但是[activity(mainLauncher=true)]属性有什么意义,如果不是为了标记main/startup活动呢?
好吧,现在我把它重命名了。重新编译,运行…好的。

2.删除gettingstarted.xamarin文件(因为它只是每个项目中都有的链接列表)似乎会导致同样的问题!?那只是一个HTML页面,那么什么给了??

好吧,我不会再碰这个文件了。关闭解决方案,重新创建项目,运行…好的。

3.将properties\AssemblyInfo.cs修改为:[Assembly:AssemblyVersion(“1.0.*”)](以匹配其他项目的构建版本编号架构)会导致同样的问题!..
(令人惊讶的是,修改AssemblyFileVersion没有坏影响--它会运行;也许Android端被使用*-通配符的结果冒犯了?但为什么?..)

好吧,我将放弃所有艰苦学习的努力来保持源代码的组织性和可维护性。
关闭解决方案,重新创建项目,运行…好的。

4.重命名main布局(为actmain甚至mainactivity-以匹配活动名称)会导致另一个类似的启动异常。

“傻瓜!”我说,又转过身来。重新编译,运行…好的。我现在应该学会了,对吧?

让我感到惊讶的是,代码总是被编译的,所有这些问题都在运行时出现!?!?

好吧,我放弃,我不会修改Xamarin或VS预先生成的任何东西。为了使实验更加干净,我重新启动VS,删除所有以前的项目并创建一个新的项目--让我们用一个空白模板重新开始。

现在我添加了一个新活动,并给它命名为actsettings。是的,我喜欢匈牙利符号,如果你想的话,讨厌我,但它帮助我保持我的对象有条理。但这是重点之外的:现在我应该可以自由地给一个新的类命名任何我想要的东西,不是吗?

02-02 13:47:11.686 W/monodroid( 5867): JNIEnv.FindClass(Type) caught unexpected exception: Java.Lang.ClassNotFoundException: md54e704423a01db64492900da8de435cc0.ActSettings ---> Java.Lang.ClassNotFoundException: Didn't find class "md54e704423a01db64492900da8de435cc0.ActSettings" on path: DexPathList[[zip file "/data/app/J7980ca.J7980ca-1/base.apk"],nativeLibraryDirectories=[/data/app/J7980ca.J7980ca-1/lib/arm, /data/app/J7980ca.J7980ca-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
02-02 13:47:11.686 W/monodroid( 5867):    --- End of inner exception stack trace ---
02-02 13:47:11.686 W/monodroid( 5867):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <657aa8fea4454dc898a9e5f379c58734>:0 
02-02 13:47:11.686 W/monodroid( 5867):   at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <e736913786c2475188869561ae512b72>:0 
02-02 13:47:11.686 W/monodroid( 5867):   at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in <0fb41b3e3d7346ce92c4a742b20078ff>:0 
02-02 13:47:11.686 W/monodroid( 5867):   at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00017] in <0fb41b3e3d7346ce92c4a742b20078ff>:0 
02-02 13:47:11.686 W/monodroid( 5867):   at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x0003d] in <0fb41b3e3d7346ce92c4a742b20078ff>:0 
02-02 13:47:11.686 W/monodroid( 5867):   at Android.Runtime.JNIEnv.FindClass (System.Type type) [0x00015] in <0fb41b3e3d7346ce92c4a742b20078ff>:0 
02-02 13:47:11.686 W/monodroid( 5867):   --- End of managed Java.Lang.ClassNotFoundException stack trace ---
02-02 13:47:11.686 W/monodroid( 5867): java.lang.ClassNotFoundException: md54e704423a01db64492900da8de435cc0.ActSettings
02-02 13:47:11.686 W/monodroid( 5867):  at java.lang.Class.classForName(Native Method)
02-02 13:47:11.687 W/monodroid( 5867):  at java.lang.Class.forName(Class.java:324)
02-02 13:47:11.687 W/monodroid( 5867):  at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
02-02 13:47:11.687 W/monodroid( 5867):  at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30)
02-02 13:47:11.687 W/monodroid( 5867):  at android.view.View.performClick(View.java:5265)
02-02 13:47:11.687 W/monodroid( 5867):  at android.view.View$PerformClick.run(View.java:21534)
02-02 13:47:11.687 W/monodroid( 5867):  at android.os.Handler.handleCallback(Handler.java:815)
02-02 13:47:11.687 W/monodroid( 5867):  at android.os.Handler.dispatchMessage(Handler.java:104)
02-02 13:47:11.687 W/monodroid( 5867):  at android.os.Looper.loop(Looper.java:207)
02-02 13:47:11.687 W/monodroid( 5867):  at android.app.ActivityThread.main(ActivityThread.java:5765)
02-02 13:47:11.687 W/monodroid( 5867):  at java.lang.reflect.Method.invoke(Native Method)
02-02 13:47:11.687 W/monodroid( 5867):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
02-02 13:47:11.687 W/monodroid( 5867):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
02-02 13:47:11.687 W/monodroid( 5867): Caused by: java.lang.ClassNotFoundException: Didn't find class "md54e704423a01db64492900da8de435cc0.ActSettings" on path: DexPathList[[zip file "/data/app/J7980ca.J7980ca-1/base.apk"],nativeLibraryDirectories=[/data/app/J7980ca.J7980ca-1/lib/arm, /data/app/J7980ca.J7980ca-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
02-02 13:47:11.687 W/monodroid( 5867):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
02-02 13:47:11.687 W/monodroid( 5867):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
02-02 13:47:11.687 W/monodroid( 5867):  at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
02-02 13:47:11.688 W/monodroid( 5867):  ... 13 more
02-02 13:47:11.688 W/monodroid( 5867):  Suppressed: java.lang.ClassNotFoundException: md54e704423a01db64492900da8de435cc0.ActSettings
02-02 13:47:11.688 W/monodroid( 5867):      at java.lang.Class.classForName(Native Method)
02-02 13:47:11.688 W/monodroid( 5867):      at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
02-02 13:47:11.688 W/monodroid( 5867):      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
02-02 13:47:11.688 W/monodroid( 5867):      at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
02-02 13:47:11.688 W/monodroid( 5867):      ... 14 more
02-02 13:47:11.688 W/monodroid( 5867):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Unhandled Exception:
Java.Lang.ClassNotFoundException: md54e704423a01db64492900da8de435cc0.ActSettings occurred

而且没关系,我称之为:secondactivity也不起作用!

9.另一个问题:如何解析ClassNotFoundException?可能是最接近的,但同样,它来自2013年,标记为Java(而不是AndroidXamarin或任何与电话相关的东西)。
我完全不知道类路径在哪里,如何设置它,设置什么,最重要的是,为什么Xamarin或VisualStudio-2017一开始就不能正确地为我设置它?

我希望一个现代IDE吹捧平台支持将适当地覆盖所有基础。最终,应用程序将需要通过WiFi进行TCP/UDP通信,后台/前台服务,通知,等等。但我只是在做“你好,世界!”:O

我尝试运行(并重命名文件和类!)ActivityLifecycle示例,它启动了第二个活动,并且它工作得很好…只要我没有改变任何名字。如果我这样做-它失败了,但恢复名称使它再次工作。我找不到示例代码和我自己的代码之间有任何合理的差异,这可以解释为什么Android找不到我的第二个活动。

我做错了什么?还是不做?请救命!


共有1个答案

万博涛
2023-03-14

重命名MainActivity会导致:

未处理的异常:java.lang.RuntimeException:无法实例化活动ComponentInfo{app4.app4/MD54BCE54F405542800672A5CECD6C84592.MainActivity}:java.lang.ClassNotFoundException:未找到class......

你可以参考Jon Douglas的回答:Xamarin.Android应用程序只在clean compile上查找启动器活动。

此问题已解决,并包含在Visual Studio 15.5.5Visual Studio 15.6预览3中。

此修复程序包含的Xamarin.Android版本分别为Xamarin.Android 8.1.5.0(稳定)Xamarin.Android 8.2.0.6(预览)

将Visual Studio更新到最新版本,Visual Studio 15.5.6现在可用。

    null
 类似资料:
  • 我在一个活动中有一个列表视图,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个活动将打开,当用户点击更新按钮时,在下一个活动中标记出勤率后,第二个活动应该完成,第一个活动列表视图应该更新。 我成功地做了什么:我已经成功地标记了出席情况并更改了listview的颜色,但我在关闭第二个活动并重新启动第一个活动后这样做了。通过这种方式,由于再次开始活动,listview会得到更新。 我无法

  • 问题内容: 我正在尝试从JavaFx应用程序内部启动JavaFx应用程序,但是看起来Application.launch()只能被调用一次。这是否意味着我必须像exec(“ java …”中那样启动一个单独的JVM …还是还有另一种方法? 更多背景信息。我希望我的JavaFx应用程序能够构建和运行JavaFx应用程序。现在,它可以在内存中编译类,装入类…真的很不​​幸,不得不诉诸一切将文件写入文件

  • 我试图从JavaFx应用程序中启动JavaFx应用程序,但看起来application.launch()只能调用一次。这是否意味着我必须启动一个单独的JVM...就像在exec(“java.......或者还有其他方法吗? 作为次要问题...是否有方法打开另一个JavaFx窗口,获取stage并将其传递给我新编译和加载的应用程序子类?

  • 我想按下mainactivity中的一个按钮,该按钮将启动一个包含片段的新活动的意图。我写了一个主要的活动。带有main活动和第二个_活动按钮的xml。带有片段的xml。当我单击按钮时,第二个活动将由于xml中的片段而崩溃。我已经添加了一个标志,但它没有帮助。该应用程序的想法是通过按下主活动中的按钮,在第二个活动中获取谷歌地图。 我希望你能帮助我:/ 主要活动: 亚活性: activity_mai

  • 次要活动(通过意图向主活动发送“endpoint”字符串): 主活动(从次要活动获取字符串): 在Fragment类上,我试图在TextView上显示数据: 如何修复它并将字符串从一个活动发送到另一个活动上的片段? 下面是XML:

  • 我试图通过按cardview开始另一项活动,cardview有一个朋友查找id。但是当我写回家时。java它给了我setOnClickListener中的问题。在homeActivity中,它告诉我无法解析“homeActivity”中的方法“homeActivity”。因为