Unity3d Android SDK接入解析接入Android Library的理解(爱贝云支付为例)

Posted 小杨在玩iOS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d Android SDK接入解析接入Android Library的理解(爱贝云支付为例)相关的知识,希望对你有一定的参考价值。

一、前言

写这个主题的原因,出于刚入门u3d,需要接入爱贝云支付的内容,苦于爱贝支付是一个android的Library库,看到网上漫天遍野都是Android接入的帖子,但却没有我想要的关于Library的接入指导。最后,通过不断的反编译研究其他的SDK(看过了友盟、小米等等的SDK),终于还是摸到了一些关键点,这也促成了前面两篇的内容。这一篇的关键的技术点在前两篇基本上都有讲过,在此回顾一下接入过程中遇到的问题和自己的思考,补充一些漏掉的东西。

有兴趣的可以看看我的前两篇文章:
Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用:
http://blog.csdn.net/yang8456211/article/details/51331358

Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式
http://blog.csdn.net/yang8456211/article/details/51356193

让我们进入正题

二、对于Library应该考虑什么?

(首先声明两点)
1. 我们讨论的是Library的Plugins接入方式,导出工程式的方式比较直观就不赘述了。
2. 并不是所有的Library形式的SDK都可以Plugins的形式进行接入。

2.1 分离Library的内容

一般u3d的SDK会直接提供代码+资源的形式,但Library并没有直观的给出这两者,不过我们可以自己把它分离出来:

  • 代码:

    通常放在libs文件夹,分为两种形式,一种是jar包的形式,一种是so库文件的形式。(assets可能也会有一些bin类型的文件)

    jar包即为源码,so文件一般是一些依赖库,放在不同的ABI文件夹里面(armeabi),需要注意的是,u3d编译的时候支持的cpu类型主要有两种,一种是armeabi-v7a,一种是x86,所接入的SDK最好需要有这两个cpu类型的so文件。

  • 资源:

    资源通常是放在res文件夹中(也有可能放在assets中),要注意的是当接入多个SDK的时候,value里面的string等资源的id不要重复了。

  • 配置:

    一般只有AndroidManifest文件。

我们分离出这三个部分,就可以把这个几个部分分别放到Plugins对应的文件夹中去了。

2.2 怎么样的Library能够接入

如果Library中的代码部分没有经过处理,一般是不能够用Plugins形式进行接入的,因为拆分了代码和资源,会导致R文件找不到资源的id。那这种情况应该怎么处理呢,我在中篇的内容中有讲到,如果我们自己编写SDK的话,就需要修改所有R文件的资源读取方式为包名+类名的反射调用。

而对于其他的SDK呢,我们无法对其进行修改,不过我们可以通过观察源码来判断这个SDK是否能够被接入:(以爱贝的jar为例)

1)通过JD-GUI查看SDK的jar包

2)随便搜索一个findViewById方法,可以看到爱贝的读取资源的方式并不是通过R来取得的,而是通过包名+c.a.a(这里是爱贝进行了代码混淆)

我们点进a方法继续查看

虽然进行了混淆,但是不难看出就是通过反射的机制来取的资源,所以这样的Library是可以以Plugins的方式进行接入的。

当然,如果觉得找代码比较麻烦,可以在接入SDK之前,写一个简单的demo试试,如果能够正常调用而没有爆出R$string找不到这类异常的话,那就是没有问题的。

三、还需要修改些什么?

我们知道了一个Library能够进行接入还是不够的,因为U3d和Android进行交互的时候(看前篇),有两个问题:

  • 第一是U3d没有办法在调用Android接口时传入一个Listener的参数

    所以我们没有办法直接在U3d调用一个参数需要listener的Android函数。

  • 第二是没有办法接收到Listener的异步回调。

所以最好的方法是在Android层再进行一层的封装,封装给U3d调用的方法接口和回调函数,那样我们在接入Library的时候只用在Cs脚本里面处理相关的调用和回调就可以了,当SDK进行了修改,我们也只用修改我们封装的接口层(通常只是一个jar包),而不用修改我们的Cs代码和游戏的接入逻辑。

至于接口层该怎么去写,每个人的习惯和喜好都不同,就因人而异了。

四、总结


U3d接入Android的SDK看上去简单,但为了研究他我也花了不止一个星期的时间,在研究SDK接入的同时也理解怎么自己去做一个方便U3d接入的SDK,了解了移动端cpu的主流架构等等,知识总是无穷无尽的,知道的越多不知道的就越多。对于此系列来说,自我感觉已经讲清楚了很多问题,如果还有不明白的地方,希望可以给我留言~

杨光(atany)原创,转载请注明博主与博文链接,未经博主允许,禁止任何商业用途。
博文地址:http://blog.csdn.net/yang8456211/article/details/51435465
博客地址:http://blog.csdn.net/yang8456211
本文遵循“署名-非商业用途-保持一致”创作公用协议

以上是关于Unity3d Android SDK接入解析接入Android Library的理解(爱贝云支付为例)的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d Android SDK接入解析通用的Android SDK接入中间件

Unity3d Android SDK接入解析接入Android Library的理解(爱贝云支付为例)

Unity3d Android SDK接入解析Unity3d 与 Android之间的互相调用

在unity3d 接入Android的时候出现如下问题.请问如何解决

Unity之SDK接入(Unity与Android通信)

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