Android APK签名、配置及遇到的问题分析
2019-07-20 本文已影响29人
alexlee1987
1.APK签名的原因
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.APK签名好处
应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同。
应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。
3. 签名方式
3.1 AndroidStudio可视化签名
步骤1:在Build->Generate Signed Bundle or APK里面导入签名文件
01.png 02.png
PS:如果没有签名文件,可以通过下图步骤创建新签名。
03.png
步骤2:导入签名文件后点击Next,在下图中按需要勾选V1和V2选项,建议同时勾选V1和V2,否则在有些机型可能会出问题;
PS:只勾选v1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式;只勾选V2签名7.0以下会直接安装完显示未安装,7.0以上则使用了V2的方式验证;同时勾选V1和V2则所有机型都没问题。在APK安装出现问题的时候,可以检查生成签名时V1和V2是否都选择了。
04.png
3.2 自动签名
步骤:1.在module下面的build.gradle中增加配置签名信息(PS:如果没有签名文件的话可以用指令签名方式生成);
10.png2.在Project Structure->Modules中配置各个module的签名信息Signing Configs;
11.png
3.在Project Structure->Build Variants中导入各个module配置的Signing Configs;
12.png
配置完毕后点击assembleRelease可以编译正常安装使用的app-releae.apk。如果安装的时候提示下图的错误,这是生成的包缺少签名的缘故。
13.png
此时检查生成的包是app-release-unsigned.apk,这个包不是正常的签名包:
14.png
该问题解决方法是因为步骤2或步骤3的设置有问题,通过检查步骤3和步骤3的配置,即可解决。
如果感觉我的文章对您有用,请给个喜欢,如果有疑问,也欢迎在下方留言,谢谢!!!