SDK的工作流程:
1. 从unity端出发,向安卓发起一系列的请求(unity call android)。
2. 安卓端收到unity端调用,然后在具体调用SDK的一系列接口(android内部调用)
3. SDK服务器处理之后得到结果,再返回给安卓(网络通信)
4. 安卓获得SDK结果,然后回调unity方法,将结果传回unity端(android call unity)
我们需要做的:
1. 在安卓端,将SDK集成进入 Android的 MainActivity(或者其他Activity),为Unity的调用做好接口
2. 将做好的安卓接口,打成jar包,以插件的形式,集成到Unity中去,供unity使用
3. 编写Unity端的调用 函数与响应函数,完成SDK接入。
登录后复制
1 //获取名为UnityPlayer的类
2 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
3
4 //获取当前运行的Activity
5 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
6
7 //调用UnityPlayer类中的函数
8 var result = jo.Call<返回结果类型>("函数名称","函数参数1","函数参数2",……);
登录后复制
UnityPlayer.UnitySendMessage("场景中GamObject名字","该Obj身上脚本的一个方法名",返回值(字符串类型));
经过以上步骤,一个完整的Android项目就算是创建好了,如下图:
切换到Project视图,将在3.1中准备好的unity 的classes.jar文件、SDK的.jar文件复制到 App/libs文件夹下面
将导入的.jar文件 作为依赖项导入到项目中去,导入成功之后,jar包就可以展开了,可以看到里面的信息。(具体做法为:右键点击jar包,有一个 add as library 选项,点击该选项即可)
登录后复制
//1.首先,将 MainActivity继承的父类改为UnityPlayerActivity
public class MainActivity extends UnityPlayerActivity {
//这里是自动生成的,相当于Mono的Awake()函数,用于初始化操作
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//unity调用Android接口
public void UnityCallAndroid(int a, int b,string symbol)
{
String result;
switch (symbol){
case "+":
result ="加法结果:"+(a+b);
break;
case "-":
result ="减法结果:"+(a-b);
break;
case "*":
result="乘法结果:"+(a*b);
break;
default:
result="未知运算:"+"a="+a+",b="+b;
}
AndroidCallUnity(result);
}
//安卓调用Unity接口
public void AndroidCallUnity(String result){
UnityPlayer.UnitySendMessage("SDK","ShowMsg",result);
}
}
打开Gradle Scripts/build.gradle(Module:app)文件
在该文件最下方添加如下代码:
登录后复制
task deleteOldJar(type:Delete){
//打出的旧版本jar
delete 'build/outputs/test.jar'
}
task exportJar(type:Copy){
from('build/intermediates/bundles/release/')
//打出jar包的文件目录
into('build/libs/')
include('classes.jar')
rename('classes.jar','test.jar')
}
exportJar.dependsOn(deleteOldJar,build)
点击右上角 Gradle->:app->Tasks->other->exportJar 即可开始打包
这个就简单了,直接New 一个 project就行了,需要注意的是:
将上面打出的Jar包,放到Plugins/Android目录下,然后编写Unity的调用代码:
登录后复制
//调用安卓函数
public void CallAndroid()
{
AndroidJavaClass jc= new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo= jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("UnityCallAndroid",8,3,"+");
}
//安卓调用Unity的函数
public void ShowMsg(string str){
unityResultShow.text = str;
}
新建一个Unity场景,创建一个空的物体,命名为"SDK",然后将编写的脚本附上去。
最后,将unity打包成apk,上手机安装即可测试。
1.Conflict with Dependency
登录后复制
1 Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
2 > Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.
解决方案
登录后复制
//在build.gradle(Module:App)文件的dependencies中添加如下代码
androidTestCompile('com.android.support:support-annotations:26.1.0') {
force = true
}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删