【问题标题】:Android - dynamic configuration in gradle based on build typeAndroid - 基于构建类型的 gradle 动态配置
【发布时间】:2013-09-12 14:40:53
【问题描述】:

我正在开发一个连接到我的服务器的 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

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

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    有一个更简单的解决方案:在BuildConfig 中使用static final

    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 将保存远程地址。

    【讨论】:

    • 呵呵,我只是运行 AndroidStudio 以在我的代码中找到相同的解决方案 :) 但我使用的是 productFlavors
    • 在 Gradle / Android Gradle 插件的更高版本中,您必须使用buildConfigField(而不是buildConfig)作为described in this answer
    【解决方案2】:

    最新版本需要以下语法:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      相关资源
      最近更新 更多