2

我在 java jar 中创建了一个统一插件。

在 Java 中,我的包名是com.android.test.

在 Unity 中,我的 Bundle Identifier 是com.android.test. 这适用于下面的代码。

但是,如果我在 Unity 中将我的 Bundle Identifier 更改为com.android.test2,下面的代码会引发异常Class not Found: com.android.test2.myplugin

有没有办法访问包名与 Unity Bundle Identifier 名称不同的 jar 文件?

这是我访问 Jar 的统一 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#脚本中(在toast方法中)直接引用你的类

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 回答