文章目录
1. 签名的作用2. Android Studio 如何打包签名3. 反编译 APK3.1 获取图片资源3.2 获取 .XML 资源3.3 获取代码资源1. 签名的作用
Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上平时我们调试运行时到手机上时,是Android Studio会自动用默认的密钥和证书来进行签名但是我们实际发布编译时,则不会自动签名,这个时候我们就需要进行手动签名APK签名的作用:
(1)应用程序升级
想升级应用程序,签名证书要相同,应用程序的包名称要相同
(2)应用程序模块化
Android系统允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,以模块化的方式进行部署,用户可以独立的升级其中的一个模块。
(3)代码或者数据共享
Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能,可以在应用程序间以安全的方式共享代码和数据。
2. Android Studio 如何打包签名
调试运行时,Android Studio默认生成的apk在:app/build/outputs/apk目录下
手动签名步骤:
1、打开HelloWorld项目——>Build——> Generate Signed Bundle/APK…
2、选择APK——>Next
3、Create new key——>Next
如果没有key,就创建一个,有的话就选择存在的Key
4、依次填写相关信息——>Ok——>Next
5、选择release——>v1/v1+v2——>Finish
6、打包签名成功后,可以看到 D:\AndroidProject\HelloWorld\app\release 目录下的 app-release.apk 文件
7、获取密钥的签名
(1)cmd——>进入之前存放钥匙的文件夹——>输入钥匙的名字:keytool -list -v -keystore mykey.jks——>输入密钥库口令(之前设置的密码)——>可以看到签名的信息了
(2)直接通过APK获取密钥的签名
cmd——>进入 app-release.apk 文件d的目录:D:\AndroidProject\HelloWorld\app\release——>输入 keytool -printcert -jarfile app-release.apk——>可以看到签名的信息了
打包 Android APK 的方法还有很多,命令行,或者Gradle,ANT,MAVEN等等
3. 反编译 APK
反编译:通过某些反编译软件,对APK进行反编译,从而获取程序的源代码,图片,XML资源等文件
一般想要反编译一个apk,无非就是想获得三样东西:图片资源 、XML资源、代码资源
3.1 获取图片资源
(1)将 .apk后缀的文件后缀改成 .zip——>解压——>打开res目录
点进去可以看到我们想要的图片资源
3.2 获取 .XML 资源
可以在刚刚的目录下看到有 .xml 文件,但是打开的都是乱码或者是空白的
要想获取到这个 xml 资源,需要借助一个名为 AXMLPrinter2.jar 的jar包,然后把这个jar包放在 xml文件的同级目录下,用cmd命令找到这个目录,然后执行
java -jar AXMLPrinter2.jar xxxxx.xml>xxxxx.txt
可以看到多了 AndroidManifest.txt 文件,打开就是 xml资源的内容了
3.3 获取代码资源
首先要准备两个工具:dex2jar 和 jd-gui
dex2jar主要是用来把之前zip解压出来的classed.dex转成jar包的
jd-gui主要是用来打开jar包的
将之前zip文件里的 classes.dex 放到 dex2jar目录下,注意必须要跟 d2j-dex2jar.bat 是同级目录
接着用 cmd,cd 到dex2jar目录下,输入命令:d2j-dex2jar.bat classes.dex
然后目录里会多一个classes-dex2jar.jar 的jar包
注意:如果在cmd里输入命令之后,出现如下错误
dex2jar classes.dex -> .\classes-dex2jar.jar
Detail Error Information in File .\classes-error.zip
Please report this file to /p/dex2jar/issues/entry if possible
这是因为现在旧版的比如2.0版不能反编译某些dex了,可以下载2.1版本的 dex2jar
最后在用 jd-gui 把此jar包打开,最终apk的代码就这样被反编译出来了