导读 大家好,精选小编来为大家解答以上的问题。如何发布android,应用程序app增加签名证书很多人还不知道,现在让我们一起来看看吧!Android系
大家好,精选小编来为大家解答以上的问题。如何发布android,应用程序app增加签名证书很多人还不知道,现在让我们一起来看看吧!
Android系统要求所有签名使用该应用的作者,并建立程序间的信任关系。用户不使用证书来控制可以安装哪些程序。证书不需要授权中心签名:在Android应用程序上使用自签名证书是完全允许的,也是常见的。了解Android应用签名有以下几个重要点:所有应用都必须签名。系统不会安装任何未签名的程序。可以用自己的证书签名。不需要授权中心。当您希望为最终用户发布应用程序时,必须签入适当的密钥。发布程序时不能使用SDK工具签入的DebugKey。系统仅在安装应用程序时检测证书的有效性。如果安装后应用程序的证书无效,应用程序仍然可以正常工作。您可以使用标准工具——Keytool和Jarsigner——来生成密钥并对apk文件进行签名。一旦您签署了申请,请务必使用zipalign工具来优化最终的APK包。安卓系统不会安装运行没有正确签名的应用。这个规则适用于任何运行Android的地方,不管是真机还是模拟器。因此,在模拟器或真实机器上运行/调试程序之前,必须对程序进行签名。当您调试应用程序时,AndroidSDK工具会为您签署应用程序。Eclipse的ADT插件和Ant编译工具都提供了两种签名模式:——调试模式和发布模式。开发和测试时,可以使用调试模式。在调试模式下,编译工具使用嵌入在JDK中的Keytool工具来创建密钥库和密钥(包括可识别的名称和密码)。每次编译时,使用这个DebugKey对apk文件进行签名。因为可以识别密码,所以每次编译时都不需要提示您输入keystore和密匙密码。当您的程序准备好发布时,您必须在发布模式下使用密钥对apk文件进行签名。有两种方法可以做到这一点:1。在命令行中使用Keytool和Jarsigner。在这个方法中,首先需要编译一个未签名的apk。然后使用Jarsigner(或类似的工具)并用您的密钥手动签署apk。如果没有正确的密钥,可以运行Keytool来手动生成自己的密钥库/密钥。2.使用ADT导出向导。如果使用Eclipse/ADT插件进行开发,可以使用导出向导来编译程序、生成密钥(如果需要的话)和签署apk,所有这些都在导出向导中。一旦你的程序被签署,不要忘记运行zipalign来为apk做额外的优化。签名应用程序签名的某些方面可能会影响应用程序的开发,尤其是当您计划一起发布多个应用程序时。一般来说,推荐的策略是所有程序在整个应用程序生命周期内签署相同的证书。你应该这么做的原因有几个:应用升级——当你升级应用的时候,如果你想让用户顺利升级,那么你需要签署同样的证书。当系统安装升级应用程序时,只有当新版本的证书与旧版本的证书匹配时,系统才会允许升级。如果您没有为该版本签署适当的证书,那么在安装时,您需要为应用程序指定一个新的包名3354。在这种情况下,用户安装的新版本被视为全新的应用程序。应用程序模块化—— Android系统允许具有相同证书的应用程序在应用程序请求的情况下在同一进程中运行,这样系统会将它们视为单个应用程序。通过这样配置应用程序,用户可以选择更新每个独立的模块。代码/数据权限共享——Android系统提供了基于签名的权限检查,所以如果应用之间有特定的证书签名,就可以共享功能。通过多个程序签署同一个证书并使用基于签名的权限检查,您的程序可以安全地共享代码和数据。 决定签名策略的另一个重要因素是如何设置密钥的有效期。如果您计划支持单个应用程序的升级,您需要确保您的密钥的到期日期超过预期的应用程序生命周期。建议使用25年或以上的有效期。当你的密钥过期后,用户无法顺利更新到新版本。如果要为多个不相关的应用签署同一个密钥,那么就必须保证密钥的有效期超过所有应用的所有版本的生命周期,包括未来可能加入这个阵营的应用。如果您想在AndroidMarket上发布您的程序,密钥的有效期必须在2033年10月22日之后。目前,市场强制执行这一要求,以确保用户能够顺利地更新他们的程序。当您设计应用程序时,请务必记住这些要点,并使用适当的证书对应用程序进行签名。在开始之前,您必须确保Keytool可用于SDK编译工具。大多数情况下,您可以通过设置JAVA_HOME环境变量来告诉SDK编译器如何找到Keytool。此外,您可以将Keytool在JDK的路径添加到PATH变量中。如果你在Linux上开发,用GNU编译器编译Java,请确保系统用的是JDK的Keytool而不是gcj。如果Keytool已经在您的路径中,它可能是一个到/usr/bin/keytool的符号链接。在这种情况下,检查符号链接的目标以确保它指向JDK的Keytool。如果您计划向公众发布您的应用程序,您还需要Jarsigner工具。Jarsigner和Keytool包含在JDK中。调试模式下的签名Android编译器工具提供了debug签名模式,使得开发和调试应用程序更加容易,而且还满足Android系统的签名要求。当使用Debug模式编译你的app时,SDK工具会调用Keytool工具自动创建一个Debug的keystore和key。然后,这个Debugkey会自动用于apk的签名,这样,你不需要使用你自己的key来为应用程序包签名。 SDK工具使用预先定义好的名字/密码来创建Debugkeystore/key: ·Keystore名字:“debug.keysotre” ·Keystore密码:“android” ·Key别名:“androiddebugkey” ·Key密码:“android” ·CN:“CN=AndroidDebug,O=Android,C=US” 如果需要的话,你可以改变Debugkeystore/key的位置和名字,或者提供一个自定义的Debugkeysotre/key。然而,任何自定义的Debugkeystore/key必须使用和默认Debugkey(上面描述的)相同的名字和密码。(在Eclipse/ADT中,操作Windows>Preferences>Android>Build实现。) 注意:你不能将签有Debug证书的应用程序发布给公众。 Eclipse用户 如果你在Eclipse/ADT下开发(并且已经按照上面描述的“签名的基本设定”配置了Keytool),Debug模式下签名默认是开启的。当你运行或是调试应用程序时,ADT会使用Debug证书进行签名,并运行zipalign,然后安装到选择的模拟器或是连接上的设备。整个过程不需要你参与,前提是ADT能访问Keytool。 Ant用户 如果你使用Ant来编译你的apk文件,需要在ant命令中添加debug选项来开启Debug签名模式(假设你正在使用由android工具生成build.xml文件)。当你运行antdebug来编译你的程序时,编译脚本会生成一个keystore/key,并为apk进行签名。然后脚本会使用zipalign工具对apk进行对齐处理。整个过程不需要你参与。阅读“其它IDE下开发:Debug模式编译”来了解更多的信息。 Debug证书过期 Debug模式下签名用的证书(默认是Eclipse/ADT和Ant编译)自从它创建之日起,1年后就会失效。 当证书失效时,你会得到一个编译错误,在Ant编译上, 错误如下: debug: [echo]Packagingbin/samples-debug.apk,andsigningitwithadebugkey... [exec]DebugCertificateexpiredon8/4/083:43PM 在Eclipse/ADT中,Android控制台上你将会看到���个相似的错误。 为了解决这个问题,只需要删掉debug.keystore文件即可。AVD默认存储的位置在:~/.android/avd(OSX和Linux),C:DocumentsandSettings\.android(WindowsXP),C:Users\.android(WindowsVista)。 当下一次编译的时候,编译工具会重新生成一个新的keystore和Debugkey。 Release模式下签名 当你的程序准备好释放给其它用户时,你必须: 1.获取一个合适的密钥 2.在Release模式下编译程序 3.使用密钥签名程序 4.对齐APK包 如果你是使用Eclipse/ADT插件开发,你可以使用导出向导来完成编译、签名和对齐等操作。在整个过程中,导出向导甚至还可以生成一个新的keystore和密钥。因此,如果你使用Eclipse,你可以直接跳到“使用EclipseADT编译和签名”。 获取一个合适的密钥为了进行程序的签名,首先,你必须有一个合适的密钥。密钥指: ·个人持有。 ·代表个人、公司或组织实体的身份。 ·拥有一个有效期。有效期推荐超过25年。 如果你在AndroidMarket上发布你的程序,需要注意一点的是:程序的有效期需要在2033.10.22之后。你不能上传一个应用程序,而它的key的有效期是在这个日期之前。 ·不是由AndroidSDK工具生成的Debugkey。 如果你没有一个合适的key,你一定要使用Keytool来生成一个。如“基本设定”中描述的,确保Keytool可用。 为了用Keytool生成一个key,使用keytool命令并传入一些可选参数,如下表所示。 警告:确保密钥的安全。一定要阅读“安全储存你的密钥”中讨论如何确保你的密钥的安全以及这对你和用户为何如此重要。尤其是,当你生成你的密钥时,一定要为keystore和key使用强密码。本文到此结束,希望对大家有所帮助。