U8SDK——渠道SDK接入详解(以百度SDK为例)

作者: 分类: U8SDK 发布时间: 2015-05-02 16:34 623条评论

之前在说渠道SDK接入的时候,我们留了个尾巴没说。很多童鞋在开始使用u8sdk的时候,经常会问道。虽然之前写了一篇 UC SDK接入的Demo文章,但是很多童鞋看了还是不清楚,怎么基于u8sdk来完成新渠道SDK的接入。
 
下面我们继续以百度渠道为例完整详细地演示一遍,怎么基于u8sdk框架来接入一个新的渠道SDK
 
首先,拿到百度的SDK,我们一样会去看SDK提供的接入说明文档,知道百度SDK主要需要接入登陆和支付两大功能
 
首先将U8SDK的抽象层工程导入到eclipse中。然后新建一个Android工程叫U8SDK_Baidu,并将U8SDK引用到该工程(怎么在eclipse中添加依赖工程请看 这里)。添加完毕之后,紧接着把百度SDK需要的jar包拷贝到U8SDK_Baidu工程的libs目录下。然后就可以在U8SDK_Baidu工程中进行百度SDK的接入工作了。新建一个包名,比如叫com.u8.sdk。包名建好之后,先啥都不用想,新建三个类:BaiduUser,BaiduPay,BaiduSDK.其中:
 

BaiduUser需要实现com.u8.sdk.IUser接口。并且拥有一个参数的构造函数,参数类型是Activity
BaiduPay需要实现com.u8.sdk.IPay接口。并且拥有一个参数的构造函数,参数类型是Activity
BaiduSDK是一个单例类。关于如何在java中实现单例模式,请看 这里

所有其他SDK都是类似的。比如X渠道,那么必定会有对应这三个类:XUser implements IUser; XPay implements IPay; XSDK.getInstance();
 

之前介绍 U8SDK抽象层时说过,U8SDK采用插件式的设计模式,所以,我们将用户相关的功能定义为一个User插件;当支付相关的功能定义为一个Pay插件。具体的类代表分别是IUser接口和IPay接口。
 
所以,在接入具体的SDK时,我们需要实现这两个插件。对应的,我们就必须定义一个XUser和XPay来分别实现IUser和IPay接口。如果后面你需要加入其它的功能,比如分享,统计等功能,你可以在u8sdk抽象层中定义一个IShare,IStat接口,来代表分享插件和统计插件即可。
 

那么BaiduSDK这个单例主要来做什么呢?BaiduSDK这个单例类,我们是用来做具体的接入工作的。你在接SDK的时候,看他提供的Demo和文档里面说,必须接入登陆方法,支付方法啥的。这些接入工作全都放在BaiduSDK这个单例类里面完成。
 
比如BaiduSDK类里面你已经实现了两个方法:login和pay。分别对应是百度SDK的登陆和支付。那么,在BaiduUser类的实现方法login中,直接通过BaiduSDK.getInstance().login()方法调用即可实现登陆功能。在BaiduPay类的实现方法中,直接通过BaiduSDK.getInstance().pay()方法调用即可调用支付功能。

这样整个接入工作就简单了。所有的接口都封装在XSDK这个单例类里面。XUser和XPay里面不做具体的接入逻辑,仅仅是调用XSDK这个单例类中对应的方法而已。
 

SDK一般都需要初始化,如果渠道没有具体的要求,我们一般将SDK的初始化放在XUser的构造函数中调用,而XUser是在activity的onCreate方法中实例化的,所以,也就是游戏一启动,就开始了SDK的初始化操作。
 

如果某些渠道要求在Application的onCreate或者attachBaseContext方法中初始化或者进行一些其他的操作,那么你需要参照 u8sdk中关于Application的设计来完成对应的调用。说到Application,百度SDK也要求程序必须继承他们提供的BDGameApplication。根据之前我们说的u8sdk中Application的设计,我们可以很轻松的做到。这里不再赘述。
 

对于还需要的其他辅助类可以自行添加在工程中。
 

接完之后,就像这样:
 
u8sdk_demo2
 
 
对应的几个关键类分别是:

到此百度SDK的代码接入工作就算完成了。接下来,我们需要做两个配置。sdk_config.xml和sdk_manifest.xml。我们先在工程的根目录下定义一个sdk_config.xml文件,文件内容如下:

这就是一个普通的xml文件,里面分为三个部分:params,ops,supports。
 
params里面定义的是渠道的参数,name是参数的名称,你可以任意定义,只要在BaiduSDK单例类里面parseSDKParams方法里面解析的时候和这里一一对应就可以了。
value就是参数对应的值了。那么你还看到两个参数。一个是bWriteInClient一个是bWriteInMenifest。
如果bWriteInClient=”1″或者你既没有配置bWriteInClient也没有配置bWriteInManifest,那么该条参数就会被打包工具写入到assets目录下的develop_config.properties文件中。而如果你配置了bWriteInManifest=”1″;那么该条参数就会被打包工具写入到AndroidManifest.xml中application节点下的meta-data里面.关于这两个参数的设计,可以参考之前的博客: 越空之门
 
为什么要有这两个区别呢?那是因为有些渠道要求必须将某些参数配置到AndroidManifest.xml的meta-data中。而某些参数就是自己配置。
通过这种方式,你在配置参数的时候,就无需将他们分开,直接配置在sdk_config.xml里面,通过bWriteInClient和bWriteInManifest来根据要求选择配置到哪里即可。
 
第二部分是ops。这里配置了打包工具在打包过程中,需要进行的一些操作。type=”merge”,就是指文件的合并。这里配置的是将sdk_manifest.xml合并到最终的AndroidMainifest.xml中。而type=”copy”,则指的是将from对应的文件夹或者文件拷贝到to指定的最终的反编译目录下的文件夹或者文件。
 
第三部分是supports。这里定义的是当前这个渠道SDK支持哪些插件。这里name配置插件实现类的完整类名。我们之前实现了用户插件和支付插件。所以这里我们配置一个BaiduUser和BaiduPay。其中type是固定的,1表示用户插件;2表示支付插件。
 
这些参数的定义在U8SDK的抽象层中。具体渠道在运行的时候,抽象层就是根据该配置里面的name属性,根据java里面的反射Class.forName来实例化具体的插件类。具体的实现你可以参考U8SDK抽象层代码。打包工具在打包的时候,会将supports中配置的插件写入到assets目录下的plugin_config.xml文件。
 
所以,可以看到,sdk_config.xml这个配置,就是为打包工具准备的。打包工具会根据该配置完成该渠道的打包工作。
 
下面,我们再来看看sdk_manifest.xml。百度SDK对应的文件内容如下:
 

可以看到这也就是一个普通的xml配置文件。有两大节点。permissionConfig和applicationConfig。permissionConfig节点下就是配置该渠道所需要的权限信息;applicationConfig节点下,就是配置渠道SDK需要在AndroidManfiest.xml的application节点下配置的所有信息。
 
打包工具在合并的时候,也就是将permissionConfig下的权限信息合并到AndroidManifest.xml的权限中。将applicationConfig节点下所有的内容添加到AndroidManfiest.xml的application节点下。
 
需要注意下的就是,在applicationConfig节点上,我们定义了两个属性。一个是keyword,一个是proxyApplication.keyword原本是用来查重的。但是作用不大,一般不会出现重复。配置时可以直接配置成渠道SDK第一个activity或者service等的名字。当然你不配置也可以。
 
而proxyApplication是某些渠道需要在Application的生命周期方法中去做些操作。所以,在u8sdk中我们之前就已经实现了关于application这块的设计。你可以参考之前的博客: 逆空穿梭
 

这两个文件定义好之后,我们就可以到打包工具目录下去添加该渠道的配置了。

1、首先到打包工具目录下sdks/sdk目录下新建一个唯一名称的文件夹。我们这里叫baidu

2、然后我们在baidu目录下新建三个子目录,assets,libs,res.这三个子目录分别对应我们之前在sdk_config.xml中ops节点中配置的from目录。

3、我们去百度提供的SDK目录下,看看他需要将哪些资源放在assets目录中,哪些资源需要放在res下,哪些资源需要放在libs中。

  3.1:没有需要放在assets目录中的资源。

  3.2: 将百度提供的res资源文件夹下的所有内容拷贝到baidu/res目录下。

  3.3:将百度提供的libs目录下的依赖的文件拷贝到baidu/libs目录下。注意,libs目录下,我们不需要拷贝.jar文件,仅仅把除了.jar文件
的所有其他.so文件或者文件夹拷贝到libs目录下即可。
 
然后assets目录下是空的,res目录和libs目录下内容分别如下图:
 
u8sdk_demo3
 
 
u8sdk_demo4
 

4、我们回到eclipse中的U8SDK_Baidu工程,右键->Run as->Android Application.然后在该工程的bin目录下你会看到生成了一些文件,其中有一个classes.dex文件。
 
我们这里run的目的不是为了生成apk包,仅仅是为了生成classes.dex文件。这个时候生成的apk包,安装到手机也是运行不起来的。该classes.dex文件里面已经包含所有libs目录下的jar包。所以上一步操作,我们无需拷贝.jar文件。
 
然后,我们将该classes.dex文件,以及我们之前创建的sdk_config.xml和sdk_manifest.xml文件一起拷贝到打包工具中我们刚创建的baidu目录下。
 
注意:如果你重复步骤4,在操作之前你需要在eclipse顶部的菜单栏中选择Project->Clean 然后Clean一下该工程。Clean的作用就是清空bin目录下的内容,然后你重新RunAs一下,又会重新在bin目录下生成classes.dex文件了。
 
现在打包工具中sdks/sdk/baidu目录下就是这个样子:
 
u8sdk_demo5
 

5、到第四步就已经配置完毕了,那么我们怎么用打包功能来出包测试呢。我们在sdks目录下有一个config.xml这个文件就是配置当前需要打包的渠道。在该配置中增加上我们刚刚实现的baidu渠道SDK的配置即可。
 
6、然后你就可以运行U8SDKPacker目录下的pack_debug.bat文件开始打包了。打包完毕在packages目录下会生成一个baidu文件夹,这里就是最终的渠道包了。
 
好了,到这里你应该对u8sdk中接入新渠道的流程有了八九成的了解。如果还有啥不明白的可以QQ私聊我(2848004717)或者欢迎加入U8SDK交流群(207609068)
 
请记住,这里是u8sdk的官方网站:http://www.uustory.com

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=1619

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
带你装逼带你飞
点击加入