Android Apk 签名

一:为什么要对Apk进行数字签名

开发者通过开发工具编译生成的应用程序以.apk命名,借助开发工具、第三方平台或adb命令将其安装到安卓手机上运行或更新。在安装的时候系统会检测apk是否被签名,如果没有签名则无法安装;为防止其他人通过使用相同的包名混淆替换已安装的程序,在发布的时候需要进行唯一的数字签名,保证每次版本的一致性。

debug版本的apk,使用系统默认的签名文件debug.keystore,别名= androiddebugkey,密码=android,安装运行时已经过签名

二:Apk签名方式

  • 使用AndroidStudio工具生成/引用签名文件

Build  -- Generate Signed APK  -- Create new key store

Android Apk 签名_第1张图片

Key store path:签名文件存放的路径

Password:密钥库密码

Key  - Alias :别名

key  - Password :密钥密码(可以与密钥库密码一致)

.............................

Android Apk 签名_第2张图片

创建完成后可以直接下一步进行选择版本进行签名(如果签名文件存在则忽略以上步骤直接进行下一步):

Android Apk 签名_第3张图片

  • 使用工具自动生成signingConfigs中的签名信息

按步骤操作即可自动配置,无需手写

Android Apk 签名_第4张图片

Android Apk 签名_第5张图片

Android Apk 签名_第6张图片

Android Apk 签名_第7张图片

  • 命令行生成签名文件并打包带签名的apk文件

   在项目根目录下生成签名文件dd.jks

Android Apk 签名_第8张图片

-genkeypair:指定生成数字签名;

-alias:指定生成数字签名的别名;

-keyalg:指定生成数字签名的算法。使用RSA算法。

-validity:指定生成数字签名的有效期;

-keystore:指定生成数字签名的存储路径。

Android Apk 签名_第9张图片

使用命令行对Apk包签名,在根目录下生成签名的apk文件:

 -verbose:指定生成详细输出;

 -keystore:指定数字证书的存储路径;

 -signedjar:该选项的3个参数分别为签名后的APK包、未签名的APK包、数字证书的别名。

Android Apk 签名_第10张图片

  • build.gradle中进行配置签名信息

除了可以用工具自己生成也可以在build.gradle中直接配置,配置信息如下:

Android Apk 签名_第11张图片

可以看到,文件信息以明文的形式显示,为了避免将签名信息提交,可以在配置文件local.properties或gradle.properties中进行配置,区别是在gradle.properties中配置签名信息后,build.gradle中可以直接引用,而local或自定义的properties文件则需要读取并获取到签名信息,properties中的配置如下:

1:local.properties:

Android Apk 签名_第12张图片

Android Apk 签名_第13张图片

2:gradle.properties:

Android Apk 签名_第14张图片

Android Apk 签名_第15张图片

  • 读取环境变量中的签名信息,隐藏签名

签名文件信息配置到环境变量中,然后build.gradle中进行读取,windows10配置如下:

Android Apk 签名_第16张图片

build.gradle中的引用,配置完成后重启下开发工具不然编译的时候找不到系统变量,通过System.getenv(变量名)获取:

Android Apk 签名_第17张图片

 

你可能感兴趣的:(Android)