我必须使用 Gradle 构建系统创建两个或三个不同的构建(Android 构建),每个构建指向不同的服务器和 api 密钥?目前这些服务器 url 和 api 密钥被硬编码在 java 文件中。我可以正确构建调试和发布构建,但需要使用一组不同的服务器 url 和 api 密钥生成不同的构建?
提前致谢!
我通过创建不同的构建类型并为该构建类型配置不同的资源来解决我的要求。例如我的 build.xml 如下所示:
构建类型 {
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')
}
感谢您的支持!
(如果我理解的话)我会使用一个外部可执行文件来为每个构建准备一个批处理文件。
.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"
现在您需要替换资源中的字符串。我从来没有做过,但是(例如)你可以看看: