Reflection Android Mono上的反射程序集

Reflection Android Mono上的反射程序集,reflection,mono,xamarin.android,.net-assembly,dalvik,Reflection,Mono,Xamarin.android,.net Assembly,Dalvik,我正在创建一个应用程序“插件”dll,在运行时为我的Mono for Android应用程序加载,并启动一个新活动。(该应用程序将临时安装-因此不会对下载可执行代码发表评论) 我来自iOS上的Obj-C,在那里你可以在一个库中包含.nib和ViewController 我可以让主Android应用程序和加载的dll都引用另一个常见的dll,并加载对象 以下工作: var test = plugin.CreateInstance("Test.Satellite.testClass"); Metho

我正在创建一个应用程序“插件”dll,在运行时为我的Mono for Android应用程序加载,并启动一个新活动。(该应用程序将临时安装-因此不会对下载可执行代码发表评论)

我来自iOS上的Obj-C,在那里你可以在一个库中包含.nib和ViewController

我可以让主Android应用程序和加载的dll都引用另一个常见的dll,并加载对象

以下工作:

var test = plugin.CreateInstance("Test.Satellite.testClass");
MethodInfo getString = test.GetType().GetMethod("getString");
MethodInfo tryPatient = test.GetType().GetMethod("tryPatient");
在哪里

但是,当我尝试加载活动时(通过
CreateInstance
Intent
/
StartActivity
),会出现以下异常:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: test.satellite.RootActivity
  at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x00087] in /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:275
  at Android.Runtime.JNIEnv.FindClass (System.Type type) [0x00009] in /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:233
  --- End of managed exception stack trace ---
  java.lang.NoClassDefFoundError: test.satellite.RootActivity
    at test.MainActivity.n_onCreate(Native Method)
    at test.MainActivity.onCreate(MainActivity.java:29)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)
  Caused by: java.lang.ClassNotFoundException: test.satellite.RootActivity in loader dalvik.system.PathClassLoader@44e8c678
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    ... 15 more

  --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) <IL 0x000e0, 0x00670>
  at System.Reflection.MethodBase.Invoke (object,object[]) <IL 0x00006, 0x0008f>
  at Test.MainActivity.OnCreate (Android.OS.Bundle) [0x001e9] in /Users/stephen/Projects/test/test/MainActivity.cs:86
  at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00010] in /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.App.Activity.cs:1490
  at (wrapper dynamic-method) object.ca46b703-b14e-4853-b371-499ea96364fc (intptr,intptr,intptr) <IL 0x00012, 0x00033>
System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.Exception:test.satellite.RootActivity
在/Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:275中的Android.Runtime.JNIEnv.FindClass(System.String类名)[0x00087]处
在/Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:233中的Android.Runtime.JNIEnv.FindClass(System.Type Type类型)[0x00009]
---托管异常堆栈跟踪的结束---
java.lang.NoClassDefFoundError:test.satellite.RootActivity
at test.MainActivity.n_onCreate(本机方法)
在test.MainActivity.onCreate(MainActivity.java:29)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
在android.app.ActivityThread.access$2200(ActivityThread.java:119)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:4363)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:860)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.ClassNotFoundException:test.satellite.RootActivity在loader dalvik.system中。PathClassLoader@44e8c678
在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:573)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:532)
... 还有15个
---内部异常堆栈跟踪的结束---
在System.Reflection.MonMethod.Invoke(对象,System.Reflection.BindingFlags,System.Reflection.Binder,对象[],System.Globalization.CultureInfo)
位于System.Reflection.MethodBase.Invoke(对象,对象[])
在/Users/stephen/Projects/Test/Test/Test/MainActivity.cs:86中的Test.MainActivity.OnCreate(Android.OS.Bundle)[0x001e9]中
在/Users/builder/data/lanes/monodroid-mac-monodroid-4.2.7-branch/0e9eea34/source/monodroid/src/Mono.Android/platforms/Android-8/src/generated/Android.App.Activity.cs:1490中的Android.App.Activity.n\n\n\n\n\u OnCreate\u\u Landroid\u\u操作系统绑定(intptr,intptr,intptr,intptr,intptr,intptr,intptr,int
at(包装器动态方法)object.ca46b703-b14e-4853-b371-499ea96364fc(intptr、intptr、intptr)
从中我可以看出Dalvik找不到类
test.satellite.RootActivity
-但它找到了
test.satellite.testClass
很好


如有任何帮助,我们将不胜感激。

看来您对包裹的包装不一致。这可能是问题所在吗

"Test.Satellite.testClass" -- works
"test.satellite.RootActivity" -- doesn't work

当我调用plugin.CreateInstance(“Test.Satellite.RootActivity”)它仍然给出相同的错误。我尝试过用小写字母重命名名称空间&用同样的大小写调用,但仍然不起作用。
"Test.Satellite.testClass" -- works
"test.satellite.RootActivity" -- doesn't work