unity接入第三方SDK入门教程(安卓端)

前言

刚入职时接过一次SDK,不过当时由于经验不足接入失败了。现在工作已经半年了,前几天又遇到接入SDK的需求,于是这次主动请缨,抱着一雪前耻的决心打算与SDK接入刚到底,最终花了三天时间搞定。其实接入SDK并不困难,但是从来没接触过的人可能会一脸懵逼。下面总结接入的经验,供自己日后查看翻阅,也希望能对你有所帮助。

1.准备工作

1.1创建项目

我使用的是AndroidStudio,安装步骤就不一一赘述了,下面从创建项目开始讲起。
首先选择EmptyActivity,然后选择Next,如下图所示。在这里插入图片描述
之后会弹出下图内容。Name可以自己随便取一个,Package name是包名,按照给的格式随便设置。我看其他教程说需要和Unity包名一致,但是我用一样的包名反而报错,导进Unity后打包报错说文件冲突,具体细节我也不是很懂,就不多bb了,反正我用的是自己随便设置的。再下面的Save location是保存位置,这里随意。Language选择java,API选择和Unity设置里一样的版本,我选择的是比较低的版本,毕竟软件都是向下兼容。之后就可以点Finish创建项目了。在这里插入图片描述

1.2安卓简单介绍

下面简单的介绍下AndroidStudio(下面简称AS)。对于Unity开发者而言,不需要完全掌握AS,了解常用功能即可。
首先是左上角的工程目录(如图),里面的不同选项会显示不同的内容,可以根据自己的需求选择对应的目录。
在这里插入图片描述
改完代码后要选择Rebuild Project,重新构建。
在这里插入图片描述
左下角是输出面板,Logcat是显示手机设备输出信息的,记得连接手机要打开开发者选项里的调试功能。
在这里插入图片描述
可以自定义过滤输出内容,(如图)
在这里插入图片描述
设置中自定义名称和过滤文本,下文中会讲Log Tag怎么设置。
在这里插入图片描述
下图是工程目录,脚本、AndroidManifest还有build.grade的位置。AndroidManifest可以设置权限,进入的主Activity等等,build.grade可以设置打包类型,依赖项等等。
在这里插入图片描述
Sync也是经常用的,比如改完配置文件后需要同步后才生效。
在这里插入图片描述

1.3接入SDK准备

首先把layout下面的xml文件删掉,如果删不掉就取消safe delete。删掉后会报错,把Main Activity脚本中下图所标示的代码删掉即可。
在这里插入图片描述
在这里插入图片描述
因为我们最终导出的是jar,默认导出的是app,所以我们需要修改一下grade,将application改成library,之后点击sync,如下图所示。
在这里插入图片描述在这里插入图片描述
点击Rebuild后就可以生成aar和jar了,生成路径如下图所示。在这里插入图片描述
在这里插入图片描述
jar和aar有什么区别呢?jar是纯代码,aar包含了代码及其依赖项,比jar大一些。这次接入我使用的是jar,主程也推荐使用jar进行接入。
导入第三方类库的时候要将其放置在lib目录下,并且在grade下添加依赖,如图所示。
注意使用jar的话导出到Unity后需要将lib中的依赖也导入进去,项目中已经有的不需要重复添加,比如说classes.jar。下面讲一下classes.jar。
在这里插入图片描述
classes.jar在unity的安装目录下,如图。Android与unity交互很多东西依赖于它,后面会讲具体用法。
在这里插入图片描述
到这里基本的使用就介绍的差不多了,最后说一点也是最关键的一点就是我们写代码的位置。路径如下图所示,我们也可以在路径下创建新的class。
在这里插入图片描述

2.开始接入SDK

2.1Unity调用Android

接入SDK其实就是一个Unity与Android交互的过程。
Unity调用Android主要依赖的就是AndroidJavaObject这个类。
官方文档
下面给出简单示例:

instance = new AndroidJavaClass("com.lcy.whalersdk.UnityWhalerHelper").CallStatic<AndroidJavaObject>("getInstance");

意思就是调用com.lcy.whalersdk这个包名下UnityWhalerHelper类的getInstance静态方法。(注意AndroidJavaClass和AndroidJavaObject的区分)
可以在AndroidStudio中写个中间类用于调用SDK中的内容,Unity这边只需要调用这个中间类就可以了。

2.2Android调用Unity

Unity可以调用Android中的内容,同样的Android也可以向Unity发送消息。
注意需要引用classes.jar
代码示例:

UnityPlayer.UnitySendMessage("GameObjectName","MethodName",params object[] args)

代码很简单,第一个参数是Unity中指定一个GameObject的名字,第二个参数是方法的名字,再后面就是向这个方法传的参数了。

3.SDK接入经验与细节

接入SDK需要按照SDK文档给出的步骤来。
有可能需要在Activity或者Application中初始化SDK。如果是Activity的话就需要继承上文提到的classes.jar中的UnityActivity,如下图。在这里插入图片描述
需要在Application中初始的话可以直接自己建个类,然后继承Application就可以了。
在这里插入图片描述
完成初始化步骤后还需要在AndroidManifest.xml中设置Activity或者Application为启动项,如下图。到这里你可能会有疑问怎么在unity中使用AndroidManifest。下面会介绍AndroidManifest怎样使用以及在AndroidStudio中调试unity项目。
在这里插入图片描述
在这里插入图片描述
如果需要在AndroidStudio中调试unity项目的话首先需要导出Android项目包,在unity打包时勾选ExportProject,然后用AndroidStudio打开就可以。导入后即可自动生成AndroidManifest.xml文件(要注意找对)。将AndroidManifest放入Unity目录Plugins->Android下即可。这个文件非常重要,比如获取权限也依靠此文件,不过要注意部分权限需要动态获取。新版本Unity也可以在Project Settings下勾选Custum Main Manifest自动生成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

还遇到一个问题就是之前接过SDK了,AndroidManifest中启动项设置的是之前接入的SDK的。我的解决方法非常简单粗暴,无论是Activity或者是Application都继承当前的的启动项即可。如下图就是继承之前的SDK的Application。
在这里插入图片描述
Android中需要传入activity参数的方法都传入currentActivity。(需要使用classes.jar)
unity中调用SDK枚举变量可以参照下面的例子。com.zeus.sdk.ad.base为包名,AdType为枚举关键字,BANNER是具体调用的指定枚举名。

AndroidJavaClass("com.zeus.sdk.ad.base.AdType").GetStatic<AndroidJavaObject>("BANNER");

有时传值会用到java的map,map是java独有的,所以我为了方便是在android端接入的。

        Map<String,String> map = new HashMap<String,String>();//创建map
        map.put("李四","007");//通过put方法进行增加内容
        map.put("王五","006");        
        String val = map.get("李四");//通过get取值

到此SDK接入教程就告一段落了。目前使用到的就这些内容,如果后面有用到新的知识会继续更新。欢迎大家给我留言。
遇到困难不要怕,干就完了,奥里给!


版权声明:本文为qq_39162826原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。