我刚刚开始使用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
控件Button
:
按钮不做任何事情 - 代码是空的。编译,运行..到目前为止这么好。可爱!
现在我添加一个新的Activity并为其命名Main.axml
。是的,我喜欢匈牙利的符号,如果你愿意,就恨我,但这有助于我保持我的对象井然有序。但是除了这一点之外:此时我应该可以自由地命名一个我想要的新课程,不应该吗?
接下来,我创建一个相应的布局,[显然]将其命名为ActSettings
。也可以在其中插入一些控件。
编译,运行..确定。
没有代码将活动链接在一起 - 让我们添加它:
6。以下解决方案和MainActivity.cs代码添加了操作: 我听说Doug Marcaida会去:"它将编译。但它会运行吗?"
7。没有,这就是我得到的(.NET知道ActSettings
类很好,但不是Java!?):
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}}文件..嗯,这里是: 请注意,项目中的文件甚至没有提到一半的东西!然而,生成的输出完全拼写了所有活动,这只会加深我的困惑。
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无法找到我的第二个活动。
我做错了什么?还是不干嘛?请帮忙!
答案 0 :(得分:2)
重命名MainActivity会导致:
未处理的例外情况: Java.Lang.RuntimeException:无法实例化活动ComponentInfo {App4.App4 / md54bce54f405542800672a5cecd6c84592.MainActivity}:java.lang.ClassNotFoundException:没找到类......
你可以参考Jon Douglas的回答:Xamarin.Android app only finding launcher activity on clean compile 。
此问题已修复,并已包含在
中Visual Studio 15.5.5
或Visual Studio 15.6 Preview 3
。此修补程序包含的相应Xamarin.Android版本为
Xamarin.Android 8.1.5.0 (Stable)
和Xamarin.Android 8.2.0.6 (Preview)
将Visual Studio更新到最新版本,Visual Studio 15.5.6现已上市。