1.基本概念

程序开发作为一种工程作业,不光是编写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....).很多时候,我们反复的build,clean,签名,打包,发布,那么该过程能否像代码那样被描述出来,且能复用.例如,Android开发后期发布上线版本时,往往需要用到多渠道打包,另外可能需要针对不同(手机品牌,尺寸等各种硬件信息)的手机做一些特殊处理,此时Gradle可以用来针对不同情况单独建工程,还能通过一些变量来控制,像这样:if(isSamsung){do something} else if(isHuawei){do something}

由此,我们引入Google的官方打包工具Gradle,暂且把它看做是一个编程框架工具吧.

2.Gradle在AS中的使用

gradle通过解析build.gradle这个文件来运行

build.gradle 主要由task和一些配置组成,task之间有相互依赖关系 通过这些依赖关系和配置就能编译项目

可以通过 apply plugin 来加入一些默认的task 例如

apply plugin: 'java'

这是java的插件 他加入了许多编译java的task 如果你的目录结构正确 那么通过gradle 运行 task 就能编译java项目

编译过程

这是一个最简单的显示 hellowrold的 apk的文件结构

<img src="https://pic4.zhimg.com/3f5e405872c135aa7a9d3e79c22b1063_b.png" data-rawwidth="644" data-rawheight="502" class="origin_image zh-lightbox-thumb" width="644" data-original="https://pic4.zhimg.com/3f5e405872c135aa7a9d3e79c22b1063_r.png">

一个android项目实际上在gradle 的编译体系中属于 multi project build 每个使用gradle编译的android项目都有一个app文件夹 android项目源码就在这个文件夹下

gradle文件中放的是

<img src="https://pic3.zhimg.com/aeeab0fa2c98d604cd425420c851996e_b.png" data-rawwidth="257" data-rawheight="145" class="content_image" width="257">

一个jar包 当你的电脑中没有安装gradle 就会通过他来下载gradle 从而继续编译

build.gradle中的是

buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.1.3'}
}allprojects {repositories {jcenter()}
}task clean(type: Delete) {delete rootProject.buildDir
}

他只是通过

dependencies {classpath 'com.android.tools.build:gradle:2.1.3'}

来描述插件的位置

gradle.properties 中是配置信息 在这里设置jvm的heapsize 什么的

settings.gradle 之前说了每个用gradle 的android 项目是一个multi project build 那么就需要指明有哪些project 这里我们就只有默认的app

<img src="https://pic2.zhimg.com/4c1a9684a03e2f882a8eb766adab0f1d_b.png" data-rawwidth="306" data-rawheight="88" class="content_image" width="306">

local.properties中配置的是sdk的位置

<img src="https://pic4.zhimg.com/b991a29c85b96736284291e235fa9deb_b.png" data-rawwidth="406" data-rawheight="107" class="content_image" width="406">

gradlew.bat 和gradlew 分别是在windows 和linux下的执行gradle 命令的程序 例如在windows下要编译apk 就 .\gradlew assemble

<img src="https://pic1.zhimg.com/642b021b1a94628861bf54554e1588d8_b.png" data-rawwidth="520" data-rawheight="163" class="origin_image zh-lightbox-thumb" width="520" data-original="https://pic1.zhimg.com/642b021b1a94628861bf54554e1588d8_r.png">

进入到app文件夹

<img src="https://pic3.zhimg.com/d9effc0ad8798f26be61da466a9fd92e_b.png" data-rawwidth="332" data-rawheight="459" class="content_image" width="332">

libs文件夹下放项目要用的jar包

src下就是正常的android 项目的源码了

build.gradle中是

// 声明是Android程序 apply plugin: 'com.android.application' android { // 编译SDK的版本 compileSdkVersion 21 // build tools的版本 buildToolsVersion "21.1.1" defaultConfig { // 应用的包名 applicationId "me.storm.ninegag" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0.0" } // java版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { debug { // debug模式 } release { // 是否进行混淆 minifyEnabled false // 混淆文件的位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } // 移除lint检查的error lintOptions { abortOnError false } } dependencies { // 编译libs目录下的所有jarcompile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:21.0.2' compile 'com.etsy.android.grid:library:1.0.5' compile 'com.alexvasilkov:foldable-layout:1.0.1' // 编译extras目录下的ShimmerAndroid模块 compile project(':extras:ShimmerAndroid') }

这里需要说明几点:

  • buildToolsVersion这个需要本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。

  • applicationId代表应用的包名。

  • android 5.0开始默认安装jdk1.7才能编译.

  • proguardFiles,前一部分表示系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,目录在 **<sdk目录>/tools/proguard/proguard-android.txt** , 后一部分是自定义的混淆文件,目录就在 **app/proguard-rules.txt** ,具体混淆的语法暂且不去管它。最终混淆的结果是这两部分文件共同作用的。

  • compile project(‘:extras:ShimmerAndroid’)这一行是因为项目中存在其他Module, 可以理解成Android Library,由于Gradle的普及以及远程仓库的完善,这种依赖渐渐的会变得非常不常见,但是你需要知道有这种依赖的。

  • 以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续有时间的话会进一步深入。

3.小结一下

多个工程在一起的话,要注意分清哪些是应用工程,哪些是依赖工程,各个工程的build.gradle里要统一gradle以及插件版本,像这样def gradleVersion = System.env.ANDROID_TOOL_BUILD_GRADLE != null ? System.env.ANDROID_TOOL_BUILD_GRADLE : '1+';以前,一个项目被创建以后,基本不会再去动这build.gradle了,一方面不太理解里面具体的含义懂了怕出错,另一方面没有这方面的需求就不会主动去了解这个东西.以上只是Gradle作为工具的基本用途,然而它的作用域远不止于此,后续会继续深入的了解和学习.

转载于:https://www.cnblogs.com/fuyaozhishang/p/6540477.html

Gradle在Android中的基本使用相关推荐

  1. Gradle 之 Android 中的应用

    在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...

  2. android中gradle的作用,Gradle 之 Android 中的应用

    在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...

  3. Gradle在Android中的简单使用

    Gradle在Android中简单的使用 还望支持个人博客站:http://www.enjoytoday.cn Android Studio 使用gradle进行工程构建,为了更好的了解整个andro ...

  4. Gradle For Android系列4:创建Build Variants

    当你在开发一款应用时,通常会面临发布不同的版本需求.举两个常见的场景,场景一:你正在增加新功能,然后你需要发布版本提交给QA,测试通过后再发布线上版本,可能线下版本和测试版本的服务器接口域名不一样又或 ...

  5. 使用gradle构建android项目,Android中使用Gradle来构建App项目的入门指南

    gradle是Android开发中引入的全新的构建系统,因为全新的构建系统主要是出于下面的目的: 1. 方便复用代码和资源 2. 构建多种版本的apk更见简单,不论是为多渠道构建不同的apk还是构建不 ...

  6. Android中的Gradle之配置及构建优化

    一.Gradle简介 1.Gradle是什么? Gradle是一种项目自动化构建工具,基于Groovy语言来声明项目设置,同时支持kotlin文件xxx.gradle.kts作为DSL(Domain ...

  7. 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

    文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...

  8. Android中清单文件引入配置参数,Android 使用gradle打包的各种配置

    原标题:Android 使用gradle打包的各种配置 在AS中利用gradle打包,可以高效并且自由地配置各种参数,发布不同的版本.关于配置gradle文件的一些做法,总结为如下. 一.替换Andr ...

  9. Android中导入项目编译时报错:Java home supplied via ‘org.gradle.java.home‘ is invalid. Invalid directory...

    编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/73500775 报错内容 Error:Failed to comp ...

  10. Android中的网络(字节跳动)

    文章目录 RESTful API 对REST的解释 资源与URI 什么是URI HTTP URL的组成 Http 接口 JSON Http资源 XML JSON Android中对JSON的处理 方法 ...

最新文章

  1. 全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版
  2. winxp精简版没有IIS的解决办法
  3. 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
  4. 很不错的python 机器学习博客
  5. Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
  6. Python集合常用函数使用详解(内附详细案例)
  7. Java解码aac,Android MediaCodec解码AAC,AudioTrack播放PCM音频
  8. 判断计算机电脑是否通电,电脑日常维护:查看硬盘通电时间,判断性能
  9. 无招胜有招-代码解读阿里开源芯片平台无剑100
  10. 综述 | 一文读懂自然语言处理NLP(附学习资料)
  11. Vue this.$router.go(0) 刷新当前页面在苹果手机无效
  12. 【微信支付付款至零钱】
  13. Boost研究:Boost Log
  14. 计算机和通信技术对未来的,谈计算机技术与通信技术的发展
  15. 百度搜索 “Java面试题” 前200页
  16. ADC采样效应及相关影响解剖
  17. Au Robotics软件类笔试题
  18. Java 反射 - Java 访问器
  19. quick-cocos2d-x游戏开发【14】——StateMachine状态机
  20. 时空幻境的体验分析:基于机制

热门文章

  1. Linux命令----rpm
  2. LINQ 学习笔记8
  3. 可重启的活动目录域服务
  4. 在小榕的论坛看的一篇关于DOS批处理命令的文章
  5. webApplicationContext 与servletContext
  6. 深夜十点,北京各大互联网企业的下班高峰才刚开始?北晚记者带您实地探访...
  7. 一个3年工作经验的Web工程师的经验之谈
  8. 孙杨事件的几点事实!
  9. 5G 时代,一加的机会在哪里?
  10. python爬虫百度翻译997_python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', ......