Android应用程序(APK)的编译打包过程

前言

android系统上所识别的安装包后缀名为.apk

1.通过aapt工具打包资源文件和清单文件到R.java中。
2.通过aidl工具将aidl文件转为java文件
3.上面所产生的java文件通过java编译器编译成class文件
4.dx工具将class文件和jar文件转化为classes.dex文件
5.通过apkbuilder工具将classes.dex转化为apk

在AndroidSDK的build-tools目录中我们能发现一些打包工具
这里写图片描述

java文件转化为class文件是通过JDK中的javac命令实现的,
classes.dex转化为apk是通过

接下来我们去解压一个apk安装包,看看里面都有什么内容?
这里写图片描述

各个目录介绍:
assets:资源目录,不同于res,这里面的资源会原封不动的打包到apk中
META-INF:存放签名信息,既然有签名信息,那必然有签名文件,默认的签名文件在下面的目录中这里写图片描述

debug.keystore就是签名文件,密码是android,我们可以在命令窗口输入下面的命令来查看详细信息:首先需要进入签名文件所在目录,
这里写图片描述

我们打开META-INF目录:看到下面三个文件
这里写图片描述

下面介绍如何通过CERT.RSA文件查看签名信息,首先我们需要进入META-INF目录,然后输入下面的指令:

keytool -printcert -file META-INF/CERT.RSA

这里写图片描述
res:资源目录
AndroidManifest.xml:清单文件
classes.dex:dalvik的执行的字节码文件
resources.arcs:编译后的二进制资源文件

安装

大概了解了apk的打包过程之后,我们来看看应用的安装过程
1.拷贝apk包到data/app/目录下,比如我们我们应用程序的包名为

com.example.administrator.projectone

第一次安装后data/app/目录如下,命名规则是包名-N.apk
这里写图片描述

接下来我们不卸载程序再次安装一次,查看data/app目录
这里写图片描述

此时后缀变成了-2,那么我们继续安装,发现后缀不会再变化了。
2.接下来就是在data/data/目录下创建一个文件夹,名称为包名,存放的是应用程序的数据,
这里写图片描述

3.将应用程序信息写入到注册表文件,注册表文件在data/system下的
packages.list和packages.xml文件中,我们去看看这两个文件中的内容,去找一下我们应用程序的信息

packages.list记录的是已安装应用的包名列表信息
这里写图片描述
packages.xml里面存放的是详细信息

  <package name="com.example.lixiaoniu.projecttwo" codePath="/data/app/com.example.lixiaoniu.projecttwo-2" nativeLibraryPath="/data/app/com.example.lixiaoniu.projecttwo-2/lib" flags="4767302" ft="15993090ce8" it="15992e752c0" ut="15993091721" version="1" userId="10058">
        <sigs count="1">
            <cert index="4" key="308201dd30820146020101300d06092a864886f70d010105050030373116301406035504030c0d416e64726f69642044656275673110300e060355040a0c07416e64726f6964310b3009060355040613025553301e170d3137303130363130333534345a170d3436313233303130333534345a30373116301406035504030c0d416e64726f69642044656275673110300e060355040a0c07416e64726f6964310b300906035504061302555330819f300d06092a864886f70d010101050003818d003081890281810085244eba49426b1f1f9c7bbe1450102d90e8e1f39598bc104acdd3bf7fdd0d0f5d79c0f6eee3701f730a40743d2e17babf2eb81a4b9c31f9a11de61e0001496343241d4b338e1f9808b528a43e0aeea5956ccfd6e68bac53279048ea09800afc63d6b5e850c4710168b2d01816267ef23e3d73d6b0515a53d4fc39fdf22072cb0203010001300d06092a864886f70d0101050500038181007a70f4745b5d271648db53ac91eda9d18b8cff7a633c06bbbfed64807c7d66f27c6cf06f08e9430078362c8758429090efd3580ad8a812845ca181d04949e91633ea067d9b0efb1cd45b4001222eae19dd09a00e562ff15c879b656d842742041dc6c0ddd98b47437e0abbbaa87519fe7a7fc5b1580b9f558fb495516a3b996e" />
        </sigs>
        <perms>
            <item name="android.permission.SYSTEM_ALERT_WINDOW" />
        </perms>
        <proper-signing-keyset identifier="22" />
        <signing-keyset identifier="22" />
    </package>

当把信息写入到注册表以后,整个应用程序就安装完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值