入职三个月,游戏SDK开发总结

本文总结了作者在游戏SDK开发中的经验,包括如何解决依赖冲突,对外暴露最少的接口,以及遇到的坑,如SDK需兼容Eclipse,setContentView导致的崩溃问题。文章介绍了使用exclude和force配置解决依赖冲突,以及通过接口管理和单例模式来封装SDK的内部逻辑。此外,还讨论了SDK在Eclipse下开发时遇到的资源ID不匹配问题及其解决方案。最后,提到了日志开关、配置检查等后期维护策略。
摘要由CSDN通过智能技术生成

而是通过手写网络框架,手写数据库等等,主要是考虑两个方面:

  • 减小SDK体积 ;
  • 避免第三方接入的时候发生依赖冲突

当然,依赖库并不是说不能用,有时候一些数据统计的库需要依赖第三方,那这种情况是没有办法避免的,可以在对接文档中提供一个解决依赖冲突的办法

3.2 解决依赖冲突

方式一

在app的build.gradle中添加类似配置如下:

configurations.all {
resolutionStrategy {
//解决v4包冲突,强制使用这个版本的v4包
force ‘com.android.support:support-v4:26.1.0’
}
}

方式二

exclude

implementation(“com.xxx.xxx:xx”) {
exclude group: ‘com.android.support’
}
复制代码

exclude是最常用的解决依赖冲突的方式,但如果多个依赖库引入不同版本的其它库,需要分别写好多个exclude,显然第一种方式比较简单粗暴。

3.3 对外暴露的接口尽量少

面向接口编程,以游戏SDK为例,对外暴露的接口一般有SDK初始化、登录、支付等,参考设计如下:

定义接口:

interface IGame {

// 1、在Application中调用,
fun registerApp(context: ApplicationContext, appId: String)

// 2、在activity中初始化
fun init(activity: Activity)

// 3、业务接口,登录、支付等等
fun login(loginCallBack: LoginCallBack)

fun pay(product: Product, payCallBack: PayCallBack)

}
复制代码

实现类

/**

  • 实现类
    */
    class GameImpl : IGame{

override fun registerApp(context: ApplicationContext, appId: String) {
//appid相关
}

override fun init(activity: Activity) {
//初始化逻辑,例如显示悬浮窗
}

override fun login(loginCallBack: LoginCallBack) {
//登录逻辑
}

override fun pay(product: Product, payCallBack: PayCallBack) {
//支付逻辑
}

}

复制代码

实现类是我们的内部逻辑,我们不希望被外部访问到,外部只需要知道有 IGame这个接口中的方法就行,我们可以再写个单例的管理类来给外部使用

/**

  • 单例的SDK管理类
    */
    object GameSDKManager :IGame{

//实现类私有化
private val gameImpl: IGame by lazy { GameImpl() }

override fun registerApp(application: Application, appId: String) {
gameImpl.registerApp(application,appId)
}

override fun init(activity: Activity) {
gameImpl.init(activity)
}

override fun login(loginCallBack: LoginCallBack) {
gameImpl.login(loginCallBack)
}

override fun pay(product: Product, payCallBack: PayCallBack) {
gameImpl.pay(product,payCallBack)
}

}

复制代码

kotlinobject关键字表示单例,

外部通过GameSDKManager.xxx来调用SDK中的方法,
以后要提供其它方法,只要修改 IGame接口,然后在 GameSDKManager 和 GameImpl 中分别实现即可。

当然,不是说一定要这样拆分三个类,这只是一个面向接口编程的例子。

四、游戏SDK的坑

游戏SDK前期开发自测可能是很顺利的,难度不大,但是在跟游戏对接的时候可能会出现一些问题, 什么ClassNotFound、Resource not found、依赖冲突、崩溃等等,至于为什么这样,下面会介绍~

4.1 SDK要支持Eclipse

SDK 1.0 测试通过,正式上线,高高兴兴地把文档甩给对接方,心里想,这个我测过的没问题,demo也给了,只要按照文档和demo来,问题不大。

然而,对方回复了一句:“有Eclipse接入文档吗?”

我一脸懵逼,这都什么年代了,真还有人用Eclipse开发App?

我想试图说服对方用Android Studio,然后得到的回复是:其它的游戏SDK都提供了Eclipse的接入方式~

想起我上一次用Eclipse应该是大三的时候…

就这样,第二天下载了Eclipse之后,按照教程安装APT插件,然而编译一直报错,忘记具体的错误信息了,最终的解决办法是下载了一份Eclipse版本的SDK,Eclipse 不能使用Android Studio版本的SDK

好了,Eclipse环境弄好了,hello world也跑起来了,开始写demo~

由于SDK的产物是aar,而

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值