0

Mono for Android アプリの実行時にロードし、新しいアクティビティを開始するアプリ「プラグイン」dll を作成しています。(アプリはアドホックにインストールされるため、実行可能コードのダウンロードに関するコメントはありません)

私は iOS の Obj-C から来ています。ここでは、ライブラリに .nibs と ViewControllers を含めることができます。

メインの Android アプリと読み込まれた dll の両方が別の一般的な dll を参照し、オブジェクトを問題なく読み込むことができます。

以下の作品:

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

どこ

public class testClass
{
    public string getString ()
    {
        return "This was read from the object";
    }

    public string tryPatient ()
    {
        Patient p = new Patient();
        p.Name = "This was created from the Core/Common DLL";

        return p.Name;
    }
}

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>

そこから読み取れるのは、Dalvik がクラスを見つけられないということですが、問題なくtest.satellite.RootActivity見つかったということtest.satellite.testClassです...?

どんな助けでも大歓迎です。

4

1 に答える 1

0

パッケージのケーシングについて一貫性がないようです。それが問題ではないでしょうか?

"Test.Satellite.testClass" -- works
"test.satellite.RootActivity" -- doesn't work
于 2012-11-29T00:37:32.330 に答える