4

我正在开发一个连接到我的服务器的 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 文件中的主机以连接到正确的主机。我无法调用 processResources,因为引发了以下异常:

Could not find method processResources() for argument [build_11onjivreh0vsff0acv5skf836$_run_closure3@cbbe2cf] on project

任何建议或源代码将不胜感激。

4

2 回答 2

11

有一个更简单的解决方案:使用static finalin 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将保存远程地址。

于 2013-09-12T14:50:42.067 回答
7

最新版本需要以下语法:

buildTypes {
    debug {
        buildConfigField "String", "ENVIRONMENT", "\"development\""
    }
    release {
        buildConfigField "String", "ENVIRONMENT", "\"production\""
    }
}

或者使用布尔类型:

buildTypes {
    debug {
        buildConfigField "boolean", "ENVIRONMENT", "true"
    }
    release {
        buildConfigField "boolean", "ENVIRONMENT", "false"
    }
}

然后,您将其用作

BuildConfig.ENVIRONMENT.equals("production"); // String type

或者

if (BuildConfig.ENVIRONMENT) { ... } // boolean type
于 2015-10-22T16:35:32.147 回答