Xamarin Android:Java.Lang.ClassNotFoundException启动第二个活动

时间:2018-02-02 21:40:06

标签: xamarin.android visual-studio-2017

我刚刚开始使用Xamarin和VisualStudio 2017在C#中开发Android。与Windows生态系统完全不同的范例.Target是一个商业应用程序,它将拥有特定的受众,但在我深入了解之前我会# 39;我只是想学习绳索,理解概念和程序..

因此,我从最简单的应用程序开始,使用空白模板。这导致创建一个带有活动的项目(MainActivity.cs)和2个资源(Resources \ layout \ Main.axml,Res .. \ values \ Strings.xml)以及其他一些项目(例如Properties \ AndroidManifest.xml) ,GettingStarted.Xamarin等。)。

我在附加的BLU Vivo 5 Mini (Android 6.0 - API 23)上编译并运行它。到目前为止一切都很好!

接下来是我第一次尝试玩任何东西......令人惊讶地结束了。

1. 重命名MainActivity会导致:

Unhandled Exception: Java.Lang.RuntimeException: Unable to instantiate activity ComponentInfo{App4.App4/md54bce54f405542800672a5cecd6c84592.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "md54bce54f405542800672a5cecd6c84592.MainActivity" on path: DexPathList[[zip file "/data/app/App4.App4-1/base.apk"],nativeLibraryDirectories=[/data/app/App4.App4-1/lib/arm, /data/app/App4.App4-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]

名称MainActivity是某种预定义的入口点,类似于C / C ++' main()吗? 我还没有看到任何提及。但是 [Activity(MainLauncher=true)]属性是什么,如果没有标记主要/启动活动? 很好,现在我重新命名。重新编译,运行..确定。

2。删除GettingStarted.Xamarin文件('因为它只是一个链接列表,存在于每个项目中)似乎导致同样的问题!?这只是一个HTML页面,所以给出了什么?

很好,我再也不会触摸这个文件了。关闭解决方案,重新创建项目,运行..确定。

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

很好,我会放弃所有最好的学习努力,以保持源代码的有序和可维护。
关闭解决方案,重新创建项目,运行..确定。

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

"傻瓜!",我说,然后回复。重新编译,运行..好吧。我现在应该学习,对吗?

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

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

5. 继续进入应用程序的入口点将是一个登录"页面",所以我添加了一些TextView,{{1} }和EditText控件ButtonAXML Layouts 按钮不做任何事情 - 代码是空的。编译,运行..到目前为止这么好。可爱!

现在我添加一个新的Activity并为其命名Main.axml。是的,我喜欢匈牙利的符号,如果你愿意,就恨我,但这有助于我保持我的对象井然有序。但是除了这一点之外:此时我应该可以自由地命名一个我想要的新课程,不应该吗?

接下来,我创建一个相应的布局,[显然]将其命名为ActSettings。也可以在其中插入一些控件。

编译,运行..确定。

没有代码将活动链接在一起 - 让我们添加它:

6。以下解决方案和MainActivity.cs代码添加了操作: MainActivity.cs with btOpts_Click 我听说Doug Marcaida会去:"它编译。但它会运行吗?"

7。没有,这就是我得到的(.NET知道ActSettings类很好,但不是Java!?): ClassNotFoundException

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 不会工作!

8。最近的类似问题是Second activity in Android,但a)是2011年,b)没有接受答案,c)答案指向{ {1}}文件..嗯,这里是: AndroidManifest.xml 请注意,项目中的文件甚至没有提到一半的东西!然而,生成的输出完全拼写了所有活动,这只会加深我的困惑。

9。另一个问题How do I resolve ClassNotFoundException?可能是最接近的,但同样,它是从2013年开始的,它被标记为SecondActivity(不是{{1} }},AndroidManifest.xml或与手机有关的任何内容) 我完全没有线索,Java在哪里,如何以及如何设置它,最重要的是 Xamarin或VisualStudio-2017为什么不能在第一时间为我做到这一点

我希望现代IDE推广平台支持能够正确覆盖所有基础。最终,应用程序需要通过WiFi,后台/前台服务,通知以及其他方式进行TCP / UDP通信。但是,我只是简单地做着#34; Hello,world!&#34; :○

我尝试运行(并重命名文件和类!)ActivityLifecycle示例,它启动第二个活动,并且它完美运行.. 如果我没有更改任何名称。如果我这样做 - 它失败了,但恢复名称使它再次起作用。 我找不到该示例代码与我自己的代码之间的任何合理差异,这可以解释为什么Android无法找到我的第二个活动

我做错了什么?还是不干嘛?请帮忙!

1 个答案:

答案 0 :(得分:2)

  

重命名MainActivity会导致:

     

未处理的例外情况:   Java.Lang.RuntimeException:无法实例化活动ComponentInfo {App4.App4 / md54bce54f405542800672a5cecd6c84592.MainActivity}:java.lang.ClassNotFoundException:没找到类......

这是一个关于Xamarin的问题,它已在最新的Visual Studio版本中修复,它与您的代码无关。

你可以参考Jon Douglas的回答:Xamarin.Android app only finding launcher activity on clean compile

  

此问题已修复,并已包含在Visual Studio 15.5.5Visual Studio 15.6 Preview 3

中      

此修补程序包含的相应Xamarin.Android版本为Xamarin.Android 8.1.5.0 (Stable)Xamarin.Android 8.2.0.6 (Preview)

解决方案1:

将Visual Studio更新到最新版本,Visual Studio 15.5.6现已上市。

解决方案2:

  • 删除解决方案箱&amp; obj文件夹
  • 重新重建