NoiseFloor 发表于 2022-3-2 15:52

六、安卓开发与Unity08、unity调用安卓互调方式总结

一、导出包的方式有三种


[*]Jar包
1.包含了mainfest文件和Res文件夹。导出的mainfest会优先于unity自带的App设置,比如Icon,App名称等。unity不推荐这种久的方式。
2.只有一个Jar包方式
适用于简单调用安卓端API的场景。
[*]Arr包
unity推荐的一种方式,这种方式实际是Jar包第一种方式的进化。在安卓端生成Arr包方式与Jar插件稍有区别。
[*]Gradle方式
实质是将Jar包放在远程端或者本地的仓库,构建时才接入到unity工程,这样有利于减小Unity工程大小。这样子可以更方便地处理工程中各种Jar的依赖,使用于重度依赖安卓端,以安卓为主导开发的情况。
二、unity调用安卓端的API


[*]安卓端扩展unity的MainActivity的情况
1.普通方法
unity通过new AndroidJavaObject 对象,相当于调用对应的 Java 对象的构造函数。借助 C# 可变参数列表,可以给 Java 对象的构造函数传递任意数量的参数。
其中,如果方法返回值类型则调用是必须带返回值类型。
// 泛型版本,目的是指定返回值的类型int hash = jo.Call<int>("hashCode");// 非泛型版本,处理返回值是void的情况。jo.Call("aMethodReturnVoid"); // String中没有返回void的简单方法。。。
2.如果方式是静态类的方法,那么unity通过静态类的方式访问
      AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");      AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");      jo.Call("CallAndrodiActivity");三、安卓调用Unity端API方式

通过给unity物体发送消息的方式。属于对UnityPlayerActivity扩展的方式。
[*]AndroidJavaProxy 接口代理
1.Java代码中定义接口
publicinterface javaSDKCallbackListener{    void OnSDKInited(String msg);    void OnLogined(String token);    void OnLoginOut();}
2.unity端实现接口
class SDKCallbackListener : AndroidJavaProxy{    // 这句话很重要!!!C#找到Jar中接口的引用    public SDKCallbackListener() : base("com.eam.qqlogin.SDKCallbackListener") { }      //实现接口中的方法    public void OnSDKInited(string msg)    {      Debug.Log( "OnSDKInited:" + msg);    }    public void OnLogined(string token)    {      Debug.Log("OnLogined:" + token);    }    public void OnLoginOut()    {      Debug.Log("OnLoginOut.);    }}
unity端实现安卓的广播功能,然后直接监听安卓的广播消息
四、最终出包方式

Android 工程生成 aar/jar 文件,复制到 Unity 工程中,最终使用 Unity 的 Build 机制生成 apk。Unity 工程将所有内容和代码导出为一个 Android gradle 项目,然后使用 Android Studio 打开项目进行开发,最终使用 Android Studio 打包 apk。
页: [1]
查看完整版本: 六、安卓开发与Unity08、unity调用安卓互调方式总结