Android应用程序打包签名、加固、二次打包(图形/命令行)
2017-09-22 本文已影响182人
芒果味的你呀
前言
Android应用程序在编程开发完成后,需要进行签名打包成相应的APK文件,这就是我们平常网上下载安装的Android应用程序安装包。
APK的全称是Android Package,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android虚拟机或者Android设备中执行即可安装。APK文件和Sis一样,把Android SDK编译的工程打包成一个安装程序文件,格式为apk。APK文件其实是zip格式的压缩包,但后缀被改成了apk,通过解压缩软件解压后,可以看到Dex文件。
应用签名的意义
1. 保障应用程序开发者的合法权益
在对应用程序签名后,即表示此应用程序是签名人所开发的,对此程序具有所有权。
2. 预防应用程序替换
应用程序签名可以防止部分人通过使用相同的Package Name来混淆替换已经安装的程序,从而出现一些恶意篡改。
3. 保证应用程序版本的一致性
一般应用程序都会有更新,即版本的升级。如果应用程序的签名不一致,是无法进行更新替代的。所以,应用程序签名是保证当前应用程序顺利进行更新安装的前提。
官网
签名打包图形化过程:
步骤一 进入签名打包界面
打开Android Studio,依次选择菜单栏上“Build”->“Generate Signed APK...”,这样就进入了Android程序签名打包界面。
新建Key文件 image.png
如果没有key文件:
image.png根据中文提示,填写对应内容创建相应的Key文件,JACK的机器人相应的路径下创了一个“MyKey.jks”Key文件。
步骤三 导入相应的Key文件签名打包应用
创建完Key文件后,会直接返回之前的Key文件导入界面,默认导入当前创建的Key文件。 image.png
“Next”后,确认APK文件的导出路径及“Build Type”。
找到刚刚创建的APK文件,这个就是可以直接安装在Android系统中的应用程序安装包了。
从命令行构建和签署您的应用(不需要 Android Studio 也可以签署您的应用)
步骤一首先使用 keytool生成一个私钥
image.pngkeytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
本示例会提示您输入密钥库和密钥的密码,并为您的密钥提供“Distinguished Name”字段。随后,它生成一个名为 my-release-key.jks 的密钥库文件,将它保存在当前目录中(您可以根据需要移动它)。此密钥库包含一个有效期为 10,000 天的密钥。
步骤二:选择一种签名方式
-
1.使用jarsigner签名
jarsigner -verbose -keystore my-release-key.jks -signedjar demo_signed.apk demo.apk alias_name
有的版本可能灰提示错误,此时参数加些东西:-digestalg SHA1 -sigalg MD5withRSA
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore my-release-key.jks -signedjar demo_signed.apk demo.apk alias_name
主要的四个参数:keystore文件,签名后apk文件的绝对路径,没签名的apk的绝对路径 ,keystore的别名。
image.png-
2.使用apksigner签名
apksigner sign --ks my-release-key.jks my-app.apk
image.png image.png-
3.配置 Gradle 以签署您的 APK
如果要单独打某个渠道的release包:./gradlew assemble某渠道release
关于加固
image.png为什么我们的程序要进行加固,如果签名打包之后不加固,很容易被别人用反编译的软件把我们的程序代码提取出来,所以现在几乎所有的程序都会加固。虽然加固的apk也会被反编译出来(但过程比较繁琐),想要代码更加安全还需要进行代码混淆等。
需要说明的是加固要求的apk是需要带签名的。
所以我们要先打包签名,然后去加固,但加固时又会把我们的签名擦去,即加固之后的apk又是没有签名的,所以我们要进行二次签名(就用上文的命令行的前两者之一即可)。
所以我们一般的流程是打包签名--加固(网址:http://jiagu.360.cn/)--二次加固(用命令行)