在 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

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


 

目录
相关文章
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
3144 160
|
11月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
1004 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
11月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1394 6
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
1114 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
783 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10762 2
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
693 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
1688 2
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
3152 0
玩转安卓之配置gradle-8.2.1

热门文章

最新文章