V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kuzhan
V2EX  ›  Android

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

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

    目前 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 官方文档里也能找到详细介绍。
    kuzhan
        5
    kuzhan  
    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
        8
    kuzhan  
    OP
       2019-09-11 10:10:09 +08:00
    @airmour 每个包之间还有很多不同的地方啊 如果仅仅是包名就好解决了 打包之前批量替换一下就 OK 了!
    kuzhan
        9
    kuzhan  
    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 也可以
    kuzhan
        15
    kuzhan  
    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 来解决。这种情况要结合公司实际业务来寻找方法。如果是项目稳定后一般不做修改的,那直接分仓库吧,类似外包。如果是需要一直迭代,共享修改的,我目前是业务做在一起,做一个配置文件来控制开关。至于开分支是万不可取的,合并导致的代码错乱和处理冲突会生不如死
    winterbells
        18
    winterbells  
       2019-09-14 16:00:48 +08:00 via Android
    @mrtrying flavor 也可以改包名。
    我们现在的项目就是这么搞的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   851 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:34 · PVG 05:34 · LAX 13:34 · JFK 16:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.