Shi*_*iva 6 c# android-manifest xamarin.android xamarin android-application-class
我想扩展Android应用程序,我想重写oncreate方法.但由于某种原因,它非常糟糕......只有当我删除[应用程序]我才能运行它但是根据这个链接我们必须添加[应用程序]
[Application]
public class MainApp : Application
{
public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
//app init ...
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以澄清一下在xamarin android中扩展应用程序类的正确方法是什么
更新
如果我不删除[应用程序],我正好得到以下错误
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:执行任务GenerateJavaStubs时出错:应用程序不能同时具有[Application]属性和[assembly:Application]的类型]属性.(myapp.Droid)
如果我应用程序然后它编译但它会抛出运行时错误
[AndroidRuntime]关闭VM [AndroidRuntime] FATAL EXCEPTION:main [AndroidRuntime]进程:com.test.myapp,PID:6524 [AndroidRuntime] java.lang.RuntimeException:无法实例化应用程序com.test.myapp.MainApp:java. lang.ClassNotFoundException:在路径上找不到类"com.test.myapp.MainApp":DexPathList [[zip file"/data/app/com.test.myapp-1/base.apk"],nativeLibraryDirectories=[/ data/app/com.test.myapp-1/lib/arm,/ data/app/com.test.myapp-1/base.apk!/ lib/arababi-v7a,/ system/lib,/ vendor/lib] [AndroidRuntime]在android.app.LoadedApk.makeApplication(LoadedApk.java:802)[AndroidRuntime] android.app.ActivityThread.handleBindApplication(ActivityThread.java:5377)[AndroidRuntime] at android.app.ActivityThread.-wrap2( ActivityThread.java)[AndroidRuntime]在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1545)[AndroidRuntime]在Android.os上的android.os.Handler.dispatchMessage(Handler.java:102)[AndroidRuntime]. Looper.loop(Looper.java:154)[AndroidRunt ime]在android.app.ActivityThread.main(ActivityThread.java:6119)[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)[AndroidRuntime] at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.运行(ZygoteInit.java:886)[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)[AndroidRuntime]引起:java.lang.ClassNotFoundException:未找到类"com. test.myapp.MainApp"on path:DexPathList [[zip file"/data/app/com.test.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.test.myapp-1/ lib/arm,/ data/app/com.test.myapp-1/base.apk!/ lib/armaabi-v7a,/ system/lib,/ vendor/lib]] [AndroidRuntime] at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)[AndroidRuntime] java.lang.ClassLoader.loadClass(ClassLoader.java:380)[AndroidRuntime] at java.lang.ClassLoader.loadClass(ClassLoader.java:312)[AndroidRuntime] at android.app .Instrumentation.newApplication(Instrumentation.java:992)[AndroidRuntime]在android.app.LoadedAp k.makeApplication(LoadedApk.java:796)[AndroidRuntime] ...还有9个
这是我的清单文件
在AssemblyInfo.cs中
评论出来
#if DEBUG
[Application(Debuggable=true)]
#else
[Application(Debuggable = false)]
#endif
Run Code Online (Sandbox Code Playgroud)
并在您的应用程序之上移动它
#if DEBUG
[Application(Debuggable=true)]
#else
[Application(Debuggable = false)]
#endif
public class MainApp : Application
{
public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
//app init ...
}
}
Run Code Online (Sandbox Code Playgroud)
基本上你已经定义了两个地方,这就是为什么会出现这个问题.在AssemblyInfo.cs中注释并添加扩展类将会有效
供参考:
清单还可以
将ApplicationAttribute应用于[Application]Application子类,以在清单中注册此类
添加Java/JNI构造函数
.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership)覆盖该OnCreate方法
[art] JNI RegisterNativeMethods: attempt to register 0 native methods因此您的应用程序子类不是实例化的.例:
[Application]
public class MainApplication : Application
{
public MainApplication(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
}
}
Run Code Online (Sandbox Code Playgroud)