AndroidPackage和签名详解.ppt_第1页
AndroidPackage和签名详解.ppt_第2页
AndroidPackage和签名详解.ppt_第3页
AndroidPackage和签名详解.ppt_第4页
AndroidPackage和签名详解.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android应用开发,2,07Package和签名,APK文件介绍aapt为什么要签名签名的注意事项Android数字证书的有效期使用Eclipse工具签名keytooljarsigner,3,APK:在Android平台下,程序文件的后缀名为“.APK”,APK是AndroidPackage的缩写,意思是Android安装包,是类似WM系统“.CAB”和Symbian系统“.sis”的文件格式。Apk文件实际是一个zip压缩包,可以通过解压缩工具解开。以下是我们用zip解开helloworld.apk文件后看到的内容,可以看到其结构跟工程结构有些类似:,APK文件介绍,1.Manifest文件AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把Apk上传到GoogleMarket上,也要对这个xml做一些配置。2.META-INF目录META-INF目录下存放的是签名信息,用来保证Apk包的完整性和系统的安全。在eclipse编译生成一个API包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装Apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个Apk。这就保证了Apk包里的文件不能被随意替换。比如拿到一个Apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。,APK文件介绍,3.classes.dex文件classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟器中提供了一个dex文件的反编译工具dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adbpush上传的模拟器中,然后通过adbshell登录,找到要查看的dex文件,执行dexdumpxxx.dex。目前在网上能找到的另一个dex文件的反编译工具是Dedexer。Dedexer可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与jasmin的输出相似,但包含的是Dalvik的字节码。4.res目录res目录存放资源文件。5.resources.arsc编译后的二进制资源文件。,APK文件介绍,AAPT即AndroidAssetPackagingTool,在SDK的tools/目录下。该工具可以查看,创建,更新ZIP格式的文档附件(zip,jar,apk)。也可将资源文件编译成二进制文件。通常不需要直接使用AAPT工具,IDE插件和编译脚本能利用它打包apk文件来合成应用程序。详细的用法可以打开命令行终端,到tools文件夹下运行如下命令:Linux或MacOSX:./aaptwindow下如果设置了SDK的path环境变量,可以直接在CMD中输入aapt。如果没有设置,需要加上完整的SDK路径信息。,aapt,具体如下:这个命令就是查看apk内容,aapt,1.列出apk包的内容aaptlist-v-afile.zip,jar,apk-v以table形式列出来-a详细列出内容例如:aaptl,这个命令就是查看apk内容,2.查看apk一些信息aaptdump-valuesWHATfile.apkassetasset.badgingPrintthelabelandiconfortheappdeclaredinAPKpermissionsPrintthepermissionsfromtheAPK.resourcesPrinttheresourcetablefromtheAPK.configurationsPrinttheconfigurationsintheAPK.xmltreePrintthecompiledxmlsinthegivenassets.xmlstringsPrintthestringsofthegivencompiledxmlassets.例如:aaptdpermissions,这个就是显示这个apk所具有的权限3.编译android资源aaptpackage-d-f-m-u-v-x-z-MAndroidManifest.xml/-0extension-0extension.-gtolerance-jjarfile/-debug-mode-min-sdk-versionVAL-target-sdk-versionVAL/-app-versionVAL-app-version-nameTEXT-custom-packageVAL/,aapt,-rename-manifest-packagePACKAGE/-rename-instrumentation-target-packagePACKAGE/-utf16-auto-add-overlay/-max-res-versionVAL/-Ibase-package-Ibase-package./-Aasset-source-dir-Gclass-list-file-Ppublic-definitions-file/-Sresource-sources-Sresource-sources.-Fapk-file-JR-file-dir/-productproduct1,product2,./raw-files-dirraw-files-dir.这个比较复杂,只解释几个关键参数。-f如果编译出来的文件已经存在,强制覆盖。-m使生成的包的目录放在-J参数指定的目录。-J指定生成的R.java的输出目录-Sres文件夹路径-Aassert文件夹的路径-MAndroidManifest.xml的路径,aapt,-I某个版本平台的android.jar的路径-F具体指定apk文件的输出例如:一.将工程的资源编译R.java文件aaptpackage-m-J-S-I-M二.将工程的资源编译到一个包里aaptpackage-f-S-I-A-M-F4.打包好的apk中移除文件aaptremove-vfile.zip,jar,apkfile1file2.例如:aaptrAndroidManifest.xml,这个就是将apk中的AndroidManifest移除掉,aapt,5.添加文件到打包好的apk中aaptadd-vfile.zip,jar,apkfile1file2.例如:aapta,这个就是将文件添加到打包好的apk文件中6.显示aapt的版本aaptversion例如:aaptv,就是打印这个结果AndroidAssetPackagingTool,v0.2,aapt,开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。由于开发商可能通过使用相同的PackageName来混淆替换已经安装的程序,签名可以保证相同名字,但是签名不同的包不被替换。APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。,为什么要签名,(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序,包括模拟器上运行的。(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证(3)如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。(4)Android使用标准的java工具KeytoolandJarsigner来生成数字证书,并给应用程序包签名。(5)使用特殊的key签名可以获取到一些不同的权限。,签名的注意事项,(1)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。(2)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有该数字证书的程序将不能正常升级。(3)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。(4)AndroidMarket强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。,Android数字证书的有效期,模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。如下图所示,Eclipse菜单的Window-Preferences-AndroidBuild下显示的是我们默认的调试用的签名数字证书。,使用Eclipse工具签名,正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。签名后需使用zipalign优化程序。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。使用Eclipse工具签名,此方法适用于Android1.5及以上版本。,使用Eclipse工具签名,步骤一:打开Eclipse-选择你要签名的项目-右击-androidtools-ExportsignedApplicationpackage,使用Eclipse工具签名,步骤二:在出现的窗口确认是不是这个项目要签名,然后选择下一步:,使用Eclipse工具签名,步骤三:在ExportAndroidApplication这一步,如果我们之前已有有了keystore,选择我们之前已有的,否则我们新建一个。如下,选择需要保存这个证书文件的目录,以及这个证书文件的一个密码。,使用Eclipse工具签名,步骤四:点击下一步后,我们需要填写keystore的基本信息,如,别名,密码,有效期,姓名,组织,组织名称,所在城市,所在省份,国家等,点击Next,使用Eclipse工具签名,步骤五:选择被签名后的APK保存位置。点击finish。注意是选择最终将产生的文件。,使用Eclipse工具签名,之后我们在刚才选择的目录下就可以看到生成的签名后的APK文件。,Java中的keytool.exe可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。每一个证书库是一个文件组成,它有访问密码,在首次创建时,它会自动生成证书库,并要求指定访问证书库的密码。在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它们的意思是:CN(CommonName名字与姓氏)OU(OrganizationUnit组织单位名称)O(Organization组织名称)L(Locality城市或区域名称)ST(State州或省份名称)C(Country国家名称)可以采用交互式让工具提示输入以上信息,也可以采用参数-dnameCN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx来自动创建。,keytool,例如这条命令:keytool-genkey-aliastestCA-keyalgRSA-keysize1024-keystoretestCALib-validity3650在数字证书库testCALib中创建了一个别名为testCA,使用RSA算法加密的,有效期为3650天的数字证书。证书生成以后,我们可以使用命名将数字证书导出为一个文件。keytool-export-aliastestCA-filetestCA.cer-keystoretestALib-rfc有关keytool的其他用法可以查询keytool的帮助文档。,keytool,数字证书生成以后,我们需要使用生成的数字证书给程序包签名,这个是使用jarsigner工具。例如,如果我们有一个android的程序包calendar.apk.,我们就可以使用刚生成的testCA给该程序包签名。jarsigner-keystoretestCALibcalendar.apktestCA.jarsigner用法:选项jar文件别名jarsigner-verify选项jar文件-keystore密钥库位置-storepass用于密钥库完整性的口令-storetype密钥库类型-keypass专用密钥的口令(如果不同)-sigfile.SF/.DSA文件的名称-signedjar已签名的JAR文件的名称-digestalg摘要算法的名称-sigalg签名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论