我一直在阅读有关变体和构建类型的内容,我不知道我是否正确理解它,但我想存储一个locahost(测试)的URL和一个用于生产的URL(在互联网上的实时站点)。 / p>
我需要根据哪种构建类型来切换它们。这是正确的方法吗?或者还有另一种选择吗?
有没有人有一个小例子?
有没有办法将这些信息存储在一个我不需要提交源代码控制的文件中?我正在使用gradle.properties文件来存储gradle用于签名的一些密码..这很好用,因为这个文件我没有在版本控制中共享。
我对使用正确的方法以及如何实现它感到困惑。
有什么想法吗?
答案 0 :(得分:67)
您可以使用BuildConfig为每个BuildType提供不同的URL
buildTypes {
debug {
buildConfigField "String", "SERVER_URL", '"http://someurl/"'
}
release{
buildConfigField "String", "SERVER_URL", '"http://someotherurl/"'
}
}
每次将项目与gradle文件同步时,都会自动生成BuildConfig。 在您的代码中,您可以访问以下URL:
BuildConfig.SERVER_URL
如果您不想提交这些网址,可以将它们存储在gradle.properties中,就像密码一样,并在build.gradle中引用它们。
buildConfigField "String", "SERVER_URL", serverurl.debug
答案 1 :(得分:4)
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "String", "BASE_URL", '"url1"'
debuggable false
}
debug {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "String", "BASE_URL", '"url2"'
debuggable true
}
这需要在gradle中进行,并在同一部手机中运行两个应用程序(发布和调试),只需添加
applicationIdSuffix" .debug"
在调试部分。由于包名称会有所不同。这对我有用。
答案 2 :(得分:0)
我将过程与图像分享,因为我们需要在 buildTypes
中添加 API URL 时额外注意 java 的 escape sequence 否则 URL 将无法在 BuildConfig
中正确生成并产生 Cannot resolve ...
错误,如下图所示 -
所以正确的解决方案是添加遵循转义序列的 URL,如下图所示-