解读gradle编译项目的build目录结构

本文针对android studio工具下的ndk开发。

build目录就是项目模块构建过程和结果使用到的位置。

项目根目录下有一个build目录。

项目根目录下各模块子目录下各自有一个build目录。

build目录下一般由4个子目录组成:

generated               由aapt工具根据资源数据自动生成的java类

intermediates         中间过程

outputs                  输出结果

tmp                       编译日志

根目录下的build目录,这个build服务于整个项目,在本文中称其做项目build,以区分模块build。

项目build一般只有generated和intermediates两个子目录,用于生成这个项目的buildTools。

generated目录会生成一个mockable-android-${buildToolsVersion}.jar。

intermediates目录根据需要生成dex-cache,这个目录下的xml文件配置jar包在编译过程中如何缓冲使用。

模块build目录在make module ${MOD_NAME}后就会生成4个子目录。

我们来看intermediates目录,中间生成和编译过程使用到的目录。

这个目录下有这么几个比较关心的子目录:

binaries                  NDK,生成c++连接库

bundles                  模块链接到的自定义jar包和各abi版本的c++链接库都捆绑在这里

classes                  模块中生成的自定义java类

exploded-aar          由aar包解压出来的资源,jar包和so链接文件等。用于本模块的链接和集成。

jniLibs                   在build.grade中你指定的jniLibs目录整个拷贝。模块链接到的库文件会被捆到bundles目录。

objectFiles              NDK,生成c++中间对象(.o)文件。

transforms              根据你当前选择的productFlavor和其包含的abiFilter,从bundles和binaries取出链接库。

接着就是output目录:

aar                        如果模块是android library

jar                         如果模块是java library

apk                        如果是Activity应用程序

最后就是tmp目录:

compile$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp               ndk编译日志

link$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE)                ndk链接日志

编译的子目录由三要素组合而成,分别是

BUILD_TYPE := debug|release

ProductFlavor := 你在gradle文件中创建的flavor

abiFilter :=

时间: 2024-10-12 22:08:13

解读gradle编译项目的build目录结构的相关文章

Xcode修改项目的Build Location

Xcode默认project通过build输出的目录,存放于目录 /Users/用户名/Library/Developer/Xcode/DerivedData/产品名称-hjwqiconnjhpjleqhsxvhdsxwktv/Build/Products/ 可以在项目最左侧的文件列表里展开Product,查看输出文件,按住control单击可以在Finder中显示,右侧辅助区域也会看到全路径 不过上面的路径,实在太长,看着也非常地蛋疼.特别是编译静态链接库,其它项目需要引用该库时得点半天- 修

Unity中加入Android项目的Build步骤

简介: 有的项目需要在Android中加入Unity功能,例如ANDROID应用中嵌入Unity3D视图(展示3D模型) 有的项目需要在Unity中加入Android功能,例如3D语音天气球(源码分享)——创建可旋转的3D球 由于Android中的功能和代码只能当作一个Unity插件,需要在Unity进行最终的Build后生成apk文件运行. 所以无论上面两种情况都涉及了在Unity中加入Android项目的Build步骤: 步骤: 1.确保Android工程代码正确,然后在Eclipse中bu

Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程

MSBUILD的编译过程实际上是根据一系列的targets文件定义的,当我们在IDE执行生成.批生成.清理命令的时候,VS会查找这些命令对应的Task并执行它,下面我们逐个分析这个过程. 当执行生成操作时,MSBUILD将执行一个叫"Build"的任务,在targets文件中是这样定义的: <Target Name="Build" Condition=" '$(_InvalidConfigurationWarning)' !='true' "

liunx下mysql数据库使用之三范式,关系模型设计注意项,安装目录结构

数据库的三范式第一范式===>每行记录的属性,是原子的,拆到不可拆为止.===>例如:一个人的籍贯,可以拆分为,省,市,县,乡,村 第二范式===>每行记录的非主属性(非主键属性),都完全依赖主属性(主键).===>每行的数据都能唯一区分.===>例如:一个学校的教师,他的姓名,年龄,性别,籍贯.都依赖它的教师编号===>而它教授的科目,并不依赖他的编号,则需要另建表,作为关系模型,进行存储 第三范式===>在实体关系中,如果不存在非关键字段对任一候选关键字段的函

统一修改VS 所有项目的Include目录和Lib目录

像以前的方法 在 工具--选项--项目和解决方案里的修改已经被弃用. 解决方案:     随便打开个项目,视图---其它窗口---属性管理器  属性管理器  属性管理器 (说3遍认识下) 如图,以后每个项目都会自动将boost库目录加上.

转:Web项目的WEB-INF目录使用说明以及重定向与转发

原文地址:https://www.cnblogs.com/shenxiaoquan/p/5819359.html 原文内容: 总结一下这篇文章的内容: WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问.什么是客户端级别?什么是服务器级别呢? 转发就是服务器级别,浏览器的地址不会变,因为,客户端发送一个请求,服务器受理之后,发现要请求内容还要再去别的请求,那么转发就是服务器自己去处理完成.不麻烦客户端(浏览器)了,所以客户端上面的地址栏不会改变. 重定向:就是客户端级别的.服

使用Maven构建Web项目的目录结构

1.Web项目的目录结构     基于Java的Web项目,标准的打包方式是WAR.与JAR比较,包含更多的内容,比如JSP文件.Servlet.Java类.web.xml配置文件.依赖JAR包.静态web资源(HTML.CSS.JavaScript)等. 一个典型的WAR文件如下目录结构: File-system代码 -war/      + META-INF/      + WEB-INF/      |  + classes/      |  |  + ServletA.class    

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构

一个技术汪的开源梦 —— 目录 这篇文章是开源公共组件的开篇那就先说说项目的 Github 目录结构和 .Net Core 的项目结构. 1. GitHub 目录结构和相关文件 - src 源码项目目录. - test 单元测试项目目录. - tools 工具目录. - .gitignore 你想要忽略的文件或者目录(一些文件诸如 *.dll.testResults 等 不需要提交到 github 上的文件)详情:https://git-scm.com/docs/gitignore. - .gi

源代码管理工具(下)-SVN目录结构

正规项目的SVN目录结构一般有3个文件夹:trunk:主干,当前开发项目的主目录branches:分支目录,添加非主线功能时使用,开发测试之后,可以合并到主干项目中tags:标记目录,通常作为重大版本的备份 在svn服务器上再次创建一个仓库,这个仓库死真正的仓库,包含了trunk.branches.tags三个文件夹,模拟开发.修复bug.合并版本的流程. 1.创建仓库 2.命名仓库 3.初始化仓库: 4.访问设置: 5.仓库创建成功,预览URL: 6.查看创建的三个文件夹: 7.接下来,根据项