U8SDK——强烈建议的开发原则
如今我们在开发android app的时候, 基本都会用到各种第三方SDK库。 如果只是开发单纯的app,那么在评估是否使用这些第三方库的时候,我们并不需要那么纠结。
这篇文章,我们来说一说开发Android SDK插件,主要以手游联运SDK为例来说一说SDK开发过程中我们最好遵循的几个原则;当然,这里的原则,并不仅仅适用于手游联运SDK,也同样适用于其他领域的SDK,比如语音SDK,地图SDK等等。
如果您有过接其他SDK的经验, 可以回想一下,是否有在接入SDK的过程中遇到冲突的情况。 举一个简单的案例:
我们在开发一款手机游戏,为了让手机游戏里面能够拥有实时语音的能力,我们接入了腾讯语音插件;终于接好了插件, 让游戏拥有了语音能力。然后开始要上一些联运渠道平台,上架手游联运平台的时候, 我们必须接入平台提供的联运SDK。我们以Oppo游戏商店为例,上架Oppo游戏商店之前,我们需要先在游戏中接入Oppo的联运SDK。接入的时候,我们就发现了难点:Oppo 联运SDK中依赖了android support 库;腾讯语音SDK也依赖了android support 库。 当我们尝试将两个SDK都接入到游戏中时,我们发现编译时,它们冲突了。
在上面这个例子中,这仅仅是冲突存在的可能之一,我们可能也可以通过技术手段解决这样的冲突。
但是我们开发的SDK,可能会提供给成千上万的开发者去使用, 我们并无法保证这些开发者所开发的游戏中是否有接入其他第三方SDK,或者本身是否有使用到这些第三方SDK。 所以,为了节省咱们自己的时间,也同样为了方便所有的开发者, 我们在开发SDK的时候, 就应该考虑到这些可能存在的情况。
在我们游戏开发过程中, 我们遇到很多次冲突的情况,其中总结下来最常见的不外乎以下几种情况:
1、不同的SDK依赖了相同的第三方库,而且第三方库的版本还不相同
2、SDK库中的资源文件或者定义和其他库中的资源文件命名冲突
3、SDK库中直接使用资源索引(R.java)的直接引用,导致游戏接入之后, 资源引用丢失的情况
当准备认真对待这些问题时, 我们就心中有数了。 针对上面这些问题,如果我们在开发SDK的时候提前意识到,其实都不难解决。 下面我们就针对这些问题一一提出对应的原则(或者叫解决方案)
1、不同的SDK依赖了相同的第三方库,而且第三方库的版本还不相同
1 2 3 4 5 6 |
原则1:在开发Android SDK插件时,特别是手游联运SDK时,我们应该尽可能地避免依赖过多的第三方库。 特别是一些知名的库,比如android support库,okhttp3, glide, eventbus等等。 如果您确实要使用, 也可以使用jarjar这样的工具将这些开源库的包名改为您自定义的名称。 同时,我们应该尽量避免因为某几个api就引入一个重量级的库。 这可能会导致我们最终的apk中因为方法数或者变量引用数超出65536而要拆分为多个dex,这会降低apk的运行效率。 |
2、SDK库中的资源文件或者定义和其他库中的资源文件命名冲突
1 2 |
原则2:资源文件都以固定的格式开头,比如u8_strings.xml,u8_layout.xml等。资源变量的命名同样如此。 |
3、SDK库中直接使用资源索引(R.java)的直接引用,导致游戏接入之后, 资源引用丢失的情况
1 2 |
原则3:所有对资源的引用,统一使用context.getResources().getIdentifier()的方式动态获取资源ID |
通过遵循上面这些原则,开发的时候,您可能要多写不少代码。但是后面别人在接入您的SDK时, 出现冲突的概率将大大降低。这无疑增加了SDK的适用性和易接性。所以,这些努力也是值得的。
本文出自 U8SDK技术博客,转载时请注明出处及相应链接。
本文永久链接: http://www.uustory.com/?p=2349