如何使用Gradle构建系统创建两个或三个不同的构建,每个构建指向不同的服务器?

时间:2013-09-06 14:01:59

标签: android build gradle

我必须使用Gradle构建系统创建两个或三个不同的构建(Android构建),每个构建指向不同的服务器和api密钥吗? 目前这些服务器url和api密钥在java文件中是硬编码的。我可以正确构建调试和发布版本,但是需要使用一组不同的服务器URL和api密钥生成不同的构建吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

(如果我理解的话)我将使用一个外部可执行文件为每个版本准备批处理文件。

.bat文件调用gradle将变量(获取密钥)传递给它:

gradle assemble -Pkey=%key%

现在,在gradle脚本中,您可以获取变量的值:

def varKey = "$key"

你可以用它来签署apk:

signingConfigs {
    release {
        storeFile = file('../key.keystroke')
        storePassword = varKey 
        keyAlias = "My key"         
        keyPassword = varKey 
    }
}

修改 好的,以前的文本对于用不同的密钥签名apk文件很有用。

要使用gradle编辑服务器URL,首先需要将url和api密钥存储到资源字符串中,并使用java类中的内容而不是硬编码字符串:

<resources>
    <string name="server_url">you.server.com</string>
    <string name="api_key">your_api_key</string>
</resources>

现在考虑调用gradle的.bat:

gradle assemble -Papi_key=%api_key% -Pserver_url=%server_url%

在gradle中,你得到了变量内容:

def varApiKey = "$api_key"
def varServerUrl = "$server_url"

现在您需要替换资源中的字符串。我从来没有这样做,但(例如)你可以看看:

How to replace strings resources with Android Gradle

答案 1 :(得分:0)

我通过创建不同的构建类型并为该构建类型配置不同的资源来解决了我的需求。例如,我的build.xml如下所示:

buildTypes {

    release {
        signingConfig signingConfigs.release
        runProguard true
        proguardFile ('proguard-android-optimize-app.txt')
    }

    server1.initWith(buildTypes.debug)
    server1 {
        packageNameSuffix ".server1"
    }

}

 sourceSets {
    main {
        manifest.srcFile 'app/AndroidManifest.xml'
        java.srcDirs = ['app/src']
        resources.srcDirs = ['app/src']
        renderscript.srcDirs = ['app/src']
        res.srcDirs = ['app/res']
        assets.srcDirs = ['app/assets']
    }
    server1 {
        res.srcDirs = ['app/res/server1']
    }
    instrumentTest.setRoot('tests')
}

感谢您的支持!