单工程维护多项目

实现前提

原生工程的升级
  • 升级到android studio的理由
  1. Google推出的
毫无疑问,这个是它的最大优势,Android Stuido是Google推出,专门为Android“量身订做”的,是Google大力支持的一款基于IntelliJ IDEA改造的IDE,而且Google已经正式提出了停止对其他开发环境的支持,这应该能说明为什么它是Android的未来。
  1. 速度更快
Eclipse的启动速度、响应速度、内存占用一直被诟病,相信大家这点应该深有体会,而且经常遇到卡死状态。Studio不管哪一个方面都全面领先Eclipse。
  1. UI更漂亮
I/O上演示的那款黑色主题真是太棒了,极客范,Stuido自带的Darcula主题的炫酷黑界面实在是高大上,相比而言Eclipse下的黑色主题太low了。
asUI.png

eclipseUI.png
  1. 代码提示更智能
提示补全对于开发来说意义重大, Studio则更加智能,智能保存,从此再也不用每次都 Ctrl + S了。熟悉Studio以后效率会大大提升。
代码提示.png
  1. 整合了Gradle构建工具
Gradle是一个新的构建工具,自Studio亮相之处就支持Gradle,可以说Gradle集合了Ant和Maven的优点,不管是配置、编译、打包都非常棒。
  1. 强大的UI编辑器
Android Studio的编辑器非常的智能,除了吸收Eclipse+ADT的优点之外,还自带了多设备的实时预览,相对这对Android开发者来说简直是神器啊。
ui编辑器.png
  1. 内置终端
Studio内置终端,这对于习惯命令行操作的人来说简直是福音啊,再也不用来回切换了,一个Studio全部搞定。
内置终端.png
  1. 更完善的插件系统
    Studio下支持各种插件,如Git、Markdown、Gradle等等,你想要什么插件,直接搜索下载。


    插件系统.png
  • 如何升级android studio
eclipse开发的android项目,如何变成android studio的项目,有两种方式,我用的是File->Export->Generate Gradle build files然后一直下一步,选择你要导出的项目(不用管依赖项目,会自动导出的):还有另外一种方式是不用修改eclipse的工程,然后打开android studio,选中import project(eclipse ADT..),不过:注意这种方式导入进来的话,会有很多的问题,如果你引用了很多外部的jar包,会遇到很多乱七八糟的问题,我就是一开始由于解决不了,放弃转android studio,还好使用了eclipse生成gradle项目,直接用android studio打开,避免了一些问题.
eclipse导AndroidStudio.png

项目导入.png
  • 相关介绍
1. Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
2. Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。
3. Android Plugin for Gradle是一堆适合Android开发的Gradle插件的集合,主要由Google的Android团队开发,Gradle不是Android的专属构建系统,但是有了Android Plugin for Gradle的话,你会发现使用Gradle构建Android项目尤其的简单。
调用接口统一
  • 调用接口和谐化


    Android端接口.png
lua端接口.png
抽离出公共部分以及差异部分
1. 第三方应用信息差异(appid,appKey,appSecret,对应组件清单文件注册)
2. 应用信息差异(包名,icon,应用名称,签名)
3. 游戏资源差异 (游戏脚本文件,游戏资源文件)
多渠道分发
- 多渠道分发主要是解决差异化打包
设置多渠道入口.png

差异化方案.png
编译之后会在你包名下的BuildConfig文件中出现,在之后界面中使用:
bulidConfig.png

然后看下刚才在gradle中设置的差异化属性的使用:


zhanwei.png

项目采取的方案
差异化部分通过文件隔离,编译时差异部分会覆盖main文件夹的同名文件


文件隔离.png
应用名称.png

应用头像.png

清单文件main中只保留公共属性,差异化属性放在新渠道对应的清单文件中


main清单文件.png

渠道清单文件.png

游戏资源目录.png

各渠道三方信息统一在各自渠道的ChannelInfo文件维护


渠道三方信息文件.png

三方渠道所必需文件
三方渠道差异文件.png

特殊第三方接入逻辑的兼容处理

云盾接入现状,某些项目已经将云盾升级到最新版本,这里我们统称为v3,而其他大多数版本还未升级,在使用上一版本,这里我们统称为v2,为了处理这一兼容,我们对项目加了一道处理。我们将云盾v2,v3版本单独成两个独立的module,接入的渠道可根据自己特定的情况,选择性导入特定的module。
选择性导入不同的module.png
通过这种方式,开发导入特定所需module之后,最后打出的包只会有特定module的jar与so库,不会增加额外的包体大小。同时为了接口调用和谐,将v3,v2具体的实现差异加了一层封装,开放出一致的接口,屏蔽了这一层差异。

新渠道接入流程

1. 在app module的build.gradle加入自己的渠道,在渠道里面配置自己的应用信息,例如应用的application id与版本信息
build添加渠道信息.png
2. 将工程视图切到project,并且在app目录下创建一个与main平级的文件夹,文件夹名称为第一步配置的渠道名
创建渠道文件夹.png
3. 将渠道模版的文件拷贝到上一步创建好的文件夹中
模版文件拷贝.png
4. 因为特殊第三方渠道的文件包名特殊,修改拷贝模版下的包名与应用的applicationid保持一致,否则,三方渠道没有正常吊起,或回调
更改渠道包名.png
5. ChannelInfo中配置应用的三方信息
配置三方渠道信息.png
6. 对应渠道文件夹下认领自己应用的清单信息
认领渠道清单信息.png
7. 对应渠道文件夹下修改自己应用icon,以及包名
icon-appName.png
8. 配置app module下的build.gradle下要引入的云盾版本
云盾版本.png
9. 重新bulid,没有报错,就代表接入完成,之后打开gradle一栏,可以看到ide已经为我们创建好的多种task,通过不同task我们可以实现独立渠道包编译与apk输出,以及所有渠道的共同输出apk
task输出.png

项目展望

这并不是一份令人满意的解决方案,对于现在的业务来说,这是一份临时的过渡方案,它能够完成现有的业务需求。但对于日渐变化的运营需求来说,维护起来越来越吃力。在搭建这份解决方案的同时,自己也感受到它的缺陷,所以搭建的过程自己也有了这份解决方案的v2.0版本。这里也给大家分享一下,也希望大家也能够参与进来,将这份方案更加系统与科学。
在这份方案中,大家也能够看到微信,支付宝,等渠道都没有进行更好的拆开??悸堑绞奔湮侍庖约跋钅康耐瓿啥?,在这份方案中为了实现渠道之间的更好抽离,特意在云盾这里做了埋点,就是项目的组件化。后期我们会将各渠道类似于云盾一样单独封装成module。只要项目需要就将特定的渠道??橐胂钅俊O钅康拇罱ň褪亲榧淖楹?。在这份方案中,对于接入的开放者来说,自由度不过高。为了解决这个问题,后续会将所涉及的内容按功能分配成组件,例如所有第三sdk都是组件,cocos相关的东西也单独抽象成一个组件,各个组件就是一个个module,同时建立一个远程仓库,将各个组件放入远程的仓库,各个项目只要保留一个主module,这个主module一般来说不放入过多的业务逻辑代码,只是作为一个应用启动器,同时引入自己所需要远程仓库中的组件。这个主module各自项目自己维护,如果业务需求,可以自己在主module中扩展接口,供自己游戏调用。
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352