Apk编译过程1 - Android Studio 与 gradle

Apk编译过程1 - Android Studio 与 gradle


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 中也能阅读代码,缺点是无法编译且体验较差。

在这里插入图片描述

系统应用的编译

AOSP中的应用原来使用make编译,对应编译脚本为 Android.mk。由于ninja在利用CPU效率方面更好,正在逐步转移到ninja,对应编译配置文件为 Android.bp。Android系统使用Blueprint和Soong工具来解析Android.bp转换生成ninja文件。为了兼容老的mk配置文件,Android当初也开发了Kati 工具来转换mk文件生成ninja。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值