Android 同一个项目多个不同的包名用 git 怎么管理方便一些呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
manus
V2EX    Android

Android 同一个项目多个不同的包名用 git 怎么管理方便一些呢?

  •  
  •   manus 2019-09-10 19:12:52 +08:00 14271 次点击
    这是一个创建于 2271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前 APP 有三个不同的包名,

    三个 APP 也有些地方不一样,

    首页,第三方登录,支付,颜色,图标,启动图,版本号,渠道号。

    之前用 git 分支处理不同的包,但是这样发现有时候修改其中一个包 bug 的时候会造成,代码不同步了。

    然后每次新增功能的时候每个包要重新搞一遍,非常的麻烦!

    大家都是这么处理的呢?

    18 条回复    2019-09-14 16:00:48 +08:00
    airmour
        1
    airmour  
       2019-09-10 19:28:32 +08:00
    多渠道打包了解一下
    LokiSharp
        2
    LokiSharp  
       2019-09-10 19:31:53 +08:00 via iPhone
    Gradle 多项目了解一下
    xiangyuecn
        3
    xiangyuecn  
       2019-09-10 19:35:36 +08:00
    把当前 app 改成 library,多个 application 引用这个 library,配置、图标什么的 application 中的自动会覆盖 library 中的。因此实际的 app module 源码内只有几个配置和图标,没有一点程序代码。目前我是这么干的
    eminemcola
        4
    eminemcola  
       2019-09-10 19:36:31 +08:00
    这种情况不建议用 Git 分支管理,Build Type + Build Flavor 是被设计来满足这类需求的。

    楼主可以在搜索引擎检索关键字:Build Variants,Google 官方文档里也能找到详细介绍。
    manus
        5
    manus  
    OP
       2019-09-11 08:47:20 +08:00
    @airmour 这不是多渠道的事了 多渠道就一个渠道号的事情 我这是多个包名
    mrtrying
        6
    mrtrying  
       2019-09-11 09:40:36 +08:00
    主要是包名的问题吧!我是用了比较笨的办法
    有一个公共功能的主要分支,公共的业务功能在这个分支开发
    然后创建了不通包名的分支单独修改不同的逻辑
    但是,还有有坑,一但其中一个项目继续开发,其他的不开发就坑爹了
    airmour
        7
    airmour  
       2019-09-11 10:00:27 +08:00
    @kuzhan #5 一句两句说不清看图吧 http://i.loli.net/2019/09/11/LkgmdtFrNMyKVjI.png
    manus
        8
    manus  
    OP
       2019-09-11 10:10:09 +08:00
    @airmour 每个包之间还有很多不同的地方啊 如果仅仅是包名就好解决了 打包之前批量替换一下就 OK 了!
    manus
        9
    manus  
    OP
       2019-09-11 10:11:43 +08:00
    @mrtrying 就是这个问题啊 每次打包都头疼
    yukiww233
        10
    yukiww233  
       2019-09-11 10:19:39 +08:00
    @kuzhan #9 多渠道支持每个渠道配置替换代码代码,资源,依赖
    haohh
        11
    haohh  
       2019-09-11 11:14:17 +08:00
    多渠道打包啊 很多都是这样做的
    你说的这些内容也是不同渠道请求不同接口动态下发配置加载
    首页,第三方登录,支付,颜色,图标,启动图,版本号,渠道号。
    unco020511
        12
    unco020511  
       2019-09-11 17:06:30 +08:00
    楼上没说太清楚.
    productFlavors 可以为不同的包配置不同的资源路径,包括 java 代码,资源等等;就是还是一个 project,但是你可以为每个包建一个文件夹,然后在 gradle 中配置路径,gradle 在构建的时候差异化的部分就会来这个文件夹下找,非差异化的部分就在默认 src(resourc)下找;
    remiver
        13
    remiver  
       2019-09-11 17:20:19 +08:00
    渠道通过 productFlavors 配置, 渠道间的代码和资源差异通过 SourceSets 指定, 文档都有详细说明的
    mrtrying
        14
    mrtrying  
       2019-09-11 17:34:50 +08:00
    @kuzhan 打包的话,你可以自己写脚本来打包每个分支的包,完全可以把这个流程自动化
    顺便学习一下 shell 或者 python,go 也可以
    manus
        15
    manus  
    OP
       2019-09-12 22:31:06 +08:00
    @mrtrying 打包倒不是问题 现在的问题是每个分支的代码都不一样,
    因为不同的包功能不一样,代码没办法同步,不同的包升级功能,修复 bug 有时候每个包都要去改。。。
    no1xsyzy
        16
    no1xsyzy  
       2019-09-12 23:16:01 +08:00
    @kuzhan 把相同的代码提取出来做成库啊……
    程序员基础,SICP 都拿了一个小节专门讲这个
    xierbenq
        17
    xierbenq  
       2019-09-14 14:09:34 +08:00 via iPhone
    lz 想表达的重点在于业务逻辑上的差异吧,其他诸如包名,资源文件等都可以用 buildvariant 来解决。这种情况要结合公司实际业务来寻找方法。如果是项目稳定后一般不做修改的,那直接分仓库吧,类似外包。如果是需要一直迭代,共享修改的,我目前是业务做在一起,做一个配置文件来控制开关。至于开分支是万不可取的,合并导致的代码错乱和处理冲突会生不如死
    300
        18
    300  
       2019-09-14 16:00:48 +08:00 via Android
    @mrtrying flavor 也可以改包名。
    我们现在的项目就是这么搞的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2429 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 15:18 PVG 23:18 LAX 07:18 JFK 10:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86