2

Unity 用のプラグインを Java jar に作成しました。

Java では、私のパッケージ名はcom.android.test.

Unity では、私の Bundle Identifier はcom.android.test. これは、以下のコードで正常に機能しています。

com.android.test2しかし、Unity でBundle Identifier を に変更すると、以下のコードで例外がスローされますClass not Found: com.android.test2.myplugin

パッケージ名が Unity Bundle Identifier 名と異なる jar ファイルにアクセスする方法はありますか?

Jar にアクセスするための Unity C# コードを次に示します。

static IntPtr cls_Activity;
static IntPtr fid_Activity;
static IntPtr obj_Activity;
static IntPtr cls_OurAppNameActivityClass;
static IntPtr startAdsMethod;

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);

cls_OurAppNameActivityClass = AndroidJNI.FindClass("com/android/test/myplugin");
            startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "Instantiate", "()V");


  if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
       Debug.Log("Activity IS a OurAppNameActivity");               
       jvalue[] myArray = new jvalue[1];
       AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);
       Debug.Log("Activity Leaving a OurAppNameActivity");
    }
4

2 に答える 2

0

パッケージ名は、ユニティとJavaの両方で同じである必要があります。そうでない場合、アクセスできません。

于 2012-06-05T04:33:18.030 に答える
0

はい、できます。以下の手順に従ってください

1. Android プロジェクトの作成中に、MainActivity に名前を付けます (MainActivity の代わりに MYAndroidPlugin としましょう)。

2. MYAndroidPlugin.java にクラス MYAndroidPlugin が表示されます。次のように変更します`

package com.mydomain.androidplugin;

import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;



public class MyAndroidPlugin   {

   public MyAndroidPlugin(){

   //default constructor
  }

   public void makeToast(final String message, final int length) {
       final Activity a = UnityPlayer.currentActivity;
       a.runOnUiThread(new Runnable() {
        public void run() {
            Toast.makeText(a, message, length).show();
        }
    });
}

3. gradle タスクを介して jar としてエクスポートし、jar ファイルを unityproject/Assets/Plugins/Android に配置します。

4.C#スクリプト(トーストメソッド内)でクラスを直接参照します

public void TestToast(){

 using(AndroidJavaObject jo =  new      AndroidJavaObject("com.mydomain.androidplugin.MYAndroidPlugin"))
        jo.Call ("makeToast", "my plugin worked", 2);
 }

5.これで、このメソッドを呼び出してトーストを作成します

任意の識別子の jar を直接参照できるようになりました

于 2016-02-01T09:57:43.350 に答える