在 Android 中如何优雅地配置私密信息

简介: 在实际的项目开发中,经常会用到一些第三方的 SDK ,而使用这些 SDK 基本上都是需要配置 APPKEY 或 APPSECRET 等信息。此外 APP 打包时需要 KEYSTORE , STOREPASSWORD的信息。

在实际的项目开发中,经常会用到一些第三方的 SDK ,而使用这些 SDK 基本上都是需要配置 APPKEYAPPSECRET 等信息。此外 APP 打包时需要 KEYSTORE , STOREPASSWORD的信息。这些都是私密配置信息,不应该发布到 Github 或其它公共空间。

一般来说有以下几种方式

  1. 写在 string 资源文件中

  2. 配置在 BuildConfig 类中

  3. 使用 Android 密钥库系统

  4. 使用 NDK 加密

  5. 保存在服务端,通过接口获取

直接硬编码肯定不是最好的方式,只要代码上传就会分享到各个地方。最好的方式是当然是保存在服务端,在需要的时候进行获取。

使用 Gradle 配置文件

首先介绍一种简单方式在 gradle 种配置 string 资源和常量的方式。而不是直接在 string 文件中硬编码。

gradle.properties

首先在 Project 的目录下创建一个 gradle.properties 文件。例如配置

# Project-wide Gradle settings.


...


# org.gradle.parallel=true


KEY_STORE=../xxxx.keystore


KEY_ALIATS=这里是别名


KEY_PASSWORD=这里是keypassword的密码


STORE_PASSWORD=这里是store的密码


APP_KEY=第三方sdk app key


APP_SECRET=第三方sdk app secret


APP_USER=wecodexyz@gmai.com

 

这个文件信息定义打包 keystore 密码和 App Key 等信息。

build.gradle

在 app 目录下的 build.gradle 文件中对 keystore 和 APP_KEY 等信息进行了配置。

android {


   compileSdkVersion 25


   buildToolsVersion "25.0.2"


   signingConfigs {


       config {


           storeFile file(KEY_STORE)


           keyAlias KEY_ALIATS


           keyPassword KEY_PASSWORD


           storePassword KEY_PASSWORD


       }


       debug {


           storeFile file(KEY_STORE)


           keyAlias KEY_ALIATS


           keyPassword KEY_PASSWORD


           storePassword KEY_PASSWORD


       }


   }


   defaultConfig {


   }


   release {


           //这里配置String常量,可以用BuildConfig类引用


           buildConfigField "String", "APP_USER", "\"${APP_USER}\""


           //这里配置string资源,使用@string可以在manifest等文件中引用


           resValue "string", "app_key", "${APP_KEY}"


           resValue "string", "app_secret", "${APP_SECRET}"


       }


       debug {


           //这里配置String常量,可以用BuildConfig类引用


           buildConfigField "String", "APP_USER", "\"${APP_USER}\""


           //这里配置string资源,使用@string可以在manifest等文件中引用


           resValue "string", "app_key", "${APP_KEY}"


           resValue "string", "app_secret", "${APP_SECRET}"


       }


}

 

最后最关键的一点是

要在 .gitignore 文件中忽略 gradle.properties 文件

要在 .gitignore 文件中忽略 gradle.properties 文件

要在 .gitignore 文件中忽略 gradle.properties 文件

使用 gradle 方式安全性是最弱的。

使用 Android 密钥库系统

Android 密钥库系统可以保护密钥材料免遭未经授权的使用。首先,Android 密钥库可以防止从应用进程和 Android 设备中整体提取密钥材料,从而避免了在 Android 设备之外以未经授权的方式使用密钥材料。其次,Android 密钥库可以让应用指定密钥的授权使用方式,并在应用进程之外强制实施这些限制,从而避免了在 Android 设备上以未经授权的方式使用密钥材料。

这个是 Google 自家提供的 API, 但它只在 Android 4.3 以后的系统中才引用,故此方案有一定的限制。

使用 NDK 加密

可以将加密算法封装在 NDK 中,在一定程度上增加了破解的难度。而且可以不受 API Level 的限制。

保存在服务端,通过接口获取

对于一些安全性要求比较高的 APP 来说,是推荐使用这种方式的。同时接口要使用 Https 协议

那么当通过接口获取到私密信息如何保存呢?这时候可以使用 NDK 或者 Android 密钥库系统。

参考文献

https://guides.codepath.com/android/Storing-Secret-Keys-in-Android

https://developer.android.com/training/articles/keystore.html

微信关注我们,可以获取更多


 

目录
相关文章
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
1月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
169 2
|
1月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
61 0
玩转安卓之配置gradle-8.2.1
|
3月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
121 1
|
3月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
217 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
3月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
173 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
3月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
105 3
|
3月前
|
移动开发 JavaScript 开发工具
Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
|
3月前
|
监控 安全 API
Android项目架构设计问题之保证线上用户不会进入到本地配置页面如何解决
Android项目架构设计问题之保证线上用户不会进入到本地配置页面如何解决
30 0
|
3月前
|
JSON Android开发 数据格式
Android项目架构设计问题之在远端动态配置中添加相应配置如何解决
Android项目架构设计问题之在远端动态配置中添加相应配置如何解决
28 0