文章目录

  • 1.接入准备(如果不具备这些条件,建议放弃)
  • 2.导入unity class
  • 3.Android调用unity
  • 4.unity调用Android
  • 5.查看 AndroidManifest.xml package
    • 非静态方法调用
    • 静态方法调用
  • 6.Java回调

unity 接入第三方SDK 很常见的事情,有的SDK 有官方文档,跟着文档接入即可(比如各大广告SDK),但是有写SDK没有提供unity的接入文档,提供的是Android 的接入文档,所有的接口都是面向Java的,SDK的安装也是Android Studio或者IDEA,而恰巧接SDK这个任务又到了你的手上,作为一个unity C#开发人员,现在要经手一个Java SDK的接入,于是此篇诞生了

1.接入准备(如果不具备这些条件,建议放弃)

既然是面向Java的SDK,那么一个Java的开发环境比不可少,这里暂时使用Android Studio来进行Java的打包(IDEA 原理差不多)

下载好Android Studio,新建一个Empty Activity 工程,将需要的功能整理好(支付SDK,登录SDK等等),SDK 至少会有一个文档(有一个Demo更好,可以参考Demo),会告诉你如何调用接口,如何返回值:
注意:新工程不能有中文路径!所有文件都不允许中文字符
举个栗子
XXX接入指南: 一般会有一个调用示例,一个返回值说明。


提示:
如果你的SDK没有文档,而你也不精通Java,建议放弃。
如果有SDK文档,但是你一点Java基础都没有,只是听说过Java,推荐放弃。
至少要会在Java中调用SDK的接口,这样才能为后面的打包入unity做准备,或者让安卓工程师 帮你写好接口,打包,然后直接拿到Unity使用,

如果上述条件都达不到,,,建议先学习下Java的函数调用以及目录结构。

2.导入unity class

找到unity editor的安装目录(此Editor 必须具有打包 Android 的模块)
Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
将这个calsses.jar复制出来
打开File->ProjectStructure,或Ctrl+Shift+Alt+S
在Modules 里创建一个新的Android Library

创建好之后,Gradle Scripts会多出一个build.gradle,需要在这里面进行导入SDK操作,打开后面是项目名+刚才创建的library的名字的文件,然后导入SDK

导入SDK方式有两种:
小白推荐选择系统导入,还是Ctrl+Shift+Alt+S,打开ProjectStructure,选择Dependence,选择刚才创建的模块,加入

将要导入的SDK全部接入即可(可以直接选择文件夹)
**注意:**如果是aar的SDK,必须要转换成Module导入,因为aar的打包,如果包含aar会有包冲突,(全网都这么说,其实只要全部设置为compileOnly即可,因为aar打包含有aar的包会出错)
Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previous versions of the Android Gradle Plugin produce broken AARs in this case too (despite not throwing this error). The following direct local .aar file dependencies of the :myapplication project caused this error:

导入SDK之后,需要将unity 的classes.jar修改为compileOnly,避免unity 打包失败(unity自带这个包,不允许包重复),其余导入的SDK或者SDK文件夹 则是默认的implementation,
全部使用compileOnly 可以解决aar问题,建议全部使用compileOnly

3.Android调用unity

虽然接SDK一般都是 unity调用Android代码,但是还是在这里总结一下,Android调用unity的方法,
上一步接入全部SDK 之后,就可以根据需要调用对应的API
java调用unity,需要使用unityPlayer对象,通过反射调用C#函数
举个栗子:参考javaCallUnity

package com.example.myapplication;import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;public class MyActivity{private Activity unityActivity;private Context context;public void init(){getActivity();}private Activity getActivity(){if(null == unityActivity) {try {Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);unityActivity = activity;context = activity;} catch (ClassNotFoundException e) {System.out.println(e.getMessage());} catch (IllegalAccessException e) {System.out.println(e.getMessage());} catch (NoSuchFieldException e) {System.out.println(e.getMessage());}}return unityActivity;}public void UnityCallJava(final String content) {Log.i("Android", "testInAndroid");Toast.makeText(unityActivity, content,Toast.LENGTH_SHORT).show();}public void javaCallUnity(){Log.i("Android", "testCallback");UnityPlayer.UnitySendMessage("AndroidRecall", "AndroidCallback", "arg1");UnityPlayer.UnitySendMessage("Gameobject","method","param");}}

4.unity调用Android

还是上面代码的例子,参考unityCallJava,只要把SDK的函数写在其中即可(可以带参数,从unity传入),需要参数的SDK就直接写成带参数的SDK即可

假设我们已经写好了所有的函数(静态函数与非静态函数),下一步就是打包入unity,开始编写C#端的代码

建议统一格式,要不全部静态方法,要么全部非静态方法,不同类型,unity端的调用方式不一样

点击library的build.gradle,然后Make Module XXXXXX,

然后就可以在outputs目录找到.aar 文件

如果不想用Debug版,可以修改为release(实际没啥影响,不过还是建议用release)

创建一个Android 目录,然后将aar文件放进去

5.查看 AndroidManifest.xml package

查看android studio 要打包的Library的 AndroidManifest.xml,或者以压缩文件方式打开aar,查看aar的AndroidManifest.xml 的package,、
1.

非静态方法调用

初始化一个AndroidJavaObject,然后进行Call即可,可以看到第一个是方法名,后面的是参数数组,可以向方法传递参数

静态方法调用

如图,CallStatic 即可调用静态方法

unity调用Android 参考代码


using UnityEngine;public class TestButton : MonoBehaviour
{// Start is called before the first frame updateprivate AndroidJavaObject _androidObject;private void Start(){InitAndroidBridge();}private void InitAndroidBridge(){Debug.Log("InitAndroidBridge");//查看AndroidManifest.xml 中的packname  +类名_androidObject = new AndroidJavaObject("com.example.calltest");if (_androidObject == null){Debug.LogError("Lib没有找到");}//这里的init是在Android端定义的init方法,SDK的init可以集中在一起进行调用_androidObject.Call("init");Debug.Log("InitFinish");}public void UnityCallJava(){Debug.Log("unityCallJava");_androidObject.Call("UnityCallJava", "This is a Unity Content!");}public void AndroidCallUnity(){Debug.Log("javaCallUnity");_androidObject.Call("javaCallUnity");}private void AndroidReCall(params string[] args){Debug.Log("安卓回调,unity被安卓调用");}
}

6.Java回调

刚才在Android 调用unity,第一个参数是游戏物体,第二个是物体身上的方法,第三个是参数
UnityPlayer.UnitySendMessage(“Gameobject”,“AndroidReCall”,“param”);
这样就就可以实现 unity 调用Java,然后Java又回调 unity函数,有什么用呢?
好问题,可以实现 结果回调,
比如回调返回登录结果之类的,unity只能往Java传,所以需要Java向unity调用且传递结果
unity界面


Unity接入Android SDK相关推荐

  1. Unity接入安卓sdk查看应用内存占用

    注:若不清楚如何在unity中接入android sdk可先了解下相关流程.项目地址:http://download.csdn.net/download/yhuangher/9976564 在项目后期 ...

  2. Unity 接入 Android ShareSDK

    Unity 接入 Android ShareSDK 网上已经很多关于Unity 接入 ShareSDK 的例子,大多使用的是 ShareSDK For Unity3d 直接导入到Unity 中使用,下 ...

  3. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

  4. Unity接入Android广告: 三、Android端接入小米广告SDK

    1.导入小米广告SDK SDK在 小米开发者平台 中可以下载 导入MimoSdk.jar,右击jar包,Add As Library 在Module的AndroidManifest.xml中加入SDK ...

  5. Unity 接入第三方SDK打包闪退

    在接入穿山甲sdk的时候,打包apk的时候出现适配部分机型,部分机型闪退,出现如下错误 图中可以看出是.so文件引起的问题. 接入第三方sdk的时候,有时候常常需要导入第三方jar包以及aar包,有些 ...

  6. Unity接入高德SDK实现定位

    一.在高德官网下载需要对应的SDK  http://lbs.amap.com/api/android-location-sdk 通过SHA1值获取对应的key值 a.SHA1值得获取:  1.在cmd ...

  7. Unity游戏开发——unity接入多渠道sdk

    最近游戏进入最后测试和接入sdk阶段,对接了多个sdk简单记录和分享一下在接入各个渠道sdk中遇到的问题和坑,在之后或其他人看到之后可以绕过,提高效率仅此而已. 我们使用的unity开发,在选择sdk ...

  8. Unity接入Facebook SDK出现的问题

    问题: Android Build Facebook Settings打不开,里面是空白的,并且报以下错误. Win32Exception: ApplicationName='cmd', Comman ...

  9. unity接入facebook SDK时 警告:“OpenSSL not found. Make sure that OpenSSL is installed

    接入facebook的SDK后配置FacebookSettings时警告OpenSSL not found. 解决方法: 1.下载并安装OpenSSL.http://slproweb.com/prod ...

  10. [SDK]Unity接入Facebook SDK获取用户头像

    官方文档 官方文档:Facebook Login For Gaming 总结如下: 1,你的FB账户内还有一个游戏账户,在Unity中使用FB的官方SDK提供的接口进行登录时,比如 var perms ...

最新文章

  1. Excel数据拆分-分列
  2. bootstrap 树形表格渲染慢_bootstrap-table-treegrid数据量较大时渲染太久了
  3. 设计模式之_工厂系列_02
  4. java起源英文_Abbreviation 英文词组缩写(来源:南阳理工大学ACM)java
  5. java当中递归打印目录树
  6. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
  7. 云小课|大数据时代的隐私利器-GaussDB(DWS)数据脱敏
  8. python类 析构方法
  9. 海洋CMS插件-内置接口的海洋CMS插件
  10. java 多线程 面试题整理(更新......)
  11. 用PS制作透明背景的电子签名
  12. 关于三极管集电极电压1V以上后伏安特性曲线不右移
  13. windows能装linux系统盘,用U盘安装linux系统(Windows环境下制作启动盘)
  14. 计算2015年4月6日是一年中的第几星期
  15. mysql group by 之后取每个分组最新的一条(或者按照自定义的规则排序)
  16. 《Cracking the Coding Interview程序员面试金典》----猫狗收容所
  17. 优麒麟配置java环境变量
  18. 【java_设计模式】建造者模式
  19. 带有当前位置坐标的地图
  20. 首个“中国籍”曲妥珠单抗于欧盟获批上市

热门文章

  1. MacBook突然没了声音
  2. 51单片机-LED点阵
  3. 物联网单位换算:光的强度与辐射转换
  4. 记java的那些编辑器的故事之凌嘉文+李晓彤-结对编程
  5. Java实现文件下载Zip压缩
  6. EXCEL合并单元格内容并换行显示
  7. 计算机第一级开机密码设置,开机密码怎么设置
  8. 苹果电脑系统如何读取移动硬盘数据?
  9. web服务器共享文件夹,局域网web共享文件夹的方法
  10. 华为eSight网络监控平台配置短信功能说明