安卓APK打包流程浅析

news2024/9/22 21:27:48

在面试中,大公司会问你......

  1. APK打包流程全过程?

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

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

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

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

现在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

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

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

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

点开发现有好几个版本。

随便点击一个33版本的。

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

AS的Gradle就是调度我们这些工具的,以前是用Elccps来调度这些工具的。

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

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

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

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


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

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


类加载机制
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文件。


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操作。


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


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

打包是由SDK提供,AS打包就是调用这些工具全自动化完成。所以你也可以自己打包,但是会出现安全问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Phind-面向程序员的AI聊天对话机器人

ChatGPT在国内没开放,很多人注册不了。导致了很多人走illegal渠道获取账号密码。这样是不对的。 今天介绍一款面向程序员的ai聊天机器人Phind,ta目前可以不用注册直接使用、免费、也不用梯子。 (且用且珍惜,不知道之后会不会跟Cop…

Makefile的使用

Makefile的使用 自动化编译脚本,这个东西就是,进行简单的设置,然后实现原码编成为相应程序,简单化自己进行相关操作的过程。不需要一个个自己进行全部进行输入。而且还有许多的简化书写方法。 ​ 这个Makefile的本质为一种脚本语言…

SYSU程设c++(第二周) string、函数重载、constexpr、auto

创建string对象: string s1; // s1 未使用初始化参数,即默认初始化为空字符串 string s2 "c" ; //不是赋值运算,它等价于 string s2("c") ,是初始化 string s3 (5, s); // s4 初始化为 5 个 s; string…

可视化图表之奥妙——百分比堆叠柱状图

百分比堆叠柱状图是属于堆叠柱状图的一种,是指将每个柱子进行分割以显示相同类型下各个数据的占比大小情况。百分比堆叠柱形图上柱子的各个层代表的是该类别数据占该分组总体数据的百分比,但不适用于对比不同分组内同个分类的数据大小或者对比各分组总数…

企业邮箱对企业有哪些好处以及便捷性

企业邮箱拥有更专业的办公功能,更适合职场使用。同时,使用企业邮箱还可以帮助企业“公私分明”。一方面保护了公司信息,另一方面也提高了工作效率。加上公司统一邮箱也有助于提升公司形象。使用企业邮箱除了收发邮件方便外,还可以…

MyBatis——配置文件完成增删改查

1.首先先创建一个新的表,使用下面的sql语句 -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20…

openpnp - configure - 丢弃(Discard)位置的设置

文章目录openpnp - configure - 丢弃(Discard)位置的设置概述笔记设置丢弃位置吸取元件失败后, 吸嘴一直吸气的处理ENDopenpnp - configure - 丢弃(Discard)位置的设置 概述 测试时, 吸取了一个元件, 吸取成功了, 现在想将这个料丢掉. 点击控制面板-Special页中的Discard不好…

WSN_1 介绍;部分应用介绍

学习自书籍:Fundamentals of Wireless Sensor Networks. WSN 介绍 传感器 从基础角度说,传感器观测采集现实世界的一些数据。 另一个名称是 transducer 换能器,指传感器将一些形式的信号转换为其他形式的信号,如光敏传感器 光…

华为OD机试用Python实现 -【集五福】 |老题且简单

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲集五福题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典

进程和线程理论知识

1.进程和线程之间的联系。 进程是程序依次执行的过程,线程是比进程小的执行单位。 一个进程在其执行过程中可以创建多个线程。 多个线程共享进程的堆和方法区内存资源。 进程是OS进行资源分配的基本单位。 线程是OS进行调度的基本单位。 进程和线程是1&#xff1…

GPU编程实战1

给一张测试图,对测试图分别cpu和GPU进行处理,进行时间统计,最后做展示。 环境:win10 cuda11.3 python3.7 numba 等 硬件:cpu:i59400 ,gpu:RTX1650 4G 首先进行cuda安装,cuDNN等的安装,参考该…

和年薪30W的阿里测开工程师聊过后,才知道我的工作就是打杂的...

前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 阿里内部将员工一共分为了14个等级,P6是资深工程师,P7是技术专家。 其中P6和P7就是一个分水岭了,P6是最接近P7的不持股员工&#x…

720°VR全景家装设计,为传统行业注入新生命力

导语:VR全景家装是一种基于虚拟现实技术的新型家居装修方案,可以通过虚拟现实技术让用户更真实地体验家居装修效果,避免了传统装修中的繁琐流程和不可预知的风险。近几年来,VR全景装修盛行,打破传统二维空间模式&#…

【ArcGIS学习记录01】--利用CRU TS数据集绘制降雨量分布图

【ArcGIS学习记录01】–利用CRU TS数据集绘制降雨量分布图 注:仅作为本人的学习记录方便以后复习查阅。 一、介绍 CRU TS 是目前使用最广泛的气候数据集之一,由英国国家大气科学中心 (NCAS) 制作。简而言之我们能在CRU TS官网上获得几乎各个研究领域能…

[Java基础]—JDBC

前言 其实学Mybatis前就该学了,但是寻思目前主流框架都是用mybatis和mybatis-plus就没再去看,结果在代码审计中遇到了很多cms是使用jdbc的因此还是再学一下吧。 第一个JDBC程序 sql文件 INSERT INTO users(id, NAME, PASSWORD, email, birthday) VAL…

LeetCode 2 - 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开…

常用基础硬件知识 - 判断MOS管导通

目录1. 概述2. 判断MOS管的导通1. 概述 本文主要记录下基础的硬件知识,方便自己查阅。 2. 判断MOS管的导通 在产品硬件设计中,有时需要程序控制一些电源使能。 1.原理图已经标出了G极(gate)—栅极、S极(source)—源极、D极(drain)—漏极。 如果没有标…

「基础篇」机器学习概览

文章目录1. 什么是机器学习2. 引入机器学习3. 应用场景4. 机器学习分类4.1. 有无人类监督4.2. 是否增量学习4.3. 泛化方式5. 主要挑战6. 测试与验证1. 什么是机器学习 机器学习(Machine Learning,ML)是一个研究领域,让计算机无需…

Mac item2 配置免密登录开发机

1、配置 vi ~/.ssh/config 内容如下: Host * ControlMaster auto ControlPath ~/.ssh/master-%r%h:%p ControlPersist yes ServerAliveInterval 60 学习: ControlMaster #连接共享 ControlPath #与ControlMaster一起使用,指定连接共享的路径…

log4j控制台不打印日志的故障解决方案

前言 接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。 在网上搜索了一圈,总结了一下个人解决这个问题的流程。 流程 1. 判断用了什么配置文件 不知道是出…