由于 android客户端 需要接 不同渠道包,SDK之类的
能否在一个 项目工程里 通过 gradle分版 来接不同的SDK 而不互相影响
看到
https://developer.android.com/studio/build/build-variants
这个配置构建变体, 还是不太明白啊!
有没有大神 指点一下啊!
我们是维护多个工程的,感觉在同一个工程里处理各种渠道的sdk还是挺难的,不同渠道差别太大了,而且对一些基础库的版本要求也不一样。或者用一些第三方打包工具,比如U8SDK。
这个变体可以做到不同包名、第三方库、资源等差异,但是不好根据变体去做一些额外处理,例如多个版本自动管理版本号,因为构建时是没有变体这个概念的。所以我是用gradle做一些资源、库等差异处理外加脚本去做其他额外差异。如果有更好的做法我也想学习下。
在java/oc层抽象一套接口到js,然后在java那边对不同的sdk做不同的实现,通过productflavor和sourceset应该能实现接入不同的sdk吧?还没实操过
逻辑上肯定是可以的,但是各个渠道的sdk差别太大,需要处理的细节比较多,都维护在一个工程的话工作量太大了。说到这个,国内这些渠道sdk实在工程能力太差了,都这个年代了,理应该做的比较优雅,实际还要拷贝这样那样,尤其升级版本的时候更是一团糟。要通过git log把旧版本的资源先删掉,然后再引入新版本资源。。
我微信还在用7年前的sdk。。。。
每次编译要10GB的硬盘空间, 伤不起啊!
你这个方案 貌似很好,可以详细说明一下吗?
还有 有没有碰到坑呀! 给大家讲讲呗!
硬盘都是小问题啦,nvme ssd 1TB走起~
gradle本身都可以单独当一门课去学了,内容还是很多的,功能也很强大,资源路径,sdk库什么的都可以自定义,我现在的项目就是用的一个工程管理的,目前还没遇到什么问题,对于纯做游戏前端的人来说,去新学习这些确实挺头疼的,但这也是高手必经之路,如果弄好了一套标准模板,很多项目都可以套用,就不用分开维护了,可能还节省了一些时间。
另外渠道sdk升级麻烦确实是个问题,不过现在比以前好不少了,大的渠道基本都精简了打包升级流程,不用操心文件删除或替换的问题,小渠道就认命吧,我们能做的就是尽量不升级sdk,只做热更。
我目前的做法:
gradle.properties:
定义一个CHANNEL变量

settings.gradle:
根据CHANNEL,include不同的library
工程级的build.gradle中,根据CHANNEL,apply不同的gradle脚本:
xxx_build.gradle中,可以定义多级的Flavors,对于同一个CHANNEL,可以做分包处理:
以及管理各自不同的资源
非常棒啊!给你点赞啦!
对于要接入sdk的游戏,上层需要自己做一个抽象的封装,对接不同的sdk。单个的sdk做成library,根据CHANNEL导入。代码中可以根据分包中定义的manifest中的变量,通过反射生成相应的对象来处理sdk逻辑,顺便解耦了主逻辑和sdk





