Gradle在Android中的基本使用
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目录下的所有jar包 compile 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中的基本使用相关推荐
- Gradle 之 Android 中的应用
在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...
- android中gradle的作用,Gradle 之 Android 中的应用
在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...
- Gradle在Android中的简单使用
Gradle在Android中简单的使用 还望支持个人博客站:http://www.enjoytoday.cn Android Studio 使用gradle进行工程构建,为了更好的了解整个andro ...
- Gradle For Android系列4:创建Build Variants
当你在开发一款应用时,通常会面临发布不同的版本需求.举两个常见的场景,场景一:你正在增加新功能,然后你需要发布版本提交给QA,测试通过后再发布线上版本,可能线下版本和测试版本的服务器接口域名不一样又或 ...
- 使用gradle构建android项目,Android中使用Gradle来构建App项目的入门指南
gradle是Android开发中引入的全新的构建系统,因为全新的构建系统主要是出于下面的目的: 1. 方便复用代码和资源 2. 构建多种版本的apk更见简单,不论是为多渠道构建不同的apk还是构建不 ...
- Android中的Gradle之配置及构建优化
一.Gradle简介 1.Gradle是什么? Gradle是一种项目自动化构建工具,基于Groovy语言来声明项目设置,同时支持kotlin文件xxx.gradle.kts作为DSL(Domain ...
- 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )
文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...
- Android中清单文件引入配置参数,Android 使用gradle打包的各种配置
原标题:Android 使用gradle打包的各种配置 在AS中利用gradle打包,可以高效并且自由地配置各种参数,发布不同的版本.关于配置gradle文件的一些做法,总结为如下. 一.替换Andr ...
- 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 ...
- Android中的网络(字节跳动)
文章目录 RESTful API 对REST的解释 资源与URI 什么是URI HTTP URL的组成 Http 接口 JSON Http资源 XML JSON Android中对JSON的处理 方法 ...
最新文章
- 全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版
- winxp精简版没有IIS的解决办法
- 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
- 很不错的python 机器学习博客
- Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
- Python集合常用函数使用详解(内附详细案例)
- Java解码aac,Android MediaCodec解码AAC,AudioTrack播放PCM音频
- 判断计算机电脑是否通电,电脑日常维护:查看硬盘通电时间,判断性能
- 无招胜有招-代码解读阿里开源芯片平台无剑100
- 综述 | 一文读懂自然语言处理NLP(附学习资料)
- Vue this.$router.go(0) 刷新当前页面在苹果手机无效
- 【微信支付付款至零钱】
- Boost研究:Boost Log
- 计算机和通信技术对未来的,谈计算机技术与通信技术的发展
- 百度搜索 “Java面试题” 前200页
- ADC采样效应及相关影响解剖
- Au Robotics软件类笔试题
- Java 反射 - Java 访问器
- quick-cocos2d-x游戏开发【14】——StateMachine状态机
- 时空幻境的体验分析:基于机制
热门文章
- Linux命令----rpm
- LINQ 学习笔记8
- 可重启的活动目录域服务
- 在小榕的论坛看的一篇关于DOS批处理命令的文章
- webApplicationContext 与servletContext
- 深夜十点,北京各大互联网企业的下班高峰才刚开始?北晚记者带您实地探访...
- 一个3年工作经验的Web工程师的经验之谈
- 孙杨事件的几点事实!
- 5G 时代,一加的机会在哪里?
- python爬虫百度翻译997_python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', ......