productFlavors 版本分包

个人见解,不喜绕道

在build.gradle中的android下写下包信息
productFlavors{

api{}//对于src下的文件夹名字
api1{}
api2{}
api3{}

}

编译了之后在Build variants中会多出几个选项

productFlavors 版本分包_第1张图片

下面开始正式的干活:

创建版本文件夹
这里写图片描述

这里我创建了四个:

productFlavors 版本分包_第2张图片

productFlavors 版本分包_第3张图片
这些就是我们要得到的版本,也就是在gradle中设置的文件名.Build variants中选中的是哪个,哪个就可以创建类,运行的也就是选中的这个,否则只能创建文件File,比如

这里写图片描述

选中api3中的java文件夹是变成蓝色的

这里写图片描述

未选中的是这样的:

productFlavors 版本分包_第4张图片

在各个版本中定义Api类,像上图,
Api1 中的Api类:
public class Api {
public static final String ENDPOINT = “http://api1.baidu.com“;
}

测试是否更改了显示内容
TextView tv_info = (TextView) findViewById(R.id.tv_info);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(“Endpoint:”);
stringBuilder.append(Api.ENDPOINT);
stringBuilder.append(“\n”);

stringBuilder.append(“Build type:”);

if (BuildConfig.DEBUG) {
stringBuilder.append(“debug”);
} else {
stringBuilder.append(“release”);
}
stringBuilder.append(“\n”);
tv_info.setText(stringBuilder.toString());

设置各个版本的文件名

第一种方法:
配置文件

"true"
        android:icon="@mipmap/ic_launcher"
        android:label="${app_name}" 

productFlavors 版本分包_第5张图片

然后在项目的build.grade的productFlavors里替换项目变量

productFlavors {
    api1 {
 applicationId "com.zdl.test11"
        manifestPlaceholders = [app_name: "api1版本"]
    }

    api2 {
    applicationId "com.zdl.test2"   
        manifestPlaceholders = [app_name: "api2版本"]
    }

    api {
 applicationId "com.zdl.test0"
        manifestPlaceholders = [app_name: "@string/app_name"]
    }
}

第二种方法:
配置文件在最初的状态下,需要把string.xml中的app_name去掉

  1. <resources>  
  2.       
  3. resources>  

applicationId分别修改了它们的applicationId,resValue分别修改了它们定义在string.xml中的app_name,所以也会修改app的应用名称。

 api {
            applicationId "com.zdl.test0"
            resValue "string","app_name","api0版本"

//            manifestPlaceholders = [app_name: "@string/app_name"]
        }

        api1 {
            applicationId "com.zdl.test11"
            resValue "string","app_name","api1版本"
//            manifestPlaceholders = [app_name: "api1版本"]
        }
        api2 {
            applicationId "com.zdl.test2"  
            resValue "string","app_name","api2版本"
//            manifestPlaceholders = [app_name: "api2版本"]
        }

到这实现的是这种效果:
productFlavors 版本分包_第6张图片

,接下来替换各版本的图标.

替换图标

在报名下创建res/drawable文件夹将图片放入,最好放入不同的图片,但图片的名字一定要一样,

productFlavors 版本分包_第7张图片 productFlavors 版本分包_第8张图片

在配置文件中icon要设置成@drawable/b_head 你的图片文件名

productFlavors 版本分包_第9张图片

如果设置好了后图标没有更换:

android {
........
 sourceSets {  
        main {  
            manifest.srcFile 'src/main/AndroidManifest.xml'  
            java.srcDirs = ['src/main/java']  
            resources.srcDirs = ['src/main/java']  
            aidl.srcDirs = ['src/main/java']  
            renderscript.srcDirs = ['src/main/java']  
            res.srcDirs = ['src/main/res']  
            assets.srcDirs = ['src/main/assets']  
            jniLibs.srcDirs = ['libs']  

        }  
        version2.java.srcDirs = ['src/version2/java']  
        version2.res.srcDirs = ['src/version2/res']  

    }  
}

现在基本上完事了,看下结果:

productFlavors 版本分包_第10张图片

你可能感兴趣的:(笔记)