zoukankan      html  css  js  c++  java
  • android 签名 小结

    签名android开发人员的必备知识。

    ---------------------------------------------

    一、为什么要签名 ?

        签名用处主要有两种:  

             1. 使用特殊的key签名可以获取到一些不同的权限。

             2. APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。


        同一程序,如果签名不同,那么就不让你覆盖或升级安装。会出现以下错误:


    只有卸载原来的apk才可以安装。


    Android数字证书包含以下几个要点:        

             (1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序,包括模拟器上运行的(因为模拟器上运行的apk已经被签有debug权限);

             (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证,因为数字证书是用来标识应用程序的作者和 应用程序之间的信任关系;

             (3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

             (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

             (5)Android使用标准的java工具 Keytool and Jarsigner 来生成数字证书,并给应用程序包签名;

             (6)建议 签名后的apk,使用zipalign优化程序



    二、签名的步骤

      a.创建key
      b.使用步骤a中产生的key对apk签名


    具体操作

    方法一: 命令行下对apk签名(原理)


      创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下);使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入

    D:\>keytool -genkey -alias demo -keyalg RSA -validity 40000 -keystore demo.keystore
    /*说明:-genkey 产生密钥
           -alias demo.keystore 别名 为 demo
           -keyalg RSA 使用RSA算法对签名加密
           -validity 40000 有效期限4000天
           -keystore 在当前目录下 生成 demo.keystore 
    D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
    /*说明:-verbose 输出签名的详细信息
           -keystore  demo.keystore 密钥库位置
           -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中 依次为 :签名后产生的文件demo_signed,要签名的文件demo.apk 和 
    密钥库demo.keystore
    

      注意事项:eclipse的android工程的bin目录下的demo.apk 默认是已经使用debug用户签名的所以不能使用上述步骤对此文件再次签名

    正确步骤应该是: 在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。


    方法二:使用Eclipse导出 带签名的apk


      Eclipse直接能导出带签名的最终apk,非常方便,推荐使用,步骤如下:
      第一步:file->export 导出。
     
      第二步:创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到
     
      第三步:填写密钥库信息,填写一些apk文件的密码,使用期限和组织单位的信息。



      第四步:生成带签名的apk文件,到此就结束了。

      第五步:如果下次发布新版本的时候,使用前面生成的keystore来签名。



    方法三:打开 Eclipse 在你要签名的apk上 右击->android tools ->Export signed Application package

      后面的步骤基本和 方法二相同;


    4.签名之后,用zipalign(压缩对齐)优化你的APK文件。


      未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools\目录下)工具对其优化:

    D:\>zipalign -v 4 demo_signed.apk final.apk

      如上,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),在4个字节边界上对齐的意思就是,一般来说,是指编译器把4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。
              2.对齐的结果是,apk的大小一般会有所增加。

    5.签名对你的App的影响。

      1) android系统允许具有相同签名的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
      2) 允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:


    AndroidManifest.xml:<permissionandroid:protectionLevel="normal"/>

    其中protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。
      最后,请一定要记得保管好你的签名证书和他的密码,密码不要告诉任何人,不然签名不同,apk将不能升级安装,只能卸载之前的然后重新安装












  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744715.html
Copyright © 2011-2022 走看看