【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)

有些时候,因为业务扩展,需要两个相同的app,通过分支管理,两套代码当然ok,但是这样后期维护,BUG修复总不能两套代码同时修改吧,这里推荐使用productFlavors差异化打包,一套代码生成两个APK

一、Flavor创建

在APP中build.gradle文件中的一段代码:
【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第1张图片

android {
    ...
    }


    //差异化打包
    productFlavors {
        project1 {
            applicationId "com.android.app1"
            versionCode 120
            versionName "1.2.0"
            manifestPlaceholders = [label: "APP1", icon: "@mipmap/icon_1",key:"11111"]

        }
        project2 {
            applicationId "com.android.app2"
            versionCode 100
            versionName "1.0.0"
            manifestPlaceholders = [label: "APP2", icon: "@mipmap/icon_2",push_key:"22222"]
        }
    }


    buildTypes {
    ...
    }

二、添加相应目录

【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第2张图片

三、Manifest中的操作(主要是引用的一些第三方操作)

1、图标、APP命更换

  

2、对于一些第三方工具如推送,包名 key的更换

 
            
                

                //引用前面定好的包名
            
        
 
         //引用前面定好的key

四、一些资源的更换

在对应的目录下,放置相同名字的资源文件,打包的时候,会自动匹配该目录下的资源文件,对于一些公用的图片不用处理

【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第3张图片

【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第4张图片

对于一些颜色的修改、布局的修改,都可以用同一种方法(不同包下的同名文件)

五、代码动态控制展示

if (BuildConfig.FLAVOR.equals("project1")) {
       //当flavors是project1 的时候,需要做的处理,比如设置某个布局的隐藏之类的    
    } else if (BuildConfig.FLAVOR.equals("project2")) {
	 //当flavors是project2 的时候,需要做的处理
    }

六、打包或者AS调试

1、as调试
【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第5张图片
在这里可以选择,你要调试的包,然后进行运行测试

2、打包

【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)_第6张图片

七、大功告成

如果错误或者不对的地方,多多指教纠正

你可能感兴趣的:(Android)