Android Stuido导出AAR 给Unity3D调用注意事项

来源:互联网 发布:论文数据造假的多吗 编辑:程序博客网 时间:2024/05/09 18:26

1. 导出 AAR过程需要注意,依赖的文件并没有打进去,所以要收到拷入到 Unity项目中,如下图中的 support包,是我项目中要用到的:



2.删除aar包中重复的 libs下的 jar文件和 jni下的  .so文件,否则调用的时候会报错。




3. Manifest文件也要拷到 Unity项目中的 Plugin/Android下,因为会有一些 权限的声明。 例如:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


4. Unity中运行的时候,一定注意 这个Bundle Identifer 包名的指定,要和你 AAR中 Manifest一致,否则运行中 启动某个 Activity,就
会报找不到Activity,因为你是在Manifest中对其进行的声明。




5. C# 调用 Android代码的实例 ,包括 不带参数和 带参数的几种情况都有了:

 using (AndroidJavaClass pluginClass = new AndroidJavaClass("com.xxx.xxx.Manager"))                        {                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");      AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");                Debug.Log("-----------com.xxx.androidplugin.Recorde------" + pluginClass);                if (pluginClass != null)                {                   instance = pluginClass.CallStatic<AndroidJavaObject>("getInstance");                   new AndroidJavaObject("com/xxx/xxx/Manager").Call("stop");                    int[] mObject = new int[2];                    mObject[0] = 1111;                    mObject[1] = 2134;                    instance.Call("speak", "test ", 21313);                    instance.Call("sing", mObject);                    instance.Call("stop");                    instance.Call("takePhotoByCamera", activity);                                    }            }

6. 当android中方法有返回值的时候,以及参数,类型一定要和C#中的一致,类型一定要和C#中的一致,类型一定要和C#中的一致 long  Long 类似的区别

遇到个坑,浪费半天找不到原因,发现  android中参数写成了Long,而C#中是 Call<long>,一直报错 NoSuchMethodError: no non-static method with name。。。。

正确的如下

public class KeyIdManager {    private static final String TAG = "KeyIdManager";    private Long mId = -1L;    private static KeyIdManager mKeyIdManager;    public static KeyIdManager getInstance() {        if (mKeyIdManager == null) {            mKeyIdManager = new KeyIdManager();        }        return mKeyIdManager;    }    public void setId(long id) {        mId = id;        Log.d(TAG, "setId: mId == " + mId);    }    public long getKeyId() {        return mId;    }}


C#

AndroidJavaObject instance = new AndroidJavaClass("com.xxx.util.KeyIdManager").CallStatic<AndroidJavaObject>("getInstance");                    instance.Call("setId", 100L);                    Debug.Log("--------getKeyId------" + instance.Call<long>("getKeyId"));


参考:

         AS与Unity3D之间打包的各种坑及解决方案

Android Studio 2.1 和 Unity3D 5.3.4 交互 

Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

原创粉丝点击