Android应用程序的编译和打包

265 阅读3分钟

Android系统的apk应用程序的编译方式

  • 借助系统编译
  • 借助IDE工具
  • 命令行编译

第三方工具Ant(Another Neat Tool)

编译器  如:CCG Android工程有成千上万个文件,ccg已经无法满足了,所以image系统出现了,这就是make出现的意义 Google使用了Ant 采用java语言开发,并且以xml(build.xml)来描述过程和依赖关系 通过命令行编译和打包APK

Ant的两种编译方式

  • Debug 使用命令编译后在bin生成一个apk已经用debug key签名也经过了zipalign优化
  • Release 生成apk后使用jarsigner或其他工具签名,然后利用zip优化

Apk编译过程

apk包含内容

  • AndroidManifest 清单文件
  • classes.dex 应用程序核心,由项目源码生成了.class文件,经过进一步转化变成Android系统可识别的Dalvik byte code,三包也会包含
  • resources.arsc 编译后的资源文件
  • res 未编译的资源文件
  • META-INF 签名和检验信息

步骤

  • 首先.aidl通过aidl工具转换成编译器能处理的java接口文件
  • 同时资源文件将被aapt处理为最终的resources,并生成r.java
  • java的编译器将r.java,java源码文件,以及上述生成的接口文件编译成.class文件,因为.class不是Android能识别的格式,所以还要利用dex工具转化为dalvik字节码
  • 接下来上面生成的dex,资源包以及其他通过apkbuilder生成初始的apk文件
  • 签名使用其他工具如果在debug下签名用的keystore是系统自带的默认值,优化原理是对apk包中的数据进行边界对齐,从而加快读取和处理过程

信息安全基础概述

信息安全与密码学
目标

  • Authentication 双方连接是必须要做相应的身份认证
  • Confidentiality 加密信息内容
  • Data Integrity 保证数据的完整性
  • Non-repudiation 保证信息真实性

信息安全学基础

加密
解密
哈希散列
对称算法
DES,AES 通过公共值和私密值和公式验证互相的key值得正确性
公钥算法/不对称算法
加密解密使用的密钥不是同一个,公钥和私钥
哈希算法
有效防止通过推测来获知铭文信息

应用程序签名

签名和未签名的唯一区别就是错的META-INF文件编夹
他是专门用来保存应用程序签名和检验等安全信息的目录,通常情况下包括MANIFEST.MF,CERT.SF,CERT.RSA

应用程序安装流程

首先Package Manager会对其进行初始化处理,其中就包含对签名和文件哈希值的检查。
1.PackageParser
负责解析应用程序包,并完成安全检验
2.JarFile
继承自ZipFile,每一个apk只能对应一个jarfile,真正的匹配工作由jarVerifier
3.JarVerifier
检验各种数据的存储仓库,同事包含了VerifierEntry嵌套类,后者会对每一个文件做具体的检查和匹配工作
4.VerifierEntry
在生成的时候会初始化,然后jarfileInputStream会进一步完善数据
5.jarfileInputStream
继承自inputstream

检验过程

MANIFEST.MF
验证了该文件的可靠性,就可以读取其中的信息来为apk包中所有的文件一一检验
CERT.SF
签名加密
CERT.RSA
开发者提供的证书,包含了开发者的公钥和一系列身份信息