可能有些人不知道BuildConfig是何物,尤其是初学者,那么试想我们每次编译Release版本时,由于Debug和Relaease环境下配置有所不同,打包前总是要禁用调试Log,修改服务器Host从测试服到正式服等等一系列操作,一般的做法是在编译Release版本前修改相应的配置,开发时再修改回Debug环境。很繁琐有没有?
转载请注明出处:www.facex.xyz,如有发现错误或有其他更好的实现方式可与我联系。
在编译时,Android Studio 会生成一个名为 BuildConfig 的类,它包含了一些编译时使用到的常量指。生成的BuildConfig文件内容如下:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true|false");
public static final String APPLICATION_ID = "xyz.facex.demo";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}
当编译Debug版本时,BuildConfig类中DEBUG变量如下:
public static final boolean DEBUG = Boolean.parseBoolean("true");
当编译Release版本时,BuildConfig类中DEBUG变量如下:
public static final boolean DEBUG = Boolean.parseBoolean("false");
是的,看到这里,我想你应该知道了。
现在我们举个栗子说明下,新建HttpHost类,用来获取服务器Host,我们将BuildConfig类中DEBUG变量赋值给HttpHost的DEBUG,然后我们通过判断HttpHost中DEBUG的值取到相应的Host,代码如下:
public class HttpHost {
public static final boolean DEBUG = BuildConfig.DEBUG;
public static final String HOST_TEST = "测试服务器地址";
public static final String HOST = "正式服务器地址";
/**
* 根据不同版本调用不同的HOST
* debug版本返回"测试服务器地址"
* release版本返回"正式服务器地址"
*/
public static String getHost() {
return DEBUG ? HOST_TEST : HOST;
}
}
按照以上代码,我们在发布Release版本时无需修改一行代码,一个字爽!
另外BuildConfig中的变量还支持自定义,有兴趣的可以自行Google。