`
yangguangfu
  • 浏览: 1539464 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 签名详解

阅读更多

         在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限。Android使用Java的数字证书相关的机制 来 给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系 统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信 任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。(文/feisky

一:同一个开发者的多个程序尽可能使用同一个数字证书 ,这可以带来以下好处。

(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。

(3) 可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共 享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature, 则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。

在签名时,需要考虑数字证书的有效期

(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。

(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。

(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

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

              (1)所有的应用程序都必须有数字证书 ,Android系统不会安装一个没有数字证书的应用程序

              (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

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

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

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

              (6)使用zipalign 优化 程序。

Android 系统不会安装运行任何一款未经数字签名的apk程序,无论是在模拟器上还是在实际的物理设备上。Android的开发工具(ADT插件和Ant)都可以协 助开发者给apk程序签名,它们都有两种模式:调试模式(debug mode)和发布模式(release mode)。

在调试模式下,android的开发工具会在每次编译时使用调试用的数字证书给程序签名,开发者无须关心。

当要发布程序时,开发者就需要使用自己的数字证书给apk包签名,可以有两种方法。

(1)在命令行下使用JDK中的和Keytool(用于生成数字证书)和Jarsigner(用于使用数字证书签名)来给apk包签名。

(2)使用ADT Export Wizard进行签名(如果没有数字证书可能需要生成数字证书)。

 

三;两种签名方式

 

第一种签名方式, 使用Keytool和Jarsigner给程序签名( 用于1.5以下版本


命令:keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000

该 命令中,-keystore ophone.keystore 表示生成的证书,可以加上路径(默认在用户主目录下);-alias ophone 表示证书的别名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示证书的有效期是20000天。



此时,我们会在互用主目录下看到ophone.keystore,即我们刚刚创建的证书。

 

 

 

 

 

第二种签名方式:现在介绍android 1.5及更新版本的apk签名方式

 

 

1,打开Eclipse->选择你要签名的项目->右击->android tools->Export signed Application package...


2,跳出窗口

 


 

3,project checks 如果核对项目名没有问题的话 点击 Next
然后跳出keystore selection 如果是已经存在keystore的文件就选择然后next 输入keystore的密码进行签名。
如果没有的话选择 create new keystore 然后选择 keystore 保存的位置,设置keystore的密码,点击Next。

 



4.填写keystore的基本信息,如,别名,密码,有效期,姓名,组织,组织名称,所在城市,所在省份,国家等,点击Next


5.选择被签名后的APK保存位置。点击finish。

 


6.就可以在你保存的位置中找到相应的被签名后的APK文件。


 

 

以上的签名只有在ANDROID1.5以及以后的版本适用。谢谢。
希望对大家有帮助,谢谢。

 

 

 

 

  • 大小: 28.1 KB
  • 大小: 18.5 KB
  • 大小: 24.9 KB
  • 大小: 19.2 KB
  • 大小: 5.4 KB
  • 大小: 19.5 KB
16
3
分享到:
评论
5 楼 ytbnkkf 2014-11-20  
那正式的签名和debug的签名有何不同?怎么在一个应用程序中判断是否是debug签名?
4 楼 lixinlixin2008 2012-12-10  
第二中方法好爽啊,秒射,哈哈
3 楼 liu_gang 2012-05-21  
为什么我创建到最后会有这个错误呢:errors occurred during the build
2 楼 pop1030123 2012-03-17  
file separater 都是人民币,哈哈
1 楼 anyang763 2011-12-12  
学习了

相关推荐

    android 签名 详解

    Android 签名详解 Android 签名是一种安全机制,用于防止 Android 应用程序被反编译和篡改。通过签名,开发者可以确保其应用程序的身份和完整性,从而保护用户的安全和隐私。 Android 签名的重要性 Android 签名...

    Android应用开发详解.pdf

    根据提供的标题“Android应用开发详解.pdf”以及描述“Android应用开发详解.pdf”,我们可以推断这份文档主要涵盖了关于Android平台上的应用程序开发的相关知识和技术。虽然提供的部分内容似乎并不包含具体的信息,...

    Android签名证书文件的解析和签名校验的加强

    ### Android签名证书文件的解析与签名校验加强 #### 一、Android签名机制概述 Android平台为了确保应用的安全性和来源的可信度,采用了一套严格的签名机制。这一机制确保了只有经过签名的应用程序(APK)才能够在...

    Android签名工具

    Android签名工具(SignApk)是一个Java应用程序,它使用密钥对APK进行签名,以便可以在Android设备上安装和运行。本文将详细讲解Android签名工具的使用、工作原理以及其在Android开发中的重要性。 ### 1. Android...

    android客户端签名漏洞

    2013年,国家互联网应急中心(CNCERT)发现并通报了一种利用Android签名漏洞的恶意程序——Skullkey扣费木马。该木马通过利用Android操作系统中的签名漏洞,能够悄无声息地植入到正常的应用程序中,进而实现恶意扣费...

    mac下android签名工具

    在Android应用开发中,发布应用到Google Play或其他第三方市场前,必须对其进行签名。这个过程确保了应用的完整性和开发者身份的验证。在Mac操作系统上,我们可以使用命令行工具来完成这个任务。本教程将详细解释...

    android开发详解

    Android开发详解:从入门到精通 Android开发是移动应用开发领域的一个重要组成部分,它基于Linux内核,由Google公司主导并开源,为开发者提供了一个开放的平台来创建各种应用程序。本篇文章将深入探讨Android开发的...

    Android项目开发详解

    在Android项目开发详解中,我们将深入探讨Android应用的开发流程,技术细节以及最佳实践。Android作为全球最受欢迎的移动操作系统之一,其开发环境、工具集、API以及设计模式都是开发者需要掌握的关键知识点。 首先...

    android系统签名工具

    通过在每个App中使用sharedUserId设置即可共享系统账户权限,比如android:sharedUserId="android.uid.system" 这样就是用了system这个uid了。给apk增加系统签名,否则一些系统apk将无法安装,使用命令: java -jar ...

    Android AIDL使用详解

    AIDL允许我们将接口定义为一个文件,该文件描述了方法签名,这些方法可以在不同进程中调用。Android系统会根据AIDL文件自动生成Java代码,使得客户端和服务端能够通过Binder机制进行通信。Binder是Android中实现IPC...

    Android加密之全盘加密详解

    3 应用签名 4 身份验证 5 Trusty TEE 6 SELinux 7 加密 等等 其中,加密又分全盘加密(Android 4.4 引入)和文件级加密(Android 7.0 引入),本文将论述加密中的全盘加密的基本知识。全盘加密在 Android 4.4 中...

    android mupdf droidtext0.5 PDF手写签名

    《Android Mupdf与Droidtext0.5:实现PDF手写签名技术详解》 PDF手写签名在当今数字化办公环境中扮演着至关重要的角色,它为电子文档提供了安全且便捷的签署方式。本文将深入探讨如何在Android平台上利用Mupdf库和...

    Android 程序如何生成签名文件

    #### 一、理解Android签名的重要性 在Android平台上发布应用程序时,每个应用都需要有自己的数字签名。这个签名用于标识应用程序的发布者,并且当用户已经安装了一个应用的已签名版本后,只有带有相同签名的新版本...

    Android 签名混淆打包文档

    ### Android签名混淆打包详解 #### 一、签名与混淆打包的重要性 在Android应用开发过程中,签名与混淆打包是非常重要的步骤。签名确保了应用的身份唯一性和后续版本更新的一致性,而混淆则增强了应用的安全性,保护...

    Android.mk 详解剖析

    - **LOCAL_CERTIFICATE**:指定签名APK所使用的证书。 ### 五、构建过程 Android构建系统读取所有的Android.mk文件,根据模块描述变量构建目标,并处理依赖关系。然后,使用NDK(Native Development Kit)或AOSP...

    android签名完整版

    ### Android APK签名详解 在Android应用开发过程中,对APK进行签名是一项重要的步骤。签名不仅可以确保应用程序来源的真实性和完整性,还能够确保应用更新时是由同一个开发者发布。本文将详细介绍如何生成Android ...

    AndroidStudio生成签名

    ### Android Studio生成签名详解 #### 一、引言 在发布Android应用到Google Play或其他应用市场之前,开发者需要对应用程序进行签名。签名是确保应用程序完整性和来源可信度的关键步骤之一。本文将详细介绍如何...

Global site tag (gtag.js) - Google Analytics