.接SDK是个什么样的活计?

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接入。

2.unity 与 android 的通信:

unity  Call android:

 //获取名为UnityPlayer的类
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获取当前运行的Activity
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); //调用UnityPlayer类中的函数
var result = jo.Call<返回结果类型>("函数名称","函数参数1","函数参数2",……);

android Call unity:

UnityPlayer.UnitySendMessage("场景中GamObject名字","该Obj身上脚本的一个方法名",返回值(字符串类型));

3.实际操作

3.1 准备工作

  1. 安卓开发环境,因为我们需要扩展UnityActivity,并且将扩展过后的结果打成 .jar包放入Unity,所以,我们需要 Android Studio 或者Eclipse+ADT,作者使用的Android Studio3.01.(下载网址:http://www.androiddevtools.cn/ )
  2. SDK源文件,这个看你需要接入什么SDK,去官网下载即可。
  3. Unity 的Android classes.jar文件,这里面定义了unity 在安卓中的各种行为,我们在编写代码的时候,需要用到这里面的接口。(路径为:\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar  )

3.2开始创建Android工程

  

经过以上步骤,一个完整的Android项目就算是创建好了,如下图:

3.3 导入Jar包

切换到Project视图,将在3.1中准备好的unity 的classes.jar文件、SDK的.jar文件复制到 App/libs文件夹下面

将导入的.jar文件 作为依赖项导入到项目中去,导入成功之后,jar包就可以展开了,可以看到里面的信息。(具体做法为:右键点击jar包,有一个 add as library 选项,点击该选项即可)

3.4编写Unity Android交互接口

  • 将项目切换到 Android结构,然后到java目录下,开始编写交互接口。
  • 说道这里,提一下Android 应用的运行机制。在 安卓应用中,有许多个Activtiy,这些Activity,可以当做是unity的一个scene。在应用启动的时候首先会启动一个MainActivity,而这个MainActivity,是在Applicationmainfest.xml中配置的。而我们想要在安卓应用启动起来的时候,就进行初始化SDK,然后调用各个接口,那么我们就需要编写这样一个MainActivity对应的脚本,并且将其配置到 ApplicationMainfest.xml文件中去。
  • 我们可以自己写一个新的Activity,也可以直接使用默认生成的Activity,这里我们直接在生成的MainActivity.java中进行编写交互代码。

    //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);
    } }

3.5更改gradle配置

打开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)

3.6打包

点击右上角 Gradle->:app->Tasks->other->exportJar 即可开始打包

3.7创建Unity工程

这个就简单了,直接New 一个 project就行了,需要注意的是:

  1. File -> Build Setting -> Player Settings -> Other Settings ->Bundle Identifier中的字符串,要与在创建 Android工程时的 Company damon保持一致
  2. 在Assets下创建 Plugins/Android目录

将上面打出的Jar包,放到Plugins/Android目录下,然后编写Unity的调用代码:

  //调用安卓函数
   public void CallAndroid()
{
AndroidJavaClass jc= new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo= jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("UnityCallAndroid",,,"+"); }
  //安卓调用Unity的函数
public void ShowMsg(string str){
unityResultShow.text = str;
}

新建一个Unity场景,创建一个空的物体,命名为"SDK",然后将编写的脚本附上去。

最后,将unity打包成apk,上手机安装即可测试。

问题:

1.Conflict with Dependency

 Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
> Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.) and test app (27.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
}

  

unity接入安卓SDK,与安卓相互通信的更多相关文章

  1. Unity - 接入Android SDK

    在网络上,关于Unity与Android如何进行交互,雨松MOMO大神已经有两篇文章简单介绍了如何操作(1)Unity3D研究院之打开Activity与调用JAVA代码传递参数(2)Unity3D研究 ...

  2. Unity 使用Plugins接入安卓SDK 基础篇

    一.须知 本帖适合对安卓一点基础都没有,有一定Unity基础.刚刚接完一个某文档很简单的渠道SDk,也当是自己总结一下. 二.Unity中的目录创建与理解. Plugins:插件目录,该目录再编译项目 ...

  3. Unity接入微信支付SDK 2022年版安卓篇

    最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...

  4. unity接入安卓sdk (unity调用安卓工程)

    1.安装jdk 并且配置环境,这个网上资料很多,这里不说了 2.安卓开发软件eclipse集成环境版 下载地址 http://tools.android-studio.org/index.php/ad ...

  5. 【Unity】微信支付SDK官方安卓Demo的使用问题

    Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代 ...

  6. 教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)

    U8SDK的设计之初,就是为了可以支持各种游戏引擎开发的游戏,而不不过Android的原生平台.眼下一大半的手游,都是採用Unity3D和Cocos2dx开发,那么这里,我们就先来一步步给大家演示,用 ...

  7. 【百度地图-安卓SDK】从头开始写android程序

    [百度地图-安卓SDK]从头开始写android程序首先确保有这四个文件    安装jdk先安装android开发SDK(并不只是为eclipse服务的),即运行installer_r15-windo ...

  8. Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境   要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...

  9. 如何实现Windows Phone代码与Unity相互通信(事件方式)

    源地址:http://www.cnblogs.com/petto/p/3909063.html 一些废话 昨天写一篇今天写一篇.不是我闲的蛋疼,是今天一天碰到了好几个恼人的问题,浪费一天时间搞定.本文 ...

随机推荐

  1. ThinkPHP6 核心分析之应用程序初始化

    runWithRequest () 方法 在 Http 类的 run() 方法中,得到 think\Request 类的实例后,程序接着执行 $response = $this->runWith ...

  2. 华为云GaussDB(DWS)内存知识点,你知道吗?

    前言 在日常数据库的使用中,难免会遇到一些内存问题.此次博文主要向大家分享一些华为云数仓GaussDB(DWS)内存的基本框架以及基本视图的使用,以便遇到内存问题后可以有一个基本的判断. 注意,本篇博 ...

  3. Ubuntu16.04忘记用户登录密码以及管理员密码,重置密码的解决方案

    1. 问题现象: 密码遗忘 2. 问题原因 问题原因,搞不懂,只是修改了/etc/shadow和/etc/sudoers这俩文件 3. 解决方案 在系统开机前常按shift键进入grub界面,如下: ...

  4. WebLogic 省略项目名称

    希望 WebLogic 部署的项目,不需要输入项目名,直接通过IP端口访问. 在 WEB-INF 目录下添加文件 weblogic.xml <?xml version="1.0&quo ...

  5. Nginx介绍,安装,配置

    引言 为什么要学习Nginx 问题一: 客户端到底要将请求发送给哪台服务器? 问题二: 如果所有客户端的请求都发送给了服务器1,那另一台岂不是废了 问题三: 客户端发送的请求可能是申请动态资源的,也可 ...

  6. 将阿里矢量图添加到element-ui

    在阿里矢量图的操作 选择需要的图标添加至购物车   选择图标 将购物车中的图标, 添加至项目   添加至项目 会自动跳转到我的项目   项目页面 在 更多操作 中选择 编辑项目   更多操作 将 Fo ...

  7. MySQL执行文件中的SQL

    连接进入MySQL服务, 使用source ${文件名}执行. 末尾不能带分号.

  8. 【算法•日更•第四十七期】Mac与windows系统的差别

    小编最近装了个Mac系统,因为小编已经有笔记本可以用linux了,所以就决定在台式机上装个双系统,结果一不小心把Mac装在C盘上了,哎,说多了都是泪啊. 其实用了Mac之后才发现windows特别好用 ...

  9. 如何在 asp.net core 的中间件中返回具体的页面

    前言 在 asp.net core 中,存在着中间件这一概念,在中间件中,我们可以比过滤器更早的介入到 http 请求管道,从而实现对每一次的 http 请求.响应做切面处理,从而实现一些特殊的功能 ...

  10. 微信DLL劫持反弹shell复现

    (该文参考网络他人资料,仅为学习,不许用于非法用途) 一.操作环境 Windows7 :  微信  , Process Explorer(任务管理工具,本实验中用于查找微信程序调用的DLL文件) Ka ...