前言

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>

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

Android应用程序(APK)的编译打包过程相关推荐

  1. Apk的编译打包过程

    今天跟着大佬的Blog来学习一下 Apk打包编译的流程.传送门 流程图 上图中的绿色部分就是APK编译打包的工具.从图中可以知道使用的工具有: APPT.AIDL.Java Compiler(java ...

  2. Apk的编译打包过程,高级android面试题

    -I search path for import statements. -d generate dependency file. -p file created by --preprocess t ...

  3. android apk编译打包过程

    Android安装包的后缀都是.apk, apk是Android Package的缩写. 解压apk文件后包含AndroidManifest.xml.assets目录.classes.dex(还可能有 ...

  4. Android应用程序资源的编译和打包过程分析

    我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件.这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里面的. ...

  5. android apk反编译打包签名

     APK反编译打包签名 一.JDK安装和环境配置 1. jdk1.6下载地址:http://download.java.net/jdk6/   jdk-6u17-windows-i586.exe 2. ...

  6. mono桌面应用移到android,从原生APK反编译,拿到界面,用于mono for android

    从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...

  7. Storm编译打包过程中遇到的一些问题及解决方法

    Storm编译打包过程中遇到的一些问题及解决方法 参考文章: (1)Storm编译打包过程中遇到的一些问题及解决方法 (2)https://www.cnblogs.com/panfeng412/p/s ...

  8. gradle编译打包过程 之 ProcessAndroidResources的源码分析

    首先,如何查看gradle源码,我们在项目里依赖com.android.tools.build:gradle即可,如下: compile gradleApi() compile 'com.androi ...

  9. Android学习必经之路--apk反编译

    Android开发学习总结(六)-- APK反编译 - 孤傲苍狼 - 博客园 孤傲苍狼 只为成功找方法,不为失败找借口! Android开发学习总结(六)-- APK反编译 学习和开发Android应 ...

最新文章

  1. 敏捷开发流程的8个步骤
  2. 《笑傲网湖》第三回 三层交换
  3. swift和python语法区别_Swift 基本语法
  4. CUBLAS_STATUS_ALLOC_FAILED
  5. 解决第一个div浮动,后面div覆盖的问题
  6. Crawler之Scrapy:数据挖掘必备的scrapy框架之最完整爬取网页内容攻略
  7. django-前端上传图片190912
  8. js请求后台接口返回的图片并转为base64
  9. Android用户界面设计:基本按钮
  10. 【渝粤教育】电大中专消费者行为学 (2)作业 题库
  11. 2019工作榜单 | Python程序员吸金榜,AI排第一,这个我服!
  12. adc分辨率和精度的区别_STM32学习笔记—ADC采集数据常见问题
  13. LBP特征提取原理和python库代码
  14. 「 软件安装 」嵌入式开发Keil5安装教程
  15. Ubuntu 禁止集成noueavu驱动并安装NVIDIA显卡驱动
  16. 拼写的能力和重要性英语作文_拼写很重要吗? 我认为是的。
  17. python3.7打包exe后有显示no utf-8_pyinstaller打包py文件时出现错误SyntaxError: Non-UTF-8 code starting with '\xb3'...
  18. 大数据三驾马车,第一个上市的Hortonworks要翻车了?
  19. 盐于律己,甜以待人(*╹▽╹*)
  20. matlab生成特定矩阵

热门文章

  1. 【数据结构】一元多项式
  2. wordpress 文章php,Wordpress制作文章页面single.php
  3. @Transactional使用
  4. UVALive - 4394 (区间dp)
  5. MacBook不接电源实现外接显示器功能
  6. 专访王威廉:NLP哪些研究方向更容易取得突破?
  7. 物联网平台组成部分CMP、DMP、AEP、BAP
  8. linux .so文件详解
  9. 百度AI接入api使用流程
  10. 网络对抗 Exp5 MSF基础应用 20154311 王卓然