在安卓开发过程中,难免会遇到像以下这样的一些需求:
1.需要打不同市场的包像opp vivo等,用于友盟统计各个市场的下载量
2.需要打测试包,生产包等,要求每个报名下的app名称,应用图标,appid ,url不同
像以上的一些需求我们称之为Android的差异化打包
现在我们一起来配置,下面的图是我配置好的
productFlavors{
//todo a ,b,c,d等是打包提供的一些标志名称,打包的时候可以选择
a{
applicationId "com.example.myapplication1"
resValue "string", "app_name", "测试a"
buildConfigField 'String', 'BASE_URL', '"我时a 的路由"'
manifestPlaceholders=[
APPICON : "@mipmap/ic_launcher",
]
}
b{
applicationId "com.example.myapplication2"
resValue "string", "app_name", "测试b"
buildConfigField 'String', 'BASE_URL', '"我时b 的路由"'
manifestPlaceholders=[
APPICON : "@mipmap/down",
]
}
c{
applicationId "com.example.myapplication3"
resValue "string", "app_name", "测试c"
buildConfigField 'String', 'BASE_URL', '"我时c 的路由"'
manifestPlaceholders=[
APPICON : "@mipmap/up",
]
}
d{
applicationId "com.example.myapplication4" //修改application
resValue "String", "app_name", "测试d" //todo 修改res中的资源
buildConfigField 'String', 'BASE_URL', '"我时d 的路由"' //todo 用来根据不同的包,更换不同的utl
manifestPlaceholders=[
APPICON : "@mipmap/app_icon_mail", //todo 清单文件中映射的值
]
}
}
然后运行的时候运行和打包的时候可以选择,这里以运行为列,点击如下按钮,可以选择当前运行包的环境
介绍完productFlavors 后,我们现在带着问题来解释下他的一些属性和用法
问题1:
manifestPlaceholders 占位符的使用,其实很好理解,你可以认为它可以在build.gradle
文件中定义字符串并将值映射到AndroidManifest
清单文件的指定位置.
如何使用呢?
首先在AndroidManifest中设置需要替代的字段
然后在build.gradle中设置清单文件中替代文字需要映射的值
d{
manifestPlaceholders=[
APPICON : "@mipmap/app_icon_mail", //todo 清单文件中映射的值
]
}
问题2:
resValue 这个指定后,会在build完成后,会在build文件里面生成值,例如
resValue "String", "app_name", "测试a" //他会在build文件夹生成如下
<string name="app_name" translatable="false">测试b</string>
如果你本里的values文件夹下存在了该
<string name="app_name">ExpandedRecycleViewDemo</string>
那么程序则会报错,因为build时会存在两个app_name的name
buildConfigField 这个属性很好用,这个属性在build后会生成一个buildConfig.java的文件里面有许多可以使用的信息,因此我们可以把BASEURL设置在此,我的是如下配置
d{
applicationId "com.example.myapplication4" //修改application
resValue "String", "app_name", "测试d" //todo 修改res中的资源
buildConfigField 'String', 'BASE_URL', '"我时d 的路由"' //todo 用来根据不同的包,更换不同的utl
manifestPlaceholders=[
APPICON : "@mipmap/app_icon_mail", //todo 清单文件中映射的值
]
}
接下来看下buildConfig的文件
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example.myapplication2";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "b";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: b
public static final String BASE_URL = "我时b 的路由";
}
变生成了我设置的baseURL ,
以后就可以根据不同的打包环境生成不同的BASEURL