我正在开发一款连接到我服务器的Android应用。像往常一样,我的服务器在开发期间是在笔记本电脑上,它的ip正在改变我想检测我的开发机器的IP地址,即
InetAddress.getLocalHost().getCanonicalHostName()
...并将其注入android strings.xml文件,以便我的Android应用程序在开发过程中连接到正确的ip。
我正在努力确定在哪里获取信息每次运行后可以执行哪种类型的buildType:
android {
buildTypes.each { buildType ->
if(buildType.name == 'debug') {
def host = InetAddress.getLocalHost().getCanonicalHostName()
}
}
}
让我们说主持人现在就确定了。但是我仍然不确定如何替换strings.xml文件中的host以连接到正确的主机。 我无法调用processResources,因为引发了以下异常:
Could not find method processResources() for argument [build_11onjivreh0vsff0acv5skf836$_run_closure3@cbbe2cf] on project
任何建议或源代码都将不胜感激。
答案 0 :(得分:11)
有一个更简单的解决方案:在static final
中使用BuildConfig
:
buildTypes {
debug {
def host = InetAddress.getLocalHost().getCanonicalHostName()
buildConfig "public static final String API_HOSTNAME = \"" + host + "\";"
}
release {
buildConfig "public static final String API_HOSTNAME = \"whateveritisforreleasebuilds\";"
}
}
BuildConfig.API_HOSTNAME
将保留远程地址。
答案 1 :(得分:7)
最新版本需要以下语法:
buildTypes {
debug {
buildConfigField "boolean", "ENVIRONMENT", "true"
}
release {
buildConfigField "boolean", "ENVIRONMENT", "false"
}
}
或者使用布尔类型:
BuildConfig.ENVIRONMENT.equals("production"); // String type
然后您将其用作
if (BuildConfig.ENVIRONMENT) { ... } // boolean type
或
var data = [{
label: 'Cars',
children: [{
label: 'Volkswagan',
children: [{
label: 'Passat'
}]
}, {
label: 'Toyota'
}]
}, {
label: 'Fruits',
children: [{
label: 'Grapes'
}, {
label: 'Oranges'
}]
}];
function filter(data, query){}
filter(data,'ra'); //['Grapes', 'Oranges']