Android APK签名

首先介绍下安卓的包名:

1:apk包名不是我们看到的中文或者英文,一般情况下你是看不到的
2:apk包名的格式为com.xxxxx.xxxxxx,每个程序的长度都不一样,比如腾讯QQ的包名为:com.tencent.mobileqq,百度输入法的包名为:com.baidu.input。(java约定俗成的
域名反过来写来命名包)
3:因为版权问题,包名一般无法修改,也有些软件为了保护版权,只要你修改了包名,一进去就闪退

包名就是appid。唯一确定你应用的东西。当然不能重复,所以通常都是你公司的域名+产品名,当然如果被别的应用占用了,你只能换个了。

com.公司名.项目名称,一般是这样,为什么,因为是约定俗成的,我觉得这样也方便用户知道这个App是哪个公司出的。

一个安卓应用的.apk查看包名的具体步骤如下:

adb shell dumpsys package

apk是安卓应用软件包,apk签名是软件包在安装的时候进行的安全性验证机制。这种签名机制目的是为了确保Apk来源的真实性,以及Apk没有被第三方篡改。开发者通过对Apk进行签名,在Apk中写入一个“指纹”。指纹写入以后,Apk中有任何修改,都会导致这个指纹无效,Android系统在安装Apk进行签名校验时就会不通过,从而保证了安全性。


apk签名相当于程序的身份识别代码,是Android application package英文缩写。

作用

1、apk签名用于程序编译打包之后,手机在运行程序之前会先去验证程序的签名(可以看作类似于我们电脑上常说的md5)是否合法,只有通过了验证的文件才会被运行,所以签名软件的作用让文件通过手机的验证为合法,不同的手机、系统是对应不同的签名的。

2、可以用签名工具来更改。比如手机签名工具ZipSigner 2,可以对手机上的文件进行直接签名,支持apk、zip及jar格式,方便刷机或汉化的朋友。有些爱好修改安卓apk软件的用户有时候需要对apk文件进行修改。但是如果在电脑上操作的话,打包签名是十分复杂的,还必须安装java环境,可以说打包一个包是十分麻烦的,这款签名工具可以解决上述遇到的问题。

3、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。


apk为什么要签名?
 1、防止被其他apk安装替换。因为一个应用的包名是对外可见的,你可以通过工具或者在手机设置里直接查找,都可以找到你安装应用的包名。这里说的包名不是文件夹路径而是applicationId。applicationId是一个应用的唯一标识。如果没有签名认证,别人写一个和你应用一样的包名的应用。那你的应用就可以直接被替换了吧。加了不同签名的apk,如果包名相同,手机系统会提示安装失败。(现在的手机系统已经不允许安装没有签名的apk了,直接运行android studio也会用$HOME/.android/debug.keystore这个文件去默认签名,这是android studio自己创建的签名文件,如果你删掉它会再创建一个debug.keystore,所以。。我好像跑题了)。

 2、为了apk信息的安全。这么说就要提到V1和V2签名方式的区别了,不想篇幅太长,简单来说,android7.0引入了V2签名方式。最大的区别是V1是先解压存档文件,再对其中内容进行计算验证。而V2签名是在整个apk文件的二进制内容上计算和验证的,并且V2签名的apk不能再修改,比如解压,解压之后签名会失效。所以用V2签名后,apk的安装速度会变快(省去解压过程),安全性会有保证(对整个apk验证)。

使用命令如何对apk执行V2、V1签名?请看报道:点这里

内容提要:
使用apksigner,同时支持V1与V2

//apksigner sign --ks 签名文件 --ks-key-alias 别名名称 --out 签名后的apk 原始apk
apksigner sign --ks xxx.jks --ks-key-alias xxxx --out signed.apk original.apk

回车后输入密码即可完成签名。验证是否成功:

apksigner verify -v --print-certs signed.apk

回车后得到下面显示信息代表成功:

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1

你可能感兴趣的:(我的博客,android)