gradle是Android开发中引入的全新的构建系统,因为全新的构建系统主要是出于下面的目的:

1. 方便复用代码和资源

2. 构建多种版本的apk更见简单,不论是为多渠道构建不同的apk还是构建不同环境的apk(debug,release)

3. 方便配置,扩展,自定义构建过程

4. 良好的IDE集成

为什么选择Gradle?Gradle主要有以下几个有点:

1. 使用领域驱动语言(DSL)来描述构建逻辑

2. 构建脚本使用Groovy,可以方便的定制构建逻辑

3. 内建的依赖管理系统,使用Maven或者Ivy

4. 非常灵活。可以使用最佳实践但并不强制

5. 良好的IDE支持

Gradle项目使用项目根目录下的build.gradle文件来配置

一个最简单的Java项目的build.gradle如下

apply plugin: 'java'

这表示改项目会使用Gradle的java插件,该插件是Gradle默认提供的,java插件提供了构建java应用和运行测试的功能。

最简单的Android项目build.gralde

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.11.1'

}

}

apply plugin: 'android'

android {

compileSdkVersion 19

buildToolsVersion "19.0.0"

}

该Android构建文件包含3个部分:

1.buildscript { ... } 配置驱动构建过程的代码,意思就是buildscript中的配置仅仅在构建过程中起作用,也就是构建程序所使用的配置。

上面的代码中就声明了我们的构建程序会使用Maven中央仓库,并且有一个classpath依赖是指向一个Maven库的。这个Maven库就是Android Gradle插件,版本号是0.11.1。

2.随后就是使用这个Android插件,和之前使用Java插件一样。

3.最后,android { ... }配置了Android项目构建时需要的所有参数。

默认情况下,只需要指定compileSdkVersion和buildtoolsVersion,compileSdkVersion指定使用哪个版本的sdk编译,buildToolsVersion指定使用哪个版本的构建工具。

注意点:1. 只需要使用android插件,再使用Java插件会报错.

2. 在local.properties中使用sdk.dir属性指定SDK路径,或者你可以使用ANDROID_HOME环境变量。

项目结构Gradle采用约定优于配置的原则,最简单方式是使用一个默认的目录结构。当然目录结构是可以自己修改的。

默认情况下,android gradle项目的代码都在src目录下,src下会有两个目录main和androidTest,其中main目录下是项目代码,androidTest目录下是测试代码。

src/main/

src/androidTest/

在main和androidTest目录下面,针对不同类型的code,又不会不同的目录。

对于Java和Android的Gradle插件,Java代码和Java资源分别对应了java目录和resources目录。Android插件还需要一些其他的目录和文件,比如

AndroidManifest.xml

res/

assets/

aidl/

rs/

jni/

下面我们来看一下如何更改这些默认的配置。

Android工程,默认情况下,java文件和resource文件分别在src/main/java和src/main/res目录下,在build.gradle文件,andorid{}里面添加下面的代码,便可以将java文件和resource文件放到src/java和src/resources目录下。(注意,如果你在gradle文件中修改了,只需要重新sync一下,gradle会自动创建新的目录,并将对应的文件移动到新的目录下)

sourceSets {

main {

java {

srcDir 'src/java'

}

resources {

srcDir 'src/resources'

}

}

}

更简便的写法是

sourceSets {

main.java.srcDirs = ['src/java']

main.resources.srcDirs = ['src/resources']

}

数组里其实是可以指定多个目录,这样就可以将代码和资源放置到多个目录下。

在看一个Android项目的例子:

android {

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

res.srcDirs = ['res']

assets.srcDirs = ['assets']

}

androidTest.setRoot('tests')

}

}

这里的main code其实使用的就是Android Gradle的默认值,而androidTest不再使用默认的androidTest目录,而是使用tests目录。

使用gradle构建android项目,Android中使用Gradle来构建App项目的入门指南相关推荐

  1. android 浏览器 cookie,从Android的浏览器中传递cookie数据到App中

    从Android的浏览器中传递cookie数据到App中 蒋彪@南京 2013-4-19 1.    需求 客户有一个需求, 在Android的浏览器上登录一个site, login之后,会在本地co ...

  2. Android项目工程中的Gradle、compileSdkVersion、buildToolsVersion

    1. Gradle Gradle是一个依赖管理工具,也是一个编程框架.基于Groovy语言,面向Java应用为主,摒弃了基于XML的繁琐配置,采用的是一种基于Groovy的内部领域特定(DSL)语言, ...

  3. app android切图工具,2018最强手机APP切图规范指南和切片要求

    关于手机APP切图的干货,25学堂已经分享了很多,但是不是很全面,同时也没有把一些APP切图需要注意点分享给大家,于是,学堂君想在今天把前辈切片的经验分享出来. 之前25学堂分享的APP切图干货: 如 ...

  4. android 怎么导入和应用特殊字体在app项目

    随着市面上的app应用越来越丰富,一款性能优越且让人眼前一亮的app也是越来越少了.一款好的app不仅要界面精美而且要符合大众需求. 界面上的字体是让用户第一眼就能感受到开发者心意的直接表现.但是an ...

  5. VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别

    WebApplication编程模型的优点 ●网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去. ●生成的程序集 WebSite:生成随机的程序集名,需要通过插件We ...

  6. 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )

    文章目录 一.顶层 Gradle 定义扩展变量 二.获取顶层的 Gradle 对象 三.Module 中使用 Gradle 变量 四.Gradle 中打印变量值 五.涉及到的 Gradle 构建脚本 ...

  7. 一些完整的Android开源app项目

    android开源项目有很多,但是完整的app项目不多,下面是最近我 整理的一些开源app项目: 注: jcodecraeer网站上搜集了很多开源项目,更新很快,非常值得关注. 一.photoup 介 ...

  8. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP

    Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP 项目截图 这是我的目录结构 五步使用RxJava+Retrofit2+Okhttp+RxCache 第一步:导包 ...

  9. 库项目和App项目中清单文件的包名不要相同

    在清单文件中有一个包名,如下: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns: ...

  10. 开发iWatch时遇到的bug,可能是因为项目名中含有中文

    开发iWatch时遇到的问题,可能是因为项目名中含有中文,我把项目名改成中文了后就没问题了

最新文章

  1. 夏瑞、陈程杰报告—科研神器TBtools 从“结识”到“结伴”(下午3点腾讯会议)...
  2. 《I'm a Mac:雄狮训练手册》——1.12 开机快捷键
  3. java概述、安装、配置环境、运行
  4. boost::statechart模块无效图表测试
  5. tcl mysql_MySQL·TCL语言
  6. spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!
  7. VMware (CentOS 6.x)克隆导致的网卡问题
  8. hls和modelsim联合仿真生成波形找不到wlf文件
  9. 查看静态库支持的CPU架构
  10. 空间复杂度和时间复杂度
  11. NeHe OpenGL第九课:移动图像
  12. Win10离线 安装.net frame3.5
  13. 信号与线性系统管致中第六版pdf_第五讲 信号流图
  14. pdf批量转换为图片
  15. 动态规划经典入门题(初学必刷)
  16. win 10 计算机找不到,怎么找到win10的计算器?不见了,怎么处理
  17. 数据分析上海长租房市场
  18. 使用html5静态页面的总结,幸福西饼:静态页面制作项目总结
  19. python爬虫小项目挣钱兼职,python程序员兼职平台
  20. requests库请求获取不到数据怎么办?不妨试试看这种妙法

热门文章

  1. shell脚本中常见的一些特殊符号和作用详解
  2. 比尔盖茨2016好书推荐
  3. JavaScript Array reverse 方法:颠倒数组中元素的顺序
  4. Java实现JsApi方式的微信支付
  5. iOS关于Xcode上的Other linker flags
  6. poj 2739 Sum of Consecutive Prime Numbers
  7. 解决QueryTask执行中的网络请求错误
  8. Bing API 2的体验
  9. python嵌套循环效率_Python嵌套循环数组比较优化的可能性?
  10. android tag 快捷_Android Studio快捷键生成TAG、Log.x日志输出介绍