我有一个由CI构建并发布到HockeyApp的多风味项目.
每个flavor都有一个applicationId和一个apiToken,它存储在flavor本身中(将所有重要变量保存在一个地方):
def token = null
productFlavors {
prod {
applicationId "de.example.appname"
buildConfigField 'String', 'FLAVOR_ID', '"0"'
buildConfigField 'String', 'HOCKEY_APP_ID', '"1234567890"'
token = "1q2w3e4r5t6z7u8i9o0p"
}
demo {
applicationId "de.example.appname.demo"
buildConfigField 'String', 'FLAVOR_ID', '"1"'
buildConfigField 'String', 'HOCKEY_APP_ID', '"987654321"'
token = "p0o9i8u7z6t5r4e3w2q1"
}
}
在像“productFlavors”这样的级别上有hockeyApp-settings:
hockeyapp {
apiToken = token
releaseType = 0
notify = 0
status = 1
notesType = 1
notes = "Uploaded with gradle"
}
./gradlew uploadProdReleasetoHockeyApp [...]
不幸的是,prod-flavor的变量标记总是被demo-value覆盖.因此,在每次上传过程后,我都会遇到错误
Error response from HockeyApp: App Could not be created.
因为gradle尝试使用demo-token上传prod-flavor.
这里有一些额外的基本数据
compileSdkVersion 24
buildToolsversion "24.0.1"
compile 'net.hockeyapp.android:HockeySDK:4.0.0'
classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'de.Felixschulze.gradle:gradle-hockeyapp-plugin:3.5'
根据我的要求,是否有一个解决方案来定义flavor-variables并以显示的方式访问它们?
解决方法:
在这个特例中,我找到了以下答案:
hockeyapp {
apiToken = "not_required"
releaseType = 0
notify = 0
status = 2
teams = 1234
notesType = 1
}
在下一步中添加基于flavor的gradle任务来修改你hockeyapp的apiToken:
task setDevReleaseApiToken << {
hockeyapp.apiToken = "1234567890abcdefghijklmnopqrstuvwxyz"
}
task setProdReleaseApiToken << {
hockeyapp.apiToken = "1234567890abcdefghijklmnopqrstuvwxyz"
}
这些任务在gradle的whenTaskAdded-task中调用,你可以像这样简单地“覆盖”它:
tasks.whenTaskAdded { task ->
if (task.name == 'uploadDevReleasetoHockeyApp') {
task.dependsOn 'setDevReleaseApiToken'
} else if (task.name == 'uploadProdReleasetoHockeyApp') {
task.dependsOn 'setProdReleaseApiToken'
}
}
每次调用任务uploadDevReleasetoHockeyApp(手动或通过CI ..)时,都会调用任务setDevReleaseApiToken并分配相关的apiToken.
如果需要,为所有其他风格扩展此架构!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。