Android多项目打包之路

因为公司开发的APP大多给B端用户使用,不同项目都多多少少会有一些定制化的修改,例如
APP名称、logo、部分页面布局,服务器地址等,所有针对每个项目都需要单独打包。一步步下来也经过了四个阶段:

第一阶段:按项目直接修改
如果项目1需要修改服务器地址和APP名称,那就拉个分支直接修改完打包
如果项目2要修改APP的部分页面和logo,那就再拉个分支修改

问题:
随着项目增多,修改越来越多,分支越来越多,维护难度很大

第二阶段:共用一个分支,包含各个项目的修改
针对资源和部分页面逻辑的定制化,按项目进行不同处理,app的build.gradle部分如下
'''
sourceSets {

    main {
        jniLibs.srcDirs = ['libs']
        java.srcDir('src/main/java')
    }

    project1{
        res.srcDir('src/project1/res')
        java.srcDir('src/project1/java')
    }

    project2 {
        java.srcDir('src/project2/java')
    }

'''
问题:
服务器地址、企业标识码等虽然独立于功能之外,还是要单独拉分支修改,项目较多时,重复工作依然较多

第三阶段:抽取企业标识码、服务器地址、相关的key(地图key、推送key)等做成公共变量
这样就可以将所有项目配置信息保存下来,如果有新的项目需要打包,也只需增加配置信息就可以直接打包了

productFlavors {
        project1{
             dimension "company"

            // 每个环境包名不同
            applicationId "cn.com.project.project1"
            // 动态添加 string.xml 字段;
            // 注意,这里是添加,在 string.xml 不能有这个字段,会重名!!!
            resValue "string", "app_name", "项目A"
            buildConfigField "String", "SERVER_URL", '"http://api.projectA.com.cn/projectA"'
        }

         project2{
             dimension "company"

            // 每个环境包名不同
            applicationId "cn.com.project.project2"
            // 动态添加 string.xml 字段;
            // 注意,这里是添加,在 string.xml 不能有这个字段,会重名!!!
            resValue "string", "app_name", "项目A"
            buildConfigField "String", "SERVER_URL", '"http://api.projectB.com.cn/projectB"'
        }

        ....
}

第四阶段:项目配置信息放到公有云服务器,通过企业表示码获取项目配置信息
公有云后台保存各个私有云的配置信息,包括企业标识码、服务器地址、应用名称等
然后APP输入企业标识码后去公有云获取项目的配置信息,然后再在app里设置项目信息,后续逻辑就直接连项目相关的服务器了。
这样就基本能一包通用了,改地址、名称等基本的信息就不用重新打包了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容