【Android篇】APK打包流程浅析

简介: 这里只讲解APK打包流程全过程。现在2023年了,一般都是用Android studio来设计android,而最直接的安卓APK打包方式则是使用Android Studio集成直接生成apk,所以本文就介绍以AS集成生成APK的方式来讲解。

在面试中,大公司会问你.....(吃饭了吗?)咳咳~

1.APK打包流程全过程?


2.APK签名在实际业务中能处理什么?


3.APK加固原理是如何实现的,怎么保证安全?


4.APK签名V1,V2,V3的区别于原理,有什么漏洞?


这里只讲解APK打包流程全过程。


现在2023年了,一般都是用Android studio来设计android,而最直接的安卓APK打包方式则是使用Android Studio集成直接生成apk,所以本文就介绍以AS集成生成APK的方式来讲解。



首先先介绍以下编译的不同,在AS里面有很多的这种编译的选项,但是这些选项有什么区别呢?


Sync Project with gradle files:对gradle文件之后,或刷新gradle配置时使用。

Make project:只是对项目中新产生或修改过的文件进行一次编译,已经编译过了的就不会编译了,耗时相对较短。

Clean Project :删除build目录下的所有文件,并对项目的大部分文件进行重新编译,时间相对于Rebuild Project短点。

Rebuild Project :包含了Clean的操作,并对整个项目进行了重新编译(包括NDK和资源文件),因此耗时相对较长。

Invalidate Cache/Restart AndroidStudio:自动生成的项目缓存异常时,点击可清理项目缓存并重启AndroidStudio,重启后即可正常生成项目文件。

Build APK:前面4个选项都是编译,没有生成apk文件,如果想生成apk,需要点击Build APK。

Generate Signed APK:生成有签名的apk。

————————————————

版权声明:本文为CSDN博主「carter_yu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接: https://blog.csdn.net/carter_yu/article/details/105641951


我们常规的打包就是点击下方这个图,点击它。

4.png


此时此刻在我们Project面板的app\bulid\outputs\apk\debug中会生成一个对应的apk的包,这个过程APK打包的这个能力不是AS软件提供的,而是AS的SDK提供的(就是当初你安装AS的时候安装的SDK)。


而SDK里面有一个build-tools文件夹。


7844de45a15fc92e0c6e5e79eb026c38.png


点开发现有好几个版本。


57d3108e98d37be548bcac56c1add2c1.png


随便点击一个33版本的。


ebf57ee7336d70d221c420140ea3641c.png


build-tools里面有很多我们打包会用到的工具,里面的工具可以完成具体的功能,例如aapt,aidl等等。


AS的Gradle就是调度我们这些工具的,以前是用Eclipse来调度这些工具的。现在都用AS啦,要学会跟着新时代的脚步,不过以前的技术还是要了解一下。


0121c677d37b2a7af67c3cbd4352e2e6.png


我们从上往下看,写代码期间会自动调用aapt和aidl工具。


aapt:每当我们写一个XML文件,aapt.exe就会被AS自动调度,生成一个R.java文件。而被打包后会生成一个.arsc文件,也就是我们的res目录被打包了,但是assets和lib文件夹下的这些资源aapt就不会进行处理,默认过滤。


aidl:进程间的通信。aidl.exe就会被AS自动调度,生成一个java Interface文件。


Application Source code:而最上方中间的是我们写的源文件代码。


2.png



java compiler:Gradle通过调用javac命令,把三个.java文件全部转化为.class文件。

此时此刻在我们Project面板的app\bulid\intermediates\javac\debug\classes\com底下会生成一系列的.class文件。


98fcc24bb84cf7f0408953aedf76f125.png



类加载机制

JVM加载类文件的话,单个文件加载会触发N次IO流

几百个类会触发更多次IO流。

所以安卓对类加载进行了一定的优化,将.class转为.dex文件,体积更小,本质上还是字节码。


而.class文件属于jar包。

而我们安卓虚拟机又不同于jvm,还有一些安卓私有的东西,所以要转化为.dex文件。

Gradle调用到dx.bat工具,把.class文件转化为.dex文件。

第三方jar包也是编译后的.class文件,也要被转化为.dex文件。

此时此刻在我们Project面板的app\bulid\intermediates\dex\debug下会生成.dex文件。

57945fe6e6e19372e4e4feaaf71cc041.png


3.png




Other Resources:比如assets,lib和res一些图片和XML文件等等,这些资源就不会经过相关工具处理,直接放入apk包中。

Compiled Resources:生成一个resoueces.arsc文件。

apk builder:调用libbcc.dll动态链接库,打包成APK。

比如:把.dex文件


             res文件


             清单文件


             META-INF源信息文件

             resources.arsc文件


新建文件夹,按顺序往里面放,然后右键压缩,后缀名zip改成apk。


本质上就是这样,用zip压缩方案进行io操作。


9ee3b818945fcffb81d700ab0a0b80b1.png



签名:Gradle调用apksigner.bat工具,就从没签名的apk变成有签名的apk,apk里面就会多出一个META-INF源信息文件,没签名就没有。


09c73bbad6a3b4cb7ef915eb91618e8e.png



优化4K对齐:Gradle调用zipalign.exe工具(磁盘操作)关于操作系统,对内存再次进行优化,具体这个我也不太会。

b70b0f4f4124241edda7c38d656120a9.png


打包是由SDK提供,AS打包就是调用这些工具全自动化完成。所以你也可以自己打包,但是会出现安全问题,所以还是老老实实用AS打包吧(大佬可以忽略这句话)

目录
相关文章
|
10月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
976 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1774 83
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
1091 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
652 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1033 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
1682 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
764 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
556 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10660 2

热门文章

最新文章

  • 1
    为什么微信发送的APP安装不了,.apk转化为.apk.1
    1928
  • 2
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    1091
  • 3
    Android历史版本与APK文件结构
    1774
  • 4
    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
    372
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    652
  • 6
    【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
    1682
  • 7
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    675
  • 8
    apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
    608
  • 9
    使用Kivy创建“Hello World”应用并打包成APK
    2727
  • 10
    使用keytool查看Android APK签名
    2882