Gradle相信大家并不陌生,这货虽然有时候很卡,有时候让人难以琢磨,但是不可否认它确实给Android的开发带来了无数的便利。
如果你需要实现以下需求,那么看这个文章就可以解决了。
一.大家都知道我们开发可能有开发环境,测试环境,和生成环境等,我们如何在测试服务器和生产服务器自由切换而不修改代码。
二.给予测试和生产两个APP不同的包名
三.给予测试和生产两个APP不同的应用名等。
首先来说一.其实可以抽象成为:
在debug和release两个版本的java文件中使用不同的字符串。
首先我们打开gradle.properties这个文件在里面加入几个变量
DEBUG_HOST="http://192.168.1.108"
RELEASE_HOST="http://192.168.1.109"
分别代表测试环境主机地址和生产环境主机地址。
然后再app的gradle文件里输入:
buildTypes {
debug {
buildConfigField "String", "HOST", DEBUG_HOST
}
release{
minifyEnabled false
buildConfigField "String", "HOST", RELEASE_HOST
}
}
大概是新建了一个HOST变量,但是生产和测试所取的值是不同的。
之后再java文件中直接取HOST变量的值就可以了。
String url=BuildConfig.HOST;
这样问题一完美解决。
二.给予测试和生产两个APP不同的包名
这个很简单,就是在debug和release之后追加包名就行了
debug {
applicationIdSuffix ".debug"
}
release{
applicationIdSuffix ".release"
}
这样会在applicationId “com.air.test”后自动追加两个包名。
三.给予测试和生产两个APP不同的应用名等。
其实这个文件和问题一不同点就是APP的应用名是写在manifest里的,而问题一是在java中。这样问题三也就可以抽象为,在Androidmanifest文件中来取出区分debug和release的串。
这样就介绍一个更厉害的方法,就是可以在buildTypes里增加string.xml中的内容。
resValue "string", "app_name", "debug"
最后大概是这样
debug {
resValue "string", "app_name", "app_debug"
applicationIdSuffix ".debug"
buildConfigField "String", "HOST", DEBUG_HOST
}
release{
minifyEnabled false
applicationIdSuffix ".release"
resValue "string", "app_name", "app_release"
buildConfigField "String", "HOST", RELEASE_HOST
}
最后我们思考,问题三的解决方案似乎更加强大应为我们在java文件中也可以访问string.xml中的内容。没错这样也是可行的:
String s=getResources().getString(R.string.app_name);
我们可以成功取出没有在string.xml定义的字符串(定义在了gradle中)。
所以问题三的解决方案也可以来解决问题一。大家自己选择吧。
这是我的gradle技巧的第一篇文章,后续将会写出更好的内容。谢谢大家支持。
哪里可以找到我:
我的Github:
https://github.com/AndroidMsky
我的博客主页:
http://blog.youkuaiyun.com/androidmsky
欢迎加作者自营安卓开发交流群:
308372687