什么是签名
Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名(调试时默认生成的apk在:app/build/outputs/apk目录下);但是我们实际发布编译时,则不会自动签名,这个时候我们就需要进行手动签名了
APK签名有以下好处:
1.应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同
2.应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块
3.代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名
打包Android APK的方法有很多:命令行,或者Gradle,ANT,MAVEN,多渠道打包等等
AS图形化界面打包签名:Build->Generate Signed APK...
反编译APK获取代码&资源
1.apktool:获取资源文件,提取图片文件,布局文件,还有一些XML的资源文件 cmd: apktool.bat d csdn.apk
2.dex2jar:将APK反编译成Java源码(将classes.dex转化为jar文件)
cmd:d2j-dex2jar.bat classes.dex(apk解压后中的classes.dex复制到dex2jar.bat所在的目录下) ===》生成jar包
3.jd-gui:查看2中转换后的jar文件,即查看Java文件
一般的话,apk发布都会进行混淆,然后进行一些加密,或者使用第三方的加密平台,用的比较多的"爱加密"