【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打包吧(大佬可以忽略这句话)

目录
相关文章
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
87 6
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
28 3
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
26 2
|
2月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
39 3
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
18 0
|
3月前
|
Linux Android开发 iOS开发
使用Kivy创建“Hello World”应用并打包成APK
使用Kivy创建“Hello World”应用并打包成APK
|
3月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
52 4
|
4月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
315 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
3月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
54 0