文章目录
  1. 1. 命令行
  2. 2. Eclipse
  3. 3. Intellij
  4. 4. 签名之后,使用zipalign优化APK文件。
  5. 5. 签名的意义

手电筒的Version.1算是简单完成了,准备将其打包发布。要发布应用,apk必须要有签名。下面就给大家介绍一下大致的流程。

借助不同的工具,有三种签名方法。但三种方法都可以分为两个步奏:

  • 创建key
  • 使用创建的key对apk签名

命令行

创建key,需要用到keytool.exe(JAVA_PATH\bin),打开cmd输入:

keytool -genkey -alias never.keystore -keyalg RSA -validity 40000 -keystore never.keystore

指令介绍:

-genkey 产生密钥
-alias never.keystore 别名 demo.keystore
-keyalg RSA 使用RSA算法对签名加密
-validity 40000 有效期限4000

使用key对apk签名用到jarsigner.exe(JAVA_PATH\bin),输入指令:

jarsigner -verbose -keystore never.keystore -signedjar never_signed.apk never.apk never.keystore

指令介绍:

-verbose 输出签名的详细信息
-keystore  never.keystore 密钥库位置
-signedjar never_signed.apk never.apk never.keystore 正式签名,三个参数中依次为
签名后产生的文件never_signed,要签名的文件never.apk和密钥库never.keystore

Eclipse

Exports –> Android –> Export Android Application

然后按照提示一步步创建key和进行签名就ok了。

Intellij

Build –> Generate Signed APK .

签名之后,使用zipalign优化APK文件。

zipalign是android SDK中的一个tool,位于SDK_PATH\tools内。优化可以输入如下指令:

zipalign -v 4 never_signed.apk final.apk 

zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),可以在读取资源上获得较高的性能。

在4个字节边界上对齐的意思就是,一般来说,是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。

对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用”对齐”进一步优化,但是大小一般会有所增加。

签名的意义

为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。

使用同一个签名的好处:

  • App升级: 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
  • App模块化:android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路
  • 允许代码和数据共享:android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享。

    <permission android:protectionLevel="normal" />  
    

    protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。

文章目录
  1. 1. 命令行
  2. 2. Eclipse
  3. 3. Intellij
  4. 4. 签名之后,使用zipalign优化APK文件。
  5. 5. 签名的意义