U8SDK——关于渠道自定义Application的适配

作者: 分类: U8SDK 发布时间: 2015-02-07 10:39 6没有评论

我们知道,每个android应用程序中都有一个唯一的上下文Application对象,这个Application一般我们不需要去关心他,应用启动时,系统会自动创建一个默认的Application实例。但是,因为Application在整个应用中是唯一的,也就是说,他是一个单例。所以,有的应用就可能希望利用Application来完成一些工作。

好在,在android中,实现一个自定义的Application是很简单的。直接自定义一个类继承Application,然后在AndroidManifest.xml的application节点属性里将android:name设置为你自定义的这个application类即刻。

那么,Application和U8SDK又有什么关系呢?

这个是因为部分渠道SDK(比如百度SDK),正是在Application级别做了些事情,使得接入他们的游戏,需要使用他们的Application,或者自定义一个Application去继承SDK的Application,在Application对应的接口里调用他们的方法。

但是,现在问题来了,因为U8SDK整套框架的核心思想就是,兼顾所有渠道。不可能直接在游戏的AndroidManifest.xml中配置上某个渠道的Application或者自定义一个Application,去继承某一个渠道的Application。然而,渠道的要求很明确的横在中间,我们必须想办法越过去。

幸运的是,方法总是有的。在这里,我在U8SDK抽象层中定义了一个Application监听器IApplicationListener,同时定义一个继承了Application类的U8Application。在U8Application类中,维护了一个IApplicationListener实例。这样在U8Application的onCreate,attackBaseContext等方法中,会间接的调用IApplicationListener中相应的接口。

这样,在具体接入渠道SDK的时候,我们就定一个适配器模式的类来继承渠道自己的Application,同时实现U8SDK抽象层的IApplicationListener接口。然后在IApplicationListener的接口实现中,直接调用基类(渠道SDK的Application)的对应方法。

然后,游戏层如果有自己的Application,那么需要将该Application继承U8Application,如果没有自定义Application,那么就直接将U8Application配置到AndroidManifest.xml的application节点的android:name属性中。(怎么配置自定义Application可以百度科普一下)。**

现在关键的问题是,在U8SDK抽象层的U8Application中,我们怎么知道当前需要实例化哪个IApplicationListener的实现类呢?也就是说,如果百度SDK和小米SDK里我都实现了IApplicaitonListener的实现类。那么,在生成渠道包的时候,怎么样U8Application实例化对应的实现类呢?问题很简单,我们在各个渠道接入的时候,已经定义了一个sdk_manifest.xml配置。在这个配置中,我们再加入一个配置。就是来配置这个IApplicationListener的实现类。在applicationConfig节点的keyword后面,我们再加一个属性:proxyApplication.这样我们可以这样来配置这个属性,比如:proxyApplication=com.u8.sdk.BDProxyApplication.

这样,我们在打包工具的脚本在合并Manifest文件时,加入这一段配置的解析就可以了。关于打包工具详细的机制和原理,后续的文章会说道。如果已经购买视频拿到源码在使用的童鞋。可以将打包工具脚本apk_utils.py中的mergeManifest方法改为如下形式:

这样,我们就实现了在U8SDK中支持了渠道自定义Application。同时,各个渠道自定义的Application也不会影响到U8SDK整体的框架。在U8SDK中,我们实现的这几个类的源码:

同时,为了,验证这套东西可行,我模拟了百度SDK的场景。加入两个类。BaiduApplication和BDProxyApplication.其中,BaiduApplication是模拟百度SDK自己的Application,而BDProxyApplication则是IApplicationListener的实现类,同时也继承BaiduApplication。

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

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

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