【android-kit】生产环境signingConfigs安全

334 阅读2分钟

如果我的文章对您有所帮助,欢迎 👍 , 我的Github.


android-kit 致力于为android关键场景提供解决方案。

1. 前言

应用安全是一个全面的防范体系,不能仅仅只关注于编码这部分。

keystore是android app安全的基石,想象一下:如果你现在项目的keystore泄漏了,那是什么灾难。

  1. 别人可以在各大应用商店中认领你的app,发布盗版app。
  2. 你的第三方服务(推送、支付、统计等待)都可能被他人盗用。
  3. 公司的keystore往往是多个项目共享的,一个项目丢失影响面极大。

2. 如何解决?

在运维中有一个概念:最小权限原则。 一个东西经手的人越少,相对越安全。

android中,常见的keystore配置有几种方案

  1. keystore文件配置在当前工程中,password信息写在gradle文件中。
  2. keystore文件配置在当前工程中,password信息写在local.properties文件中。
  3. keystore文件、password信息配置在本机某个目录下。

这几个方案都有些明显的问题

  1. keystore文件和password信息会被项目人员获取。
  2. 开发环境 windows mac linux(ci) 路径不太容易保持一致,需要兼容。

解决方案:

项目中配置一个dev的keystore,开发中所有人员都只使用dev signingConfigs。

构建生产包

  1. release不配置signingConfigs,编译出一个(些)未签名的apk包 通过 jarsigner -verbose -keystore $KEYFILE -signedjar android-release.apk android-release-unsigned.apk $KEY_ALIAS命令重新签名。

  2. release配置dev的signingConfigs 通过gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD 命令打包,替换dev signingConfigs。 其中$KEYFILE为绝对路径,gradlew assembleRelease可以换成任意buildType。

这俩种方式都可以直接放在ci服务中,也可以让负责人本机打包。

引用:sq.163yun.com/blog/articl…