- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有多个 Firebase 项目,它们通过构建类型和风格共享相同的代码库。我们的目标是通过 Gradle 使用应用程序分发并使用服务帐户凭据进行身份验证。
在 docs ,表明可以使用 firebaseAppDistribution
block 来配置参数,服务凭证文件路径就是其中之一。由于每个变体都是一个 Firebase 项目,并且每个项目都有自己的服务凭证,因此据我所知,我们需要在 Gradle 配置中指向单独的服务凭证文件路径。
我尝试根据变体使用 gradle 任务更新文件路径,但无法使其工作。当前的构建文件如下所示:
...
apply plugin: 'com.google.firebase.appdistribution'
class StringExtension {
String value
StringExtension(String value) {
this.value = value
}
public void setValue(String value) {
this.value = value
}
public String getValue() {
return value
}
}
android {
...
productFlavors.whenObjectAdded {
flavor -> flavor.extensions.create("service_key_prefix", StringExtension, '')
}
productFlavors {
flavor1 {
...
service_key_prefix.value = "flavor1"
}
flavor2 {
...
service_key_prefix.value = "flavor2"
}
}
buildTypes {
debug {
firebaseAppDistribution {
releaseNotesFile = file("internal_release_notes.txt").path
groupsFile = file("group_aliases_debug_fb.txt").path
}
}
release {
firebaseAppDistribution {
releaseNotesFile = file("release_notes.txt").path
groupsFile = file("group_aliases_prod_fb.txt").path
}
}
}
}
...
android.applicationVariants.all { variant ->
task("firebaseCredentials${variant.name.capitalize()}", overwrite: true) {
variant.productFlavors.each { flavor ->
doLast {
firebaseAppDistribution {
def serviceKeyFile = file(
"../${flavor.service_key_prefix.value}-${variant.buildType.name}-service-key.json")
if (serviceKeyFile != null) {
serviceCredentialsFile = serviceKeyFile.path
}
}
}
}
}
}
android.applicationVariants.all { variant ->
def distTask = tasks.named("appDistributionUpload${variant.name.capitalize()}")
def configTask = tasks.named("firebaseCredentials${variant.name.capitalize()}")
distTask.configure {
dependsOn(configTask)
}
}
apply plugin: 'com.google.gms.google-services'
任务似乎运行正确,但我猜文件路径未更新,因为当我运行 appDistributionUpload
时它仍然给出以下错误:
Could not find credentials. To authenticate, you have a few options:
Set the
serviceCredentialsFile
property in your gradle pluginSet a refresh token with the FIREBASE_TOKEN environment variable
Log in with the Firebase CLI
Set service credentials with the GOOGLE_APPLICATION_CREDENTIALS environment variable
关于如何实现这样的分发配置有什么想法吗?
最佳答案
联系支持团队后,我了解到此配置尚未开箱即用,并且目前作为功能请求存在。
以下是 Firebase 支持团队提供的解决方法,该解决方法会在每个上传任务开始时修改内存中的相关环境变量:
android {
applicationVariants.all { variant ->
final uploadTaskName = "appDistributionUpload${variant.name.capitalize()}"
final uploadTask = project.tasks.findByName(uploadTaskName)
if (uploadTask != null) {
uploadTask.doFirst {
resetCredentialsCache()
final value = "$projectDir/src/${variant.name}/app-distribution-key.json"
setEnvInMemory('GOOGLE_APPLICATION_CREDENTIALS', value)
}
}
}
}
private static void setEnvInMemory(String name, String val) {
// There is no way to dynamically set environment params, but we can update it in memory
final env = System.getenv()
final field = env.getClass().getDeclaredField("m")
field.setAccessible(true)
field.get(env).put(name, val)
}
private static void resetCredentialsCache() {
// Google caches credentials provided by environment param, we are going to reset it
final providerClass = Class.forName(
'com.google.firebase.appdistribution.buildtools.reloc.com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider')
final providerCtor = providerClass.getDeclaredConstructor()
providerCtor.setAccessible(true)
final provider = providerCtor.newInstance()
final credsClass = Class.forName(
'com.google.firebase.appdistribution.buildtools.reloc.com.google.api.client.googleapis.auth.oauth2.GoogleCredential')
final field = credsClass.getDeclaredField('defaultCredentialProvider')
field.setAccessible(true)
field.set(null, provider)
}
编辑:上述解决方案仅适用于应用分发插件版本 1.3.1。
我没有进一步联系支持人员,而是在 Jenkins CI 上使用了 GOOGLE_APPLICATION_CREDENTIALS
环境变量,如所述 here
关于android - 有没有办法使用 Firebase App Distribution 为每个 Android 构建变体配置单独的 serviceCredentialsFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59560760/
如果我有 distributed.Client我可以用它来关闭远程集群吗?即杀死所有 worker 并关闭调度程序? 如果使用 Client 无法做到这一点例如,除了手动杀死每个远程进程之外,还有其他
我对使用 Dask Distributed 作为任务执行器很感兴趣。 在 Celery 中,可以将任务分配给特定的 worker 。如何使用 Dask Distributed? 最佳答案 有2个选项:
我正在创建我的第一个应用程序,并且对 Ad Hoc 配置文件和开发配置文件有些困惑。我知道这个问题是在此之前提出的,但需要一些澄清和确认。 查看之前关于 stackoverflow 的答案,我认为存在
我正在尝试确定如何计算两个 torch.distribution.Distribution 对象的 KL 散度。到目前为止,我找不到执行此操作的功能。这是我尝试过的: import torch as
这听起来(比方说)幼稚,但我不知道我应该为移动 (iOS) 应用使用哪个证书。 显而易见的选项是 iOS 分发证书,但在 Apple 分发证书上,解释是: ...For use with Xcode
问题: 我的数字范围是 1 到 20,000。我想从范围内采样 8 个不同数字的均匀分布,1000 次。每个分布不应有重复的数字。此外,1000 个分布中的每个分布都必须是唯一的(在对所有获得的分布进
我对 dask 文档中的并发 future 要点有疑问:https://gist.github.com/mrocklin/ef9ccd29a6ec5f4de84d6192be95042a 当我们实例化
完成 DASK 代码后,我不断收到“distributed.utils_perf - 警告 - 完整垃圾收集最近占用了 19% CPU 时间”警告消息。我正在使用 DASK 进行大型地震数据计算。计算
场景:S3 存储桶有 1000 个文件。我有两台机器。每台机器都有两个驱动器/dev/sda 和/dev/sdb。限制:没有一个单独的驱动器可以容纳所有 1000 个文件。没有一台机器可以容纳所有 1
我已将一个项目导入 android studio 3.5,但在与 Gradle 文件同步时遇到此错误 指定的Gradle发行版'https://services.gradle.org/distribu
在 Android Studio 中创建项目时,我收到以下错误消息。 Failed to import new Gradle project: Could not install Gradle dis
在android studio 2.3.2 中运行项目时显示 Error:Could not run build action using Gradle distribution 'https://s
我正在将项目中的 gradle 版本从 1.7 升级到 4.2.1。我已将 Intellij 设置为导入 gradle 项目,但是当我单击“刷新所有 Gradle 项目”时,出现以下错误 Gradle
对于一个独特的商品销售数据库,如果我们使用顺序一致性,我们就可以保证,例如,这个独特的商品永远不会被重复卖给不同的人。因果一致性能保证我们做到这一点吗? 如果有一些销售同时开始/结束,系统会中断吗?
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我正在使用J2ME为Nokia手机编写应用程序。 我想知道如何分发我的诺基亚应用程序。 最佳答案 分发有两个步骤 1.)使您的应用程序签名 您需要对您的应用进行签名,以便可以将其安装在诺基亚手机上。签
顺序一致性 The result of any execution is the same as if the operations of all the processors were execut
我知道三阶段提交是为了解决“两阶段提交”的问题,当在第二阶段协调器和群组同时失败时,不可能知道协调器是否决定了提交消息。 显然,三阶段提交旨在通过添加一个额外的阶段来解决这个问题。但是,如果协调器和队
我一直在研究 a project ,它是应用服务器和对象数据库的组合,目前仅在单台机器上运行。前段时间看了a paper它描述了一个分布式关系数据库,并获得了一些关于如何将该论文中的想法应用到我的项目
我想堆叠这种类型的数据集: PATIENT_ID AA BB CC DD EE 1 22 33 44 55 66 2 77 88 99 10 11 ..
我是一名优秀的程序员,十分优秀!