Apk编译过程1 - Android Studio 与 gradle

news2024/11/17 7:44:43

Apk编译过程1 - Android Studio 与 gradle

文章目录

  • Apk编译过程1 - Android Studio 与 gradle
        • gradlew
        • Android studio 的 gradle plugin
        • gradle脚本
        • AGP:Android Gradle Plugin

gradle 是 Android 开发者比较熟悉的构建工具了,因为 Android Studio 默认使用它来编译 Android 应用。在这之前使用 eclipse + ADT 开发 Android 应用的时代,我们使用的是 Ant。Android 系统源码编译也不使用 gradle,google 使用了它自己开发的工具链。Ant,Gradle包括 Maven,它属于一类软件,叫做 Build System,作用是集成各种编程语言的编译器,定义工程结构,进行工程化的依赖和编译工作,避免了大家对于类似工程都要写非常复杂且雷同的编译脚本。

当使用 Android Studio 新建完成一个 Application Project 后,gradle 工具链就被 Android Studio 部署完成了。它包括四个部分。

gradlew

gradlew 全称是 gradle wrapper,顾名思义。它是一个脚本,我们新建的工程根目录下,所以比较容易研究。在工程 sync 过程中,它根据 project_root/gradle/gradle-wrapper.properties 中指定的信息,执行 project_root/gradle/gradle-wapper.jar 去下载指定版本的 gradle,到 user_home/.gradle/dist 目录下。在编译时就使用这个版本的 gradle。如果指定版本的 gradle 已经存在,再执行 gradlew 编译命令,命令就会通过 gradlew 代理过去。gradle 也是 java 或 kotlin 开发的,所以看 gradle-wapper.jar 代码,是去执行 gradle 特定的 launch jar。

Android studio 的 gradle plugin

就是下图中红框中的插件,Android Studio 的 Settings 界面:

在这里插入图片描述

它使得我们在 Android Studio 中以 GUI 方式执行 gradle 命令成为可能。Android Studio 的 Gradle 面板:
在这里插入图片描述

gradle脚本

build.gradle 大家都非常熟悉。不消多讲。在 project root 下的 build.gradle 中有如下一个配置。

L7:classpath "com.android.tools.build:gradle:4.1.3"

这就是 AGP:Android Gradle Plugin,用来具体执行 Android 工程的编译。

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

为什么有了 gradle 还需要AGP?因为 gradle 想做平台化的编译系统,只提供一个框架。对于不同类型的项目,需要在gradle api框架内开发专门的 Gradle Plugin。对于比较大众化的工程类型,比如 Java Application,大家都清楚怎样进行编译和部署,所以 gradle 提供了这样的plugin。但是 gradle 不清楚 apk 的编译细节,还是 Android 系统团队开发比较合适,所以其代码也是 AOSP 的一部分。

AGP:Android Gradle Plugin

综上,如果要研究 apk 的编译过程必须研究 AGP 的代码,其源码是和 AOSP 在一起的,按照如下方式获取源码和进行编译:

http://tools.android.com/build

http://tools.android.com/build/gradleplugin

国内有很多aosp镜像站,很容易获取 AOSP 源码,比如tuna:https://mirrors.tuna.tsinghua.edu.cn/

如果感觉获取 AOSP 代码比较麻烦,可以直接在一个Android Project 中依赖 com.android.tools.build:gradle,这样在 External Libraries 中也能阅读代码,缺点是无法编译且体验较差。

在这里插入图片描述

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

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

相关文章

Java常用类及使用方法

目录 1.String 1.String的基本概念 2.String的不可变性 3.String的实例化方式及内存解析 1.两种方式 2.new构造器的方式的内存解析 3.字符串对象的存储 4.字符串拼接后的内存解析 6.String中的常用方法 7.什么时候indexOf (str)和LastIndexOf (str)返回值相同 8.Str…

用gpt定制一个pytest接口测试框(附源码)

目的: 描述我的需求和目标让gpt给我写一个测试接口框架 并且让他自己完善。 我说:帮我写一个基于python语言的 pytest的接口测试框架 支持post get put delete请求 添加详细的断言,处理身份验证和授权,处理HTTP错误 加上allure2报告和有请求…

代码随想录第51天

1.最佳买卖股票时机含冷冻期 淦,自己写,用3个状态死活写不出来。 动规五部曲,分析如下: 确定dp数组以及下标的含义 dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]。 其实本题很多同学搞的比较懵&…

SecurityAccess(0x27)服务

SecurityAccess(0x27)服务 此服务的目的是提供访问数据和/或诊断服务的手段,这些服务因安全,排放或安全原因而受到限制。 用于将 例程或数据下载/上传到服务器和从服务器读取特定存储器位置的诊断服务是可能需要安全访问的情况。…

使用Inkscape绘制矢量电路图

GNU Inkscape是一个免费的开源矢量图形编辑器,非常适合画论文中的矢量插图。 Inkscape Inkscape支持win mac linux全平台(下载),windows端还发布了uwp版本,可在Windows store安装。 基本操作: inkscape工…

2023年前端面试题汇总-性能优化

1. CDN 1.1. CDN的概念 CDN(Content Delivery Network,内容分发网络)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户&…

简谈软件版本周期 | Alpha、Beta、RC、Stable版本之间的区别

目录 💌 引言 ⭕ 软件版本周期 🛠️ 软件开发期 ⚖️ 软件完成期 💰 商业软件版本 💌 引言 定义好版本号,对于产品的版本发布与持续更新很重要;但是对于版本怎么定义,规则如何确定&#x…

【微服务架构】无法在Sentinel Dashboard查看到服务的监控信息原因

(目前项目中使用的Hystrix,而Hystrix已经不维护了,至今仍然是2018年发布的1.5.8版本。) 开始学习一下新的服务治理框架Sentinel Sentinel官网介绍 在集成Sentinel案例中碰到的问题 微服务,无法在sentinel dashboard…

Oracle中的数据导出(3)

假如我现在不想再打开DOS界面输入命令导出数据,那又有什么简单便捷的方法实现呢? 我将在本篇描述一种自动化的操作方法,简单讲就是:我把需要查询的数据脚本放在桌面的一个mini,通过双击快捷图标直接实现数据结果导出到…

VMware ESXI7.0.3的安装

文章目录 一、VMware ESXI7.0版本的安装与配置1.1、VMware概述。1.2、VMware 解析:1.3、VMware ESXI解析:2.1、准备资料2.2.1、VMware ESXI的ISO下载 3.1、安装ESXI4.1、浏览器键入esxi上述ipv4地址:192.168.229.171 一、VMware ESXI7.0版本的…

VMware ESXi 8.0b Unlocker OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0b Unlocker & OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-sysin/,查看最新版。原创作…

C语言——分段函数求值

一、题目描述 二、题目分析 本题是简单的分段函数的求解&#xff0c;应学会合理的运用for\if\swich函数解答问题。 三、代码实现 //for语句解题#include <stdio.h> int main() {int x,y;scanf("%d",&x);if(x<1){yx;}else if(1<x && x<…

FL Studio软件最新21中文版本安装包下载

FL Studio21集合最新FL基础操作、编曲技巧、混音技巧、乐理基础、声乐演奏等各类内容&#xff0c;编曲软件FL Studio 简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前版本是FL Studio20&#xff0c;它让你的计算机就…

章节1:远程代码执行渗透与防御

章节1&#xff1a;远程代码执行渗透与防御 01 什么是远程代码执行&#xff1f; 远程代码执行&#xff08;RCE漏洞&#xff09; 远程代码执行&#xff1a;Remote Code Execute 远程命令执行&#xff08;命令注入漏洞&#xff09;&#xff1a;Remote Command Execute 定义&a…

高速PCB Layout设计要用哪些工具?

随着时代高速发展&#xff0c;高速PCB项目逐渐成为主流项目之一&#xff0c;越来越多的电子工程师需要掌握高速PCB Layout设计能力&#xff0c;同时电子工程师在进行高速PCB Layout时需要用到多种工具&#xff0c;下面来看看有哪些工具和软件&#xff1f; 1、设计软件 ①Altiu…

Redis的常用数据结构之列表类型

列表类型的数据特点 用于存储多个有序的字符串单个列表最多可以存储2的32次方-1个元素&#xff08;4294967295&#xff09;。列表的元素是可以重复的可以分别对列表的两端做插入&#xff08;push&#xff09;和弹出&#xff08;pop&#xff09;操作 List相关的操作命令 向右…

Vue3(二):Vue3生命周期、自定义hook、其他API、Suspense等组件

Vue3&#xff1a;第二章 一、Vue3生命周期二、自定义hook函数三、toRef四、其他Composition API1.shallowRef与shallowReactive2.readonly与shallowReadonly3.toRaw 与 markRaw&#xff0c;customRef4.provide和inject5.响应式数据的判断 五、组合式API的优势1.选项式API的问题…

股票买卖篇(II,III,IV)--基础,详细!状态机简单应用

目录 股票买卖II 本题思路 关于异常值的解释 代码 股票买卖III 本题思路 (包括对交易过程的理解&#xff0c;需认真理解) 代码 股票买卖 IV 本题思路 代码 股票买卖II 输入样例 6 7 1 5 3 6 4 输出样例 7 输入样例 5 1 2 3 4 5 输出样例 4 本题思路 该题是最…

1. Mysql InnoDB中的索引

一、InnoDB中的索引 InnoDB存储引擎支持以下几种常见的索引&#xff1a;B树索引、全文索引、哈希索引&#xff0c;其中比较关键的是B树索引。 1. B树索引介绍 InnoDB中的索引自然也是按照B树来组织的&#xff0c;前面我们说过B树的叶子节点是用来放数据的。但是放什么数据呢…

攻防世界-基础android

下载链接&#xff1a;下载 参考链接&#xff1a;攻防世界-Mobile-基础android (Misc经验解法&#xff09;_攻防世界基础android_Q_yt的博客-CSDN博客 方法一&#xff1a; 这是个偏向Misc的解题思路&#xff0c;下载完是个apk文件&#xff0c;载入010 Editor看一下&#xff0…