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 密钥的引用的主要内容,如果未能解决你的问题,请参考以下文章
“SqlParameterCollection 只接受非空的 SqlParameter 类型对象,不接受 String 对象”
为啥类型 `Record<string,unknown>` 不接受具有已定义键的对象作为值