Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在xamarin android中扩展应用程序类_C#_Xamarin_Xamarin.android_Android Manifest_Android Application Class - Fatal编程技术网

C# 如何在xamarin android中扩展应用程序类

C# 如何在xamarin android中扩展应用程序类,c#,xamarin,xamarin.android,android-manifest,android-application-class,C#,Xamarin,Xamarin.android,Android Manifest,Android Application Class,我想扩展Android应用程序,并重写oncreate方法。 但由于某些原因,这是非常可怕的…只有当我删除[应用程序]我才能运行它,但根据这一点,我们必须添加[应用程序] [Application] public class MainApp : Application { public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { } public ove

我想扩展Android应用程序,并重写oncreate方法。 但由于某些原因,这是非常可怕的…只有当我删除[应用程序]我才能运行它,但根据这一点,我们必须添加[应用程序]

[Application]
public class MainApp : Application
{
public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}

public override void OnCreate()
{
    base.OnCreate();
    //app init ...
}
}
谁能告诉我在xamarin android中扩展应用程序类的正确方法是什么

更新

如果我不删除[应用程序],我会得到下面的错误

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: 错误:执行任务GenerateJavaStubs时出错:应用程序不能有 具有[Application]属性的类型和 [程序集:应用程序]属性。(myapp.Droid)

若我运行了一个应用程序,那个么它会编译,但会抛出以下运行时错误

[AndroidRuntime]正在关闭VM[AndroidRuntime]致命异常: 主[AndroidRuntime]进程:com.test.myapp,PID:6524 [AndroidRuntime]java.lang.RuntimeException:无法实例化 application com.test.myapp.MainApp:java.lang.ClassNotFoundException: 在路径:DexPathList[[zip]上未找到类“com.test.myapp.MainApp” 文件 “/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/armeabi-v7a、/system/lib、, /供应商/lib]][AndroidRuntime]位于 makeApplication(LoadedApk.java:802) [AndroidRuntime]在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:5377) [AndroidRuntime]在 android.app.ActivityThread.-wrap2(ActivityThread.java) [AndroidRuntime]在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) [AndroidRuntime]在 android.os.Handler.dispatchMessage(Handler.java:102)[AndroidRuntime] 在android.os.Looper.loop(Looper.java:154)[AndroidRuntime] main(ActivityThread.java:6119) [AndroidRuntime]位于java.lang.reflect.Method.invoke(本机方法) [AndroidRuntime]在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) [AndroidRuntime]在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) [AndroidRuntime]由以下原因引起:java.lang.ClassNotFoundException:未 在路径:DexPathList[[zip文件]上查找类“com.test.myapp.MainApp” “/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/armeabi-v7a、/system/lib、, /供应商/lib]][AndroidRuntime]位于 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) [AndroidRuntime]在 loadClass(ClassLoader.java:380)[AndroidRuntime] 位于java.lang.ClassLoader.loadClass(ClassLoader.java:312) [AndroidRuntime]在 android.app.Instrumentation.newApplication(Instrumentation.java:992) [AndroidRuntime]在 makeApplication(LoadedApk.java:796) [AndroidRuntime]。。。9更多

这是我的舱单

  • 将ApplicationAttribute,
    [Application]
    应用于应用程序子类,以便在清单中注册此类

  • 添加Java/JNI构造函数

    • .ctor(System.IntPtr,Android.Runtime.jnihandleowner)
    • 如果不添加此项,则当运行时尝试实例化Java包装器时,您将收到一个错误
  • 重写
    OnCreate
    方法

    • 这避免了:
      [art]JNI RegisterNativeMethods:尝试注册0个本机方法
      ,因此应用程序子类不会实例化
  • 例如:

    [Application]
    public class MainApplication : Application
    {
        public MainApplication(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer)
        {
        }
    
        public override void OnCreate()
        {
            base.OnCreate();
        }
    }
    
    在AssemblyInfo.cs中

    点评

         #if DEBUG
        [Application(Debuggable=true)]
        #else
        [Application(Debuggable = false)]
        #endif
    
    并将其移动到应用程序的顶部

    #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 ...
    }
    }
    
    基本上你已经在两个地方定义了它,这就是为什么这个问题发生的原因。 在AssemblyInfo.cs中进行注释并添加到扩展类中会奏效

    供参考:


    清单正常

    我收到编译错误。。。。上面说找不到文件。。我添加了android:name和application@Shiva
    android:name
    ?,比如:
    [Application(LargeHeap=true,name=“com.sushihangover.Application”)
    我输入了=“.Application”。。。上面写着。。找不到com.test.myapp.application。。。这里com.test.myapp是我的包您必须完全限定“名称”,xamarin确实支持点符号,如andriod Java或Gradle您使用的完整应用程序属性行是什么?