开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。 APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。 这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。二、签名的注意事项 Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序。不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。 Android签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。 系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。 可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。 签名后需使用zipalign优化程序。 模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。 正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。三、签名方法:1.使用Keytool 和jarsigner工具签名(在jdk/bin目录下)1.生成签名keystore:确保电脑上安装了JDK,因为我们将使用JDK自带的创建和管理数字证书的工具Keytool。在命令行下输入如下命令:keytool -genkey -v -keystore app.keystore -alias alias_name -keyalg RSA -validity 20000-alias 后面跟的是别名这里是alias_name-keyalg 是加密方式这里是RSA-validity 是有效期这里是20000-keystore 就是要生成的keystore的名称这里是app.keystore 然后按回车键按回车后首先会提示你输入的密码:这个在签名时要用的,要记住然后会再确认你的密码。之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码(CN)等。2.签名:jarsigner -verbose -keystore app.keystore -signedjar app_signed.apk app.apk alias_name-keystore: keystore的名称-signedjar app_signed.apk: 指定签名后生成的APK名称app.apk: 目标APK然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。3.查看签名:jarsigner -verify app_signed.apk 查看是否签名,如果已经签名会打印 "jar verified".jarsigner -verify -verbose -certs app_signed.apk 查看签名详细信息。4.通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)zipalign -v 4 app_signed.apk androidres.apk 对apk优化zipalign -c -v 4 androidres.apk 查看apk是否经过优化2.使用eclipse ADT工具签名在Package Explorer 窗口,右键,选择Android Tools--->Export Signed Application Package 然后按照提示一步一步,生成已签名的apk。通过eclipse也可以导出未签名的APK文件。注:需要输入两次密码,第一次是私钥密码,第二次时私钥别名的密码。3.eclipse在debug模式下自动签名(无须手动配置): 在debug模式下用eclipse 的ADT为android签名,只要应用程序在eclipse下开发,系统就会自动给apk签名和优化。 在Eclipse中Windows > Preferences > Android > Build可以看到你keysotre的位置;四、生成Android系统签名 上面讲的Android数字签名大多是与Android APK相关,做CTS 认证时,需要用到Android系统签名。为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make -j4编译出来的system.img使用的是test key,这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用。当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用。这种系统就是release版本的Android系统。1、生成加密key文件要对Android系统进行签名,需要生成四种类型的key文件。a)releasekey (testkey)b)mediac)sharedd)platform1)进入/android_src/development/tools目录。2)使用make_key工具生成签名文件。需要分别生成 releasekey,media,shared,platform。./make_key releasekey '/C=CN/ST=JiangSu/L=NanJing/O=Company/OU=Department/CN=Your Name/emailAddress=YourE-mailAddress' (系统将会提示输入针对各种key的密码,按照提示输入即可)将会生成 releasekey.pk8 和 releasekey.x509.pem文件,其中 *.pk8是生成的私钥,而*.x509.pem是公钥,生成时两者是成对出现的.注:如果出现 openssl : relocation error :openssl : symbol ...尝试用 sudo 执行命令,问题解决了!2.回到根目录android_src。命令执行的时候都最好在工程的根目录下执行,要不然脚本用到的某些文件找不到的。3.编译系统 make -j4 PRODUCT-generic-user dist 其中generic 表示生成的TARGET_PRODUCT类型为generic, user代表TARGET_BUILD_VARIANT为user版本。编译完成之后回在android_src/dist/目录内生成个product_generic-user_files开头的zip文件.这就是我们需要进行签名的文件系统.4.开始签名./build/tools/releasetools/sign_target_files_apks -d key_directory/ out/dist/product_modul-target_files.zip out/dist/signed_target_files.zip 通过sign_target_files_apks 脚本,完成android系统的签名工作.key_directory/ 表示key所在的目录。out/dist/product_modul-target_files.zip 源文件。out/dist/signed_target_files.zip 生成签名的目标文件。可能会出现:ERROR: no key specified for: CalendarWidget.apk Contacts_yellowpage.apk SnsAppMain.apk这表示,签名并没有成功,原因是由于有些apk程序已经签过名了或者找不到对应的key. 这需要我们对apk设置过滤,不对上面的应用进行签名.方法如下:通过参数"-e
标签:android,默认,签名