======================================================

原文链接https://juejin.im/entry/58b78d1b61ff4b006cd47e5b,如侵删

======================================================

我们平时在开发的过程中,每天都会run很多次项目,Android Studio就会将apk自动安装到手机上了,那么这中间都经历过哪些流程呢,今天就来梳理记录一下

首先来看一张官网(最新)给的构建流程图

编译器将您的源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容转换成已编译资源。

APK 打包器将 DEX 文件和已编译资源合并成单个 APK。不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上。

APK 打包器使用调试或发布密钥库签署您的 APK:

如果您构建的是调试版本的应用(即专用于测试和分析的应用),打包器会使用调试密钥库签署您的应用。Android Studio 自动使用调试密钥库配置新项目。

如果您构建的是打算向外发布的发布版本应用,打包器会使用发布密钥库签署您的应用。要创建发布密钥库,请阅读在 Android Studio 中签署您的应用

在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用。

再来看一张稍微详细一点(来自老版官网)

从上面的流程图,我们可以看出apk打包流程可以分为以下七步

通过aapt打包res资源文件,生成R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)

处理.aidl文件,生成对应的Java接口文件

通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件

通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex

通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk

通过Jarsigner工具,对上面的apk进行debug或release签名

通过zipalign工具,将签名后的apk进行对齐处理。

最后看张更详细的

apk打包好了会输出在项目的/app/build/outputs/apk目录下,在Android Studio中我们可以双击apk文件查看当前apk的目录结构,包括各个文件的大小,dex中包含了哪些方法及方法数等,非常方便

参考

Android逆向分析(2) APK的打包与安装

Android打包系列——打包流程梳理

developer.android.com/studio/buil…

android打包发布流程,从源文件到APK-Android打包流程相关推荐

  1. 如何将Flutter开发的Android app 发布Google Play(谷歌应用商店)流程

    将Flutter Android app 发布Google Play(谷歌应用商店)流程 一.首先就是要做到科学! 二.打开google play官网,注册谷歌账号 三.打开谷歌开发者站点https: ...

  2. 【Python】Python项目打包发布(一)(基于Pyinstaller打包多目录项目)

    Python项目打包发布汇总 [Python]Python项目打包发布(一)(基于Pyinstaller打包多目录项目) [Python]Python项目打包发布(二)(基于Pyinstaller打包 ...

  3. android+命令行编译,打包生成apk文件,Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包...

    默认为debug mode,使用的签名文件在: $HOME/.android/debug.keystore 比如 C:\Users\chengcj1.android\debug.keystore 1. ...

  4. android换台电脑打包签名,Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包 -电脑资料...

    1. 默认为debug mode,使用的签名文件在: $HOME/.android/debug.keystore 2. Release Mode 签名: build.gradle:android {s ...

  5. cocos creator入门教程(十七)—— creator_h5打包发布优化技巧_android环境搭建与打包发布

    android环境搭建 h5/android 打包发布 h5打包发布 1:引擎模块裁剪,减少引擎体积; 项目----项目设置----模块设置:对于游戏中没有使用到的组件,都不需要勾选.来减少引擎文件的 ...

  6. qt release打包发布_几种解决Qt程序打包后无法连接数据库问题的方法

    Qt是一个跨平台C++图形用户界面应用程序开发框架,使用它不仅可以方便地开发GUI程序,也可以开发非GUI程序,可以一次编写,处处编译. 今天遇到的问题比较怪异,我开发的是一个桌面版订单管理系统,整体 ...

  7. 中兴 手机 android,中兴发布Tempo Go手机:运行Android Go系统

    原标题:中兴发布Tempo Go手机:运行Android Go系统 在I/O 2017全球开发者大会上,谷歌发布了Android Go,基于Android 8.0进行精简处理,专为入门手机设计的And ...

  8. Android Studio使用签名打包发布APP(安卓生成apk文件)

    一.创建签名密钥库文件 1.在 Build 菜单中选择 Generate Signed Bundle / APK... 2.选择 APK,点击 Next ,进入下一步 3.点击 Create new. ...

  9. html5打包在ios上发布,第二篇 HTML5打包发布IOS APP之苹果开发者账号申请流程

    查看npm全局安装的模块 1.查看所有高级的npm moudles npm list --depth= 2.查看所有全局安装的模块 npm list --depth= -global [xsy1629 ...

  10. android studio真机测试不生成apk,Android应用开发Android Studio编译出来的APK无法安装如何解决?...

    本文将带你了解Android应用开发Android Studio编译出来的APK无法安装如何解决?,希望本文对大家学Android有所帮助. Android Studio编译出来的APK无法安装如何解 ...

最新文章

  1. debug:g2o cmake时报错“Qt5 not found. Install it and set Qt5_DIR accordingly
  2. Photoshop剪切板故障修复
  3. uiuc工程学院计算机,UIUC计算机工程专业排名2020年
  4. 442. Find All Duplicates in an Array
  5. 【HeadFirst 设计模式学习笔记】6 命令模式
  6. socket使用多进程实现并发的服务器
  7. 全球首例!机器人生娃
  8. linux开启多少到多少端口命令,Linux端口命令
  9. java setter与getter方法
  10. 英特尔新任CEO的“开挂”人生
  11. 一些常见的项目行为状态[转]
  12. 《汉魏风云》2、孙吴兵法第一传人——辛苦的天才曹操
  13. Monkey压力测试
  14. IntelliJ IDEA 之汉化包安装
  15. 百胜中国拟2025年前开1000家Lavazza咖啡店​;别样肉客开始陆续进驻中国山姆会员商店 | 知消...
  16. 微信小程序 action-sheet组件 + 分享代码实现
  17. 大数据背景下互联网用户行为分析
  18. (C语言实现)栈求表达式的值(实数范围内)
  19. 王者荣耀上官婉儿的语录
  20. Manacher思想 SCOI2013 密码

热门文章

  1. 子串、真子串、非空子串、非空真子串的求解方法(数据结构)
  2. 【SSL】2022.5.2 1125.集合
  3. C语言停车场管理系统
  4. 如何将EXCEL表格的内容导入到CDR中?
  5. python 计算月还款额度
  6. Centos破解密码
  7. java把小写变大写_用java实现人民币小写变大写的方法
  8. ecshop index.php,ecshop  源码分析01 (index.php)
  9. Android Studio Git教程
  10. 牛客练习赛46-华华跟奕奕玩游戏(期望+逆元)