0

私はAndroidJavaプラグインを使用して、次のようにUnityでJava関数を呼び出しています。

static IntPtr cls_Activity;
static IntPtr fid_Activity;
static IntPtr obj_Activity;
static IntPtr kdataActivityClass;
static IntPtr startAdsMethod;

    void Start () {
        cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
        fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
        obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);
        kdataActivityClass = AndroidJNI.FindClass("com/kdata/unitytest/UnityUrlPlugin");
        startAdsMethod = AndroidJNI.GetMethodID(PakdataActivityClass, "getURL","()V");
        Debug.Log("obj_Activity"+obj_Activity);     
        Debug.Log("kdataActivityClass"+kdataActivityClass);     
        Debug.Log("Method"+startAdsMethod);     
            if (AndroidJNI.IsInstanceOf(obj_Activity, kdataActivityClass) != false)
            {                 
               jvalue[] myArray = new jvalue[1];
               AndroidJNI.CallStaticStringMethod(obj_Activity, startAdsMethod, myArray);
            }

問題は、クラスにアクセスできるのに、クラスのメソッドがnullを返すことです。

Debug.Log("obj_Activity"+obj_Activity);=> retuns value Debug.Log("kdataActivityClass"+kdataActivityClass);=> returns => value
Debug.Log("Method"+startAdsMethod);=> retunnsnull<===これがこのメソッドの問題です

ハードコードされた文字列を返す必要がありますが、Unityでは機能しません。

ヘルプは大歓迎です。ありがとう

4

1 に答える 1

0

javapを使用してgetURLメソッドのjni署名を確認します(3番目のパラメーターに同じものを入れましたか?):

cd <pathToUnityUrlPluginClass>

javap -p -s <UnityUrlPlugin>
于 2012-06-05T11:39:19.057 に答える