我正在使用buildConfigField
来传递调试信息并将服务器IP和其他字符串文字发布到应用中。
像这样:
buildTypes {
debug {
buildConfigField "String", "url", "\"http:\\xxxxxxx.xx\""
}
release {
buildConfigField "String", "url", "\"http:\\ppppppp.xx\""
}
}
但是我遇到一个问题,即在调试模式下,我的应用程序可以与多个测试服务器通信。有时我将其指向本地网络ip,如果不在工作场所,则将其指向远程测试服务器。
我现在面临的问题是,每当我想更改配置时,都必须在此处输入整个IP地址:
debug {
buildConfigField "String", "url", "\"http:\\xxxxxxx.xx\""
}
我有一个Kotlin文件,其IP地址已经定义:
object API {
const val URL_MAIN = "http://19.544...."
const val URL_TEST_LOCAL = "http://192.16...."
const val URL_TEST_REMOTE = "http://19.554...."
}
总有办法通过gradle文件访问此变量,而不用键入它。
编辑: 我将这些url放在Kotlin类中,因为我也需要在项目中使用它的值。
答案 0 :(得分:3)
您无需为此使用Java字符串,产品版本是完美的解决方案
在Gradle文件中的android块中按如下方式使用它
productFlavors {
main {
dimension "app"
buildConfigField 'String', 'url', 'http://XXXXXXX'
}
test_local {
dimension "app"
buildConfigField 'String', 'url', 'http://XXXXXXX'
}
test_remote {
dimension "app"
buildConfigField 'String', 'url', 'http://XXXXXXX'
}
}
使用Android Studio左下角的Build Variant部分 然后选择您要建造的建筑
答案 1 :(得分:1)
在项目的根目录中,创建文件myFile.properties
:
URL_MAIN = "http://19.544...."
URL_TEST_LOCAL = "http://192.16...."
URL_TEST_REMOTE = "http://19.554...."
然后:
buildTypes {
debug {
Properties properties = new Properties()
properties.load(project.rootProject.file('myFile.properties').newDataInputStream())
buildConfigField "String", "url", properties.getProperty('URL_TEST_LOCAL')
}
release {
Properties properties = new Properties()
properties.load(project.rootProject.file('myFile.properties').newDataInputStream())
buildConfigField "String", "url", properties.getProperty('URL_MAIN')
}
}
答案 2 :(得分:1)
另一种解决方案是在build.gradle
def API_URL_MAIN = "http://19.544...."
def API_URL_TEST_LOCAL = "http://192.16...."
def API_URL_TEST_REMOTE = "http://19.554...."
// all your other things...
buildTypes {
debug {
buildConfigField "String", "url", "\"$API_URL_TEST_LOCAL\""
}
release {
buildConfigField "String", "url", "\"$API_URL_MAIN\""
}
}
(您将需要"\"$<NAME_OF_YOUR_CONSTANT>\""
以便正确构建为String
)
答案 3 :(得分:1)
您可以使用 BuildConfig
类,该类是自动生成的类,可为您提供由 buildConfigFields 定义的变量文件。
因此,您无需更改主要内容,而需要更改API
对象中的一些次要内容,如下所示:
object API {
const val URL_MAIN = BuildConfig.URL
}
现在,根据您的构建类型在 buildConfigField 中定义此URL
。
buildConfigField "String", "URL", "\"http:\\xxxxxxx.xx\""
对于 debug 或 release 类型,它可以是您想要的任何类型。
答案 4 :(得分:1)
您可以在Gradle文件中使用ProductFlavours
,
ProductFlavours
是一种应用程序的不同样式。您可以在口味中添加多个buildConfigField
,最终生成一个 Build.config 文件
productFlavors {
name {
minsdkversion 16
targetsdkversion 26
dimension "app_name"
buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
}
name1 {
minsdkversion 16
targetsdkversion 26
dimension "app_name"
buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
}
name2 {
minsdkversion 16
targetsdkversion 26
dimension "app_name"
buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
}
}