Atu*_*mar 3 security android environment-variables firebase-security
我有一个 android 应用程序,我想将其部署为商业用途。我正在使用 aws 秘密凭证,目前我已在代码中对其进行了硬编码。
通过将凭据作为外部参数传递,是否有任何安全的方式来部署 Android 应用程序。就像我们在服务器应用程序中所做的一样,将凭据作为环境变量传递。我不想在我的代码库中打开密钥。
我想知道是否有任何方法可以在 android 应用程序中做类似的事情。
我会使用相同的原则,Environment variables但通过 Gradle。
这个想法是你的用户文件夹中应该有一个gradle.properties文件,Gradle 可以从中获取属性。当然,这个文件不会被添加到源代码管理中。
你可以做这样的事情
~/.gradle/gradle.properties
projectAwsCred1=cred1
projectAwsCred2=cred2
Run Code Online (Sandbox Code Playgroud)
build.gradle(应用程序)
...
buildConfigField "String", "AWS_CRED_1", "\"projectAwsCred1\""
buildConfigField "String", "AWS_CRED_2", "\"projectAwsCred2\""
Run Code Online (Sandbox Code Playgroud)
然后(构建后)您可以像往常一样在代码中调用它 Build.AWS_CRED_1
这样,您的凭据将在您的应用程序中烘焙,但仅限于构建时。您当然必须在自述文件中记录这一点,以便其他人(或将来的您)知道是否放置了projectAwsCred*信息。
我发现以下方法可以在构建时将信用作为环境变量传递给 apk。这些将存储为构建变量。
在您的项目目录中创建一个 gradle.properties 文件并添加您的凭据:
AWS_CRED=aws_cred
Run Code Online (Sandbox Code Playgroud)
在你的 gradle 构建文件中,在 android 下添加以下内容:
android {
defaultConfig{
manifestPlaceholders=[AWS_CRED:AWS_CRED]
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是将构建变量传递到您的 Android 清单。现在转到 AndroidManifest.xml 并在标签下添加以下内容:
<application
<meta-data
android:name="AWS_CRED"
android:value="${AWS_CRED}" />
</application>
Run Code Online (Sandbox Code Playgroud)
现在在任何java代码中访问 的值,如下所示:
applicationInfo = getApplicationContext().getPackageManager().getApplicationInfo(getApplicationContext().getPackageName(), PackageManager.GET_META_DATA);
Run Code Online (Sandbox Code Playgroud)
这个方法对我有用,如果有人知道更好的方法,请评论。
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |