如何从 APK 反编译中保护 Fabric API 密钥?

How to secure Fabric API Key from APK decompilation?

虽然 decompiling 我的 android 应用程序 APK 文件,但我在清单文件中找到了结构 ApiKey 密钥。如何从 APK 反编译中保护 Fabric API 密钥?

我已完成以下代码更改以从清单文件中隐藏 Fabric API 密钥。但是APK反编译后还是可以看到的

我添加了我的布料API键

FabricAPIKey=0123456789ABCDEF012345123456789ABCDEF012 在 gradle.properties.

在build.gradle(模块)

...........
def FABRIC_API_ID = FabricAPIKey

    .....
    buildTypes {
            debug {
                ..........
                manifestPlaceholders  = [//this is used for defining the variable for manifest file
                    FABRIC_API_KEY:FABRIC_API_ID
                 ]
            }
    release{ ..........
                manifestPlaceholders  = [//this is used for defining the variable for manifest file
                    FABRIC_API_KEY:FABRIC_API_ID
                 ]
            }

并在 AndroidManifest.xml

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

尝试将其保存在 strings.xml 中并在此处引用。

然后清单将只显示 int 格式的资源 ID。

但是如果您打开 strings.xml 文件,它将被检索。

这里是来自 Fabric 的迈克。 Seva 的观点应该引起注意 - "a sufficiently motivated hacker can eventually get to it, given a debugger and enough time".

如果需要,您可以将 API 密钥和构建密码放在 fabric.properties 文件中。将 api 密钥从 android 清单中复制出来,并删除以下行:<meta-data android:name="com.crashlytics.ApiKey" android:value="YOUR_API_KEY_HERE"/>

然后创建一个名为 fabric.properties 的文件,并将此文件夹放在应用 crashlytics 的模块的根目录中 build.gradle 在 fabric.properies 文件中,add:apiKey=YOUR_API_KEY_HERE

完成后,刷新您的依赖项以引入更改:./gradlew clean --refresh-dependencies