如何在Unity中使用不同的bundle标识符从Unity访问jar文件Java中的包名?

时间:2012-05-18 10:29:08

标签: android unity3d

首先..嗨,大家......

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

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

在Unity中,我的捆绑标识符是" com.android.test" 以下代码可以正常使用。 但是如果在Unity中将我的Bundle Identifier更改为 com.android.test2" ,则代码会抛出异常" 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");
    }

2 个答案:

答案 0 :(得分:0)

您的包名在Unity和java中都必须相同,否则无法访问它们。

答案 1 :(得分: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