参考了:http://blog.youkuaiyun.com/nwsuafer/article/details/42006157
场景:
开发时需要用到测试环境URL,而打包时需要改回正式环境URL,来回的注释总有会弄错的时候,但是如果在gradle构建时定义则不需要每次都去检查自己定义的URL是否是测试或正式,而且代码也整洁好多
1.在gradle文件中定义变量:
buildTypes {
debug {
minifyEnabled false //混淆关闭
signingConfig signingConfigs.release
buildConfigField "String", "HTTP_API", "\"http://test.xxxx.com/\""
manifestPlaceholders = [
app_name: "@string/app_name_debug",
]
}
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'prguard-rules.pro'//指定混淆规则文件
signingConfig signingConfigs.release //设置签名信息
buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""
}
}
定义后要SYNC重新刷新gradle文件,要不然会调用不到
P:上面的buildConfigField就是定义变量的关键字,buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""的意思是定义一个String类型的变量名为HTTP_API的且值为"http://xxxx.com\"的变量。manifestPlaceholder=[app_name: "@string/app_name_debug"]意思是把manifest文件中${app_name}占位符替换为@string/app_name_debug的值
2.在java.class文件中的调用
public final class HttpApi {
public final static String HTTP_API = BuildConfig.HTTP_API;
// public final static String HTTP_API = "http://test.xxxx.com/";//测试环境地址
// public final static String HTTP_API = "http://xxxx.com";//正式环境地址
}
直接使用BuildConfig.HTTP_API就可以调用到gradle中定义的buildConfigField变量了
---------------------------------------------------------------------------------------------------------------------------------------------------------------
gradle中使用manifestPlaceholders替换app_name、app_id,app_icon
1.先在manifest.xml中定义占位符
<application
android:allowBackup="true"
android:exported="true"
android:icon="${icon}"
android:label="${app_name}"
android:theme="@style/Theme.sty"
tools:replace="icon, label,theme">
</application>
2.在各个渠道配置中使用这个manifestPlaceholders进行区别不同渠道APP,如:
productFlavors {
360{
applicationId "com.xxx.xxx"
manifestPlaceholders = [app_name:"xxxx" ,icon: "@drawable/icon"]
//在java代码中具体的使用方式为:context.getResources().getString(R.string.strKey);
resValue("string" , "strKey","xx")
}
}
也可以在buildTypes的debug或release中定义,但是会覆盖productFlavors中360中定义的变量
本文介绍了如何在Android开发中利用Gradle在build.gradle文件中定义变量,并在Java类中调用,以及如何使用gradle的manifestPlaceholders来替换AndroidManifest.xml中的变量,实现不同环境配置的灵活切换。
8079

被折叠的 条评论
为什么被折叠?



