Fabric 不接受 @string/... 在 manifest.xml 中对其 API 密钥的引用

Posted

技术标签:

【中文标题】Fabric 不接受 @string/... 在 manifest.xml 中对其 API 密钥的引用【英文标题】:Fabric not accepting @string/... reference for its API key in manifest.xml 【发布时间】:2017-02-15 17:51:01 【问题描述】:

我正在尝试通过将密钥放在未跟踪的字符串资源 XML 文件中来隐藏我的 Fabric API 密钥以防止源代码管理。但由于某种原因,fabric 不接受清单中的密钥 vie @string/FABRIC_API_KEY 引用。

XML文件如下——

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="NASA_API_KEY">abcd</string>
    <string name="FABRIC_API_KEY">xyz</string>
</resources>

清单中的引用 -

<meta-data
    android:name="io.fabric.ApiKey"
    android:text="@string/FABRIC_API_KEY" />

而且,这是我尝试构建时遇到的错误 -

错误:任务“:app:fabricGenerateResourcesDebug”执行失败。 Crashlytics 开发者工具错误。

我已尝试通过BuildConfig 访问 API 密钥,但仍然无法正常工作。

【问题讨论】:

【参考方案1】:

根据面料,

您应该停止在 AndroidManifest.xml 中添加此关键字段。相反,您应该将其添加到 fabric.properties。

基本上,fabric 库稍后会在您合并的 AndroidManifest.xml 中自动合并此键。

参考:https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects

希望这会有所帮助。

【讨论】:

我在根目录中创建了fabric.properties 文件,并按照他们提到的方式添加了 API 密钥。但是,我仍然遇到同样的错误。 它对我有用...我将 fabric.properties 放在模块根目录上,与 progruard-rules.pro 或 build.gradle 处于同一级别,例如)但我同时添加了 secretKey 和apiKey。正如他们在 support@fabric.io 告诉我的那样,“您可以在选择您的组织后在此处找到您的密钥:fabric.io/settings/organizations。只需选择您组织名称下的“构建密钥”按钮。” 对我来说,指定键的 fabric.properties 方法只有在项目上禁用 Instant Run 后才有效。【参考方案2】:

build.gradle 中添加manifestPlaceholders

defaultConfig 
    manifestPlaceholders = [
        FABRIC_API_KEY:"Your Key"
    ]

AndroidManifest.xml 喜欢使用它

<meta-data
    android:name="io.fabric.ApiKey"
    android:value="$FABRIC_API_KEY"
/>

【讨论】:

【参考方案3】:

好的..我自己得到了答案...这是对我有帮助的代码:

按照以下步骤操作:-

https://github.com/plastiv/CrashlyticsDemo/

大多数人不得不运行 gradle 命令行,所以你可以像这样使用:1)打开终端。

2) 转到您的项目工作区

3) ./gradlew

(请注意,如果权限拒绝错误,请使用此命令 - chmod 744 gradlew 并再次运行 ./gradlew)

(4) ./gradlew assemble -P apiKey=你的fabric api key

现在您可以完全保密您的 api 密钥,但请记住您的 fabric.properties 看起来像这样的一件事

fabric.properties:-

apiSecret=”你的结构密钥” apiKey=”你的结构 api 密钥”

享受吧!

【讨论】:

您也可以删除 1) defaultConfig manifestPlaceholders = [ FABRIC_API_KEY:"Your Key" ] 2)

以上是关于Fabric 不接受 @string/... 在 manifest.xml 中对其 API 密钥的引用的主要内容,如果未能解决你的问题,请参考以下文章

Stripe Fabric iOS 集成

“SqlParameterCollection 只接受非空的 SqlParameter 类型对象,不接受 String 对象”

为啥类型 `Record<string,unknown>` 不接受具有已定义键的对象作为值

Hyperledger Fabric链码之二

如何在 iOS 中使用 Crashlytics 而不使用 Fabric

“string”不包含“Text”的定义,并且找不到可接受类型为“string”的第一个参数的扩展方法“Te