首先..嗨,大家......
我在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");
}
答案 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