Unity Android平台下插件/SDK开发通用流程
本文主要面向对Android开发不甚了解的Unity开发者,介绍了基于最新的Android Studio的标准Android开发环境与项目结构的配置流程,在此基础上,开发者可以快速的进行SDK的接入与插件的开发。
目前国内各大博客上搜到的文章内容基本上都是相互抄来抄去,比如说先是清一色的继承UnityPlayerActivity,然后再配置AndroidManifest文件等等,这些确实有效果,但是具有很大的局限性。例如,如果项目中如果存在两个Android插件或SDK会怎么样?都继承UnityPlayerActivity显然是不行的,启动入口Activity只能有一个,AndroidManifest文件没法这样配置。笔者最近在做毕设,帮同学接了若干个Android下的SDK,包括支付宝,科大讯飞以及二维码扫描的SDK,参考一些国外的优秀博客以及自己的实践,总结出一套SDK接入与插件开发的通用流程,在这里分享给大家。
开发环境
1.开发软件:笔者使用的开发软件是Unity 5.4.3f 和Android Studio 2.3。
2.所需类库:UnityPlayer等需要的classes.jar包。在 Unity支持Android下IL2CPP后,UnityPlayer相关的这个jar包位置由原来的`Editor\Data\PlaybackEngines\AndroidPlayer\bin`变成了`Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono(or il2cpp)\Release\Classes`,选择jar包时需要注意选择对应Backend的版本。
项目构建
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.soulgame.myplugin"><application android:allowBackup="true" android:supportsRtl="true"></application>
</manifest>
5.最后就是编写我们的插件或者对接第三方SDK了。首先引入Unity的jar包,将classes.jar拷贝到文件夹里libs文件夹下面,通用点击File -> Project Structure,在左侧选择我们的插件,然后在上方选择Dependencies,先删除的现存的所有依赖库,然后点击`+`号 ->Jar Dependency添加Unity的jar包,点击OK完成设置,稍等一会儿就完成了构建。对于第三方SDK的jar包,以同样的方式进行引入。如果第三方依赖库中有so文件,先不需要导入,稍后将会说明如何添加so文件。到这一步,项目、依赖库都设置完毕。
编写代码
package com.soulgame.myplugin;import android.app.Fragment;
import android.os.Bundle;import com.unity3d.player.UnityPlayer;public class MyPluginClass extends Fragment
{private static final String TAG = "MyPlugin";private static MyPluginClass Instance = null;private String gameObjectName;public static MyPluginClass GetInstance(String gameObject){if(Instance == null){Instance = new MyPluginClass();Instance.gameObjectName = gameObject;UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();}return Instance;}@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setRetainInstance(true); // 这一句很重要,保存对该Fragment的引用,防止在旋转屏幕等操作时时丢失引用(Fragment隶属于Activity)}//示例方法一:简单的向Unity回调 public void SayHello(){UnityPlayer.UnitySendMessage(gameObjectName,"PluginCallBack","Hello Unity!");}//示例方法二:计算传入的参数并返回计算结果public int CalculateAdd(int one, int another){return one + another;}
}
编写完成,将插件编译导出,选中Android Studio右侧的Gradle,选中如图所示的选项编译输出,稍等一会儿,在左侧的Project面板可以看到相关的aar文件了,这个aar文件就是最终输出给Unity使用的aar包,拿到aar包之后,需要进行一项关键的操作,将其后缀改为压缩格式(zip或rar)打开压缩包删除掉libs/下面的classes.jar(原因是Unity在打包的时候会再次拷贝安装目录下的classes.jar到项目中造成冲突)!如果插件使用到了so文件,将对应平台的so文件拷贝至libs下面,如下图右所示:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;public class PluginManager : MonoBehaviour
{public string className = "com.soulgame.myplugin.MyPluginClass";public Text callbackText = null;public Text resultText = null;private AndroidJavaObject pluginObject = null;void Start(){
#if UNITY_ANDROID && !UNITY_EDITORpluginObject = new AndroidJavaClass(className).CallStatic<AndroidJavaObject>("GetInstance", gameObject.name);pluginObject.Call("SayHello"); resultText.text = pluginObject.Call<int>("CalculateAdd", 22, 33).ToString();
#endif}public void PluginCallBack(string text){callbackText.text = text;}
}
编写完成后,设置好Platform和Bundle Identifier以及Mininum API Level(和插件保持一致),到真机上测试即可。
注意事项
参考资料
Unity Android平台下插件/SDK开发通用流程相关推荐
- Unity Android平台接入支付宝SDK
这篇文章前面讲的创建Android Studio工程的流程是不正确的!!! 正确的流程请参见:Unity Android平台下插件/SDK开发通用流程 最近帮一个群里的朋友接了一下支付宝的SDK,开发 ...
- android平台下使用点九PNG技术
"点九"是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不 ...
- Android基于环信SDK开发IM即时聊天(一)
2016-09-02更新:可以看一下最新的这篇文章和源码,Android基于环信SDK开发IM即时聊天(二) 目前市面上我了解的做第三方即时聊天SDK的有两家:环信.融云,这里我使用环信SDK来完成即 ...
- android平台下基于ANativeWindow实现渲染bitmap图像
OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...
- 文通Android平台证件识别SDK
文通Android平台证件识别SDK 功能介绍 1.通过拍照界面,指导用户拍出合格证件图像. 2.采用文字识别(OCR)技术,自动提取证件信息(如姓名.证件号码.地址等)及头像. 3.识别证件种类包括 ...
- Android基于环信SDK开发IM即时聊天(二)
声明1:北京时间现在是2019/6/10,评论里的问题我看到了,这几天我找时间看看源代码问题出在哪,在此感谢大家的监督 声明2:此Demo我是在5.1测试机上测试通过,感谢WTQ_DOMIAN的评论, ...
- 在Android平台下实现音视频语音聊天
音视频通信 作为独立开发者或想缩短音视频开发周期的公司来说,想要在Android平台下实现音视频通信,最快捷的方法是寻找开源项目或调用其他公司API.之所以这么说是因为音视频通信技术涉及到底层音视频采 ...
- Android平台手机UI应用开发——软件管理器
第一次写博客,与大家分享源代码,博客很多地方不知道怎么设计,望见谅. 希望大家多多支持,雅林和大家一起学习Android,共同进步. 今天我们要做的这个软件管理器,主要目的是为了学习Android平台 ...
- unity Android平台最佳效果探索(二)
上一篇 unity Android平台最佳效果探索(一) 上篇写到了实现PC版的效果 继续 3.切换到Android平台后效果 直接切换后,不能运行,报错挺多. 原因: (1)Android平台不支持 ...
最新文章
- 64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?...
- crontab FAQ
- 手把手教你手动创建线程池
- P3197 [HNOI2008]越狱(快速幂)
- java对日期进行加减操作以及比较大小
- web前端页面优化——个人见解
- 怎样使用libmad
- alarm/pause
- 实验4-1-8 求给定精度的简单交错序列部分和 (15 分)
- Java开发笔记(一百二十六)Swing的窗口
- 制作符合期刊审图号标准的中国地图(含九段线)
- 运动控制器的自定义G代码编程应用
- 每秒浮点运算次数FLOPS
- Python分析中国大陆各直辖市及各省省会的平均工资与平均房价 课程报告+源码及数据
- Mac安装Jadx反编译工具
- OpenCV 视频人数统计研究
- 安卓美化——添加下拉菜单图片或下拉菜单透明
- 怎样根据不同的睡姿选择合适的枕头?
- django 输入城市名称获取相应城市即将上映电影
- 使用DIV、CSS技术设计的个人博客网页(web期末考试)