当前位置: 首页 > news >正文

天津市市建设与管理局网站比亚迪新能源汽车价格

天津市市建设与管理局网站,比亚迪新能源汽车价格,国外建站企业,潜江建设网站本篇文章已授权微信公众号 dasu_Android#xff08;大苏#xff09;独家发布 最近看了一本书《Android Gradle 权威指南》#xff0c;对于 Gradle 理解又更深了#xff0c;但不想过段时间就又忘光了#xff0c;所以打算写一篇读书笔记#xff0c;将书中一些我个人觉得蛮有… 本篇文章已授权微信公众号 dasu_Android大苏独家发布 最近看了一本书《Android Gradle 权威指南》对于 Gradle 理解又更深了但不想过段时间就又忘光了所以打算写一篇读书笔记将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先先来过一下整书的目录章节先大概清楚整本书都介绍了哪些知识点 第 1 章 Gradle 入门 第 2 章 Groovy 基础 第 3 章 Gradle 构建脚本基础 第 4 章 Gradle 任务 第 5 章 Gradle 插件 第 6 章 Java Gradle 插件 第 7 章 Android Gradle 插件 第 8 章 自定义 Android Gradle 工程 第 9 章 Android Gradle 高级自定义 第 10 章 Android Gradle 多项目构建 第 11 章 Android Gradle 多渠道构建 第 12 章 Android Gradle 测试 第 13 章 Android Gradle NDK 支持 第 14 章 Android Gradle 持续集成 整本书介绍的内容很全从 Gradle 的环境配置 -- Groovy 介绍 -- 讲解项目中常见 gradle 文件作用 setting.gradle, build.gradle -- 详细讲解 build.gradle 文件内每行代码的含义 -- 各种高级自定义使用。 看完这本书对于掌握项目中的 build.gradle 文件应该就不成问题了虽然将整本书过了一遍但其实我也只是着重挑了一些自己感兴趣的章节深入阅读所以就来记录一下方便后续查阅吧。 笔记 1. Groovy 基础 首先清楚一点Gradle 是基于 Groovy 语言的他们之间的关系就像《Android 群英传神兵利器》中说的 Groovy 对于 Gradle就好比 Java 对于 Android 所以了解一些 Groovy对于学习 Gradle 来说肯定是有所帮助的。 关于这方面内容我之前写过一篇博客学点Groovy来理解build.gradle代码 所以这里不会再去介绍但有几个点可以提一下如果你都还不怎么熟悉那么可以点开链接去看看 Groovy 中支持用 xxx,xxx,xxx,/xxx/ 等多种方式来定义字符串所以如果在 build.gradle 里看到既有单引号又有双引号定义的字符串时不用去疑惑他们到底是不是字符串。Groovy 中的方法支持省略括号也就是说在 build.gradle 中一行行的代码大部分都是在调用某个方法。Groovy 中有一种特性叫闭包说白点也就是代码块支持作为方法参数结合方法括号省略的特点在 build.gradle 里 defauleConfig {} 代码块之类的其实也都是在调用一个个方法。2. Android 项目中的 Gradle 新建一个项目时Android Studio 会自动生成项目的初步结构这通常会携带一些 gradle 相关的文件这一节就来学学各个 gradle 文件都有什么作用 2.1 gradle/wrapper 目录 就像我们要开发 Java 程序本地需要配置 JDK 环境要开发 Android 程序需要配置 SDK 一样想要借助 Gradle 来构建项目那么按理说本地也需要配置相关的 Gradle 环境才对。 而我们之所以可以省掉这一步就是 gradle/wrapper 这个目录下的文件的作用了可以先看看 gradle-wrapper.properties 这个文件的内容 #Thu May 24 10:30:42 CST 2018 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists zipStoreBaseGRADLE_USER_HOME zipStorePathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-3.3-all.zip 内容无非就是一些配置项而最重要的就是最后一句指明了当前这个项目要使用哪个版本的 Gradle 来构建我们在 Android Studio 的 File - Project Structure - Project 里配置的 Gradle Version最终改变的其实就是上述文件里最后一行的 Gradle 版本属性值 官方说了提供了 gradle/wrapper 这种方式可以让你特别灵活的进行配置想换个 Gradle 版本来构建项目只需要修改这个配置文件的 Gradle 版本属性值即可当然也可以直接通过 AS 提供的 UI 界面操作结果都一样。 由于 Gradle 更新换代特别快而且新的大版本经常都会提供很多新特性这就导致了在 clone Github 上一些开源项目到本地构建时经常有报错的问题本质原因就是因为它使用的 Gradle 版本跟你本地不一样而由于有堵巨墙的原因导致一直没法成功下载它配置的 Gradle 版本进而就无法构建项目而报错了。 网上说的一些解决方案是让你手动去修改 gradle-wrapper.properties 文件里的 Gradle 版本改成你本地的版本但我觉得这种方法不一定适用这取决于那个项目中是否有用到一些新特性以及你本地的 Gradle 版本是否兼容项目中用到的 Gradle 新特性。 通常来说如果你本地的 Gradle 比克隆的项目的 Gradle 版本高的话那么这种直接修改项目的 Gradle 版本方式应该是可行的那么怎么知道你本地都有哪些 Gradle 版本呢 默认在 C 盘 C:\Users\suxq .gradle 目录下有 Android Studio 自动帮你下载的 Gradle 的各个版本只要你在 gradle-wrapper.properties 修改了 Gradle 的版本号那么当你在构建项目时就会先到你电脑的这个路径下查找相对应版本的 Gradle如果可用则直接进行构建项目任务如果不存在那么就会自动去下载对应版本的 Gradle。 最后还有个问题怎么确定都有哪些 Gradle 版本可用呢如果想要自己去下载不借助 Android Studio 可行么 当然可以去官网找到对应版本点击下载即可http://services.gradle.org/distributions/ 下载完成之后将文件放到上面介绍的 C 盘下的 .gradle 文件里相对应版本的目录下即可。 如果你有自己去尝试下载你就会体验到下载速度是有多么的龟速90M 左右的文件硬是要下载个把小时。同样的道理你自己下载这么慢那通过 Android Studio 下载的速度也同样这么慢两者唯一的区别就只是在于你自己下载时你可以看到速度和进度。 这样一来的话明白为什么有时候打开新项目或者打开 Github 上的项目时Android Studio 会一直卡在构建中的原因了吧 因为这个项目用到了你本地没有的 Gradle 版本所以 Android Studio 自动去下载了但由于都懂的原因下载速度贼慢因此网上才有一些博客教你说让你要去FQ明白为什么了吧。 另外网上还有一些博客会让你不管它让你等隔天再去打开这个项目然后有时候你会发现隔天打开竟然能正常构建项目了莫名其妙的就好了就不一直卡在构建中了。这是由于 Android Studio 会有一个后台构建的功能也就是说它可以在背后默默的帮你自动去下载 Gradle虽然速度贼慢但总有下载完成的时候当你隔天再去打开这个新项目时如果已经下载好了那自然就可以正常构建使用了。 2.2 gradlew.bat 文件 gradlew 文件和 gradlew.bat 文件两份没有什么差别它们都是脚本文件区别只是一个是 shell 脚本一个是批处理脚本那么自然一个是用来在 Linux 上运行一个在 Windows 上运行。 感兴趣的可以去看看这份脚本代码其中比较关键的代码 set CLASSPATH%APP_HOME%\gradle\wrapper\gradle-wrapper.jarrem Execute Gradle %JAVA_EXE% %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% -Dorg.gradle.appname%APP_BASE_NAME% -classpath %CLASSPATH% org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 大概翻译一下它借助了 gradle/wrapper 目录下的 gradle-wrapper.jar 文件并借助了 java 命令提供了可让我们直接以命令行形式运行一些相应的 gradle 指令而这些指令在 gradle-wrapper.jar 文件中都提供了相应的实现。 比如 gradlew -version 直接在 Android Studio 的 Terminal 面板运行 gradlew -version 命令或者在 Dos 窗口进到项目的根目录下执行该命令都可以前者只是打开时就默认将项目根目录作为当前路径了。 这也是为什么一些资料说如果没有配置 Gradle 环境那么在每个项目根目录下也可以运行 gradle 命令的原因因为每个项目都提供了 gradlew.bat 脚本以及 gradle/wrapper 目录下的 gradle-wrapper.jar 文件支持。你可以试一下删掉两者中任意一个就没法正常运行 gradle 命令了。 那么提供了脚本文件来支持直接运行 gradle 命令有什么用呢 用处可多了我们在构建项目时基本都是直接借助 Android Studio 的图形界面来操作点一点就可以了。但有时候经常会遇见一些构建失败的情况然后日志中经常会给我们这么一段提示 如果想查看更多的日志信息需要在执行命令的时候加上一些参数而这种时候就需要通过命令行的形式来了那么这时脚本文件也就派上用场了 这样一来就可以看到更多的日志信息了当然我举的这个例子不好因为可以直接看出问题出在哪了不需要再去获取更多的辅助信息来定位了。 但有些时候Gradle 构建时确实就是失败了然后给的信息又少让人莫名其妙不知道为啥失败了这种时候就可以借助命令行形式来执行这个 task然后添加一些参数来获取更多的辅助日志。至于要添加哪些参数执行什么命令通常情况下Gradle 构建失败时都会给出建议跟着来就可以了。 2.3 setting.gradle 文件 setting.gradle 文件通常是当项目涉及到多 Module 的场景。 只有在 setting.gradle 中 include 的 Module才会被加入构建中也就是说如果一个项目文件夹内包含了很多子工程但如果没在 setting.gradle 中将这些子工程 include 进来的话 这些 Module 是不会参与进构建的。 另外如果子工程的这些 Module 都直接放在了项目根目录中那么 setting.gradle 中只需要写 include 就可以了那如果这些子工程是放在别的地方那么也可以通过修改 project().projectDir 来指定子工程的具体路径也就是说所有的 Module 并不一定需要全部集中放在同一个项目内。 2.4 build.gradle 文件 一个项目中可能存在多个子工程每个子工程构建都应该是相互独立的也就是说每个子工程都可以根据自己的需要配置各种依赖插件等。那么Gradle 是如何分开来管理每个子工程的构建任务的呢 这就是 build.gradle 文件的作用了所以你会发现每个子工程也就是每个 Module 都会有一个 build.gradle 文件Gradle 就是以这个文件为根据来构建这个 Module。 那么如果有些配置项在所有的子工程中都是一致的话如果在每个子工程里都去重复粘贴的话当这个共同的配置项需要发生变化时维护起来会非常麻烦这也就是为什么根目录下面还会有一个 build.gradle 文件。 根目录下的这个 build.gradle 是统筹全局的在这里你可以配置一些所有工程共同的配置项比如 Android Gradle 的版本依赖库的仓库地址这些所有工程的共同配置项。 也就是说其实将根目录下的 build.gradle 文件里的内容移到每一个工程下的 build.gradle 里也是可行的。但没必要这样做吃饱了撑着。 3. Gradle 基础 3.1 task 概念 task 是 Gradle 中的一种概念引用书中的解释 一个 task 其实就是一个操作一个原子性的操作比如打个 jar 包复制一份文件编译一次 Java 代码上传一个 jar 到 Maven 中心库等这就是一个 Task和 Ant 里的 Target Maven 中的 goal 是一样的。 有点类似于 Java 里面的类但又有很多不同之处。我们要通过 Java 命令来执行某个 java 文件那么至少需要一个类类里面需要有 main 方法这个 java 文件才能运行起来。 同样要通过 gradle 命令来执行某个构建任务那么至少需要一个 task这个构建任务才能跑起来。 但更多的是不同的概念多个类之间可以有相互依赖的关系类中持有另一个类的引用等等。 但在 task 方面多个 task 之间只能有前后依赖关系即某个 task 的运行是否需要哪个 task 先运行的基础上才允许也就是说在 Gradle 的构建工作过程中多个 task 是构成一条直线的一个个 task 按顺序的去工作而不存在某个 task 工作到一半时去调用另一个 task。 不过通常情况下我们并不需要去接触到 task 层面build.gradle 文件里的代码大多都只是在调用各种方法进行各种配置而最后会根据这份文件生成很多 task比如 在 Android Studio 右侧的 Gradle 的面板这边就是一个个的 taskassemble 是一个 taskbuild 也是一个 task很多 task 是 Gradle 已经提供的而有些 task 则是根据 build.gradle 里面的配置项自动生成的比如 assembleDebug 这一类。 要执行 task 的方式可以通过 AS 的图形界面点一点即可也可以通过命令行方式由于根目录提供了 gradlew 脚本文件因此可以在根目录下执行 gradlew task名 即可。 3.2 gradle 插件概念 Gradle 是用来构建项目的但并不是说只能用于构建 Android 的项目Java 的也行C 的也行很多很多。 那如果我只是做 Android 开发我也就只需要 Gradle 构建 Android 项目的功能即可其他的又不需要鉴于此Gradle 封装好了基本的构建工作然后提供了插件的接口支持根据各自需要去扩展相应的构建任务。 以上就是我对于 Gradle 插件概念的理解我认为它是用于给大伙可以根据需要自行去扩展。 就拿 Android 项目来说来看一份 build.gradle 文件结构 apply plugin: com.android.applicationandroid {...defaultConfig {....} }dependencies {... } 如果有点击方法进去看过源码的话你会发现 发现没有dependencies 是 Gradle 提供的方法但 androiddefaultConfig 却都是 Android Gradle 插件提供的方法了。 也就是说其实 Gradle 只提供了构建项目的一些基本功能如配置依赖库不管什么项目都需要。但像 android {} 代码块里的配置项很明显就只有 Android 项目才需要用到了所以这些配置并不是由 Gradle 来提供的而是由 Android Gradle 插件提供的这也就是为什么在根目录的 build.gradle 文件里会有这么一行代码 buildscript {repositories {jcenter()}dependencies {classpath com.android.tools.build:gradle:2.3.3} } com.android.tools.build:gradle:2.3.3 这行代码其实就是声明了我们的项目还需要使用 Android Gradle 插件版本号为 2.3.3而插件的下载地址在 jecnter() 仓库。 所以得搞清楚Gradle 和 Android Gradle 是两种概念也是两个不同的东西如果有人问说你项目构建的 Gradle 的版本是多少得搞清楚他想问的是 Gradle还是 Android Gradle 插件。 但是我们在根目录的 build.gradle 里是可以配置多个插件的比如如果有使用 GreenDao或者使用了 Jcenter 的上传功能 buildscript {repositories {jcenter()}dependencies {//Google提供的构建Android项目的插件classpath com.android.tools.build:gradle:2.3.3//GreenDao 提供的插件classpath org.greenrobot:greendao-gradle-plugin:3.2.2//Jcenter提供的插件classpath com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4//Maven提供的插件classpath com.github.dcendents:android-maven-gradle-plugin:1.4.1} } 那么Gradle 在根据 build.gradle 构建 Module 时怎么知道要使用哪个插件呢声明了这么多。 这就是为什么在每个 Module 的 build.gradle 文件的开头有行 apply plugin 的代码了。 apply 是 Gradle 的方法它可以接收一个 map 类型的参数而在 Groovy 中map 的定义可以直接 key: value也就是说 apply plugin: com.android.application //等效于 // def map [plugin:com.android.application] // apply(map) 每个 build.gradle 开头这行代码其实是调用了 Gradle 的 apply() 方法然后传入了一个 map 值key 为 plugin value 为 ‘com.android.application那么 Gradle 就知道了你这个项目需要使用到一个 id 为 com.android.application 的插件来辅助构建了那么它就会去你在根目录下配置的插件列表里寻找。 也就是说apply plugin 是 Gradle 规定并提供的但 com.android.application 则是由 Android Gradle 来提供的。 那么小结一下要使用一个 Gradle 插件的话先得在根目录下声明你要用的插件以及版本当然也得指定插件的下载地址然后在你具体的 Module 的 build.gradle 的开头通过 apply plugin 方式来应用插件这个插件得有一个唯一区分开的 id 值。 4. 区分 Gradle 和 Android Gradle 先来看张图这个在 File - Project Structure - Project 打开在这里可以配置 Gradle 和 Android Gradle 插件的版本。 最开始接触的时候我看到这里是有些迷茫的怎么有一个 Gradle 版本又有一个 Android Gradle 版本。当别人问我你 Android Studio 使用的 Gradle 版本是多少时我也傻乎乎的打开根目录下的 build.gradle 文件里看到 com.android.tools.build:gradle:2.3.3然后跟他说 2.3.3 版本当初根本没搞清楚这两个有什么区别一直以为是同一个东西。 所以要搞清楚 Android Gradle 其实只是 Gradle 的一个插件是 Google 基于 Gradle 提供的插件接口所做的一些扩展。 所以要查找 Android Gradle 的相关资料自然就不是去 Gradle 官网了而是要去 Android 官网找 https://developer.android.google.cn/studio/releases/gradle-plugin 由于 Gradle 更新换代很快又经常提供一些新特性所以 Android Gradle 插件也就跟随着发布了很多版本所以Android Gradle 的版本并不是可以任意更改的因为它是基于每一个 Gradle 版本开发的因此需要在对应的 Gradle 版本中才能使用。 这也是为什么我们有时候直接修改根目录下的 build.gradle 中的 Android Gradle 版本时会报一些错误说需要 Gradle 版本在多少在可以使用的原因至于这些对应关系官网当然有给出来了 举个例子如果你 Gradle 版本使用的是 3.3然后你在 Github 上 clone 了某个人的项目他的项目中使用的 4.4 的 Gradle 版本 和 3.1.0 的 Android Gradle 插件但是你发现在打开这个项目的时一直处于构建中一直打不开。 你查了下原因网上有教程说让你将项目中的 gradle/wrapper 文件里的 Gradle 版本换成你本地项目中的 Gradle 版本还跟你说因为它使用的版本你本地没有而且被墙了你下载需要很长时间让你直接改成使用你本地的版本即可。 你改了后发现是可以打开项目了但构建的时候又报错了说你使用了 3.1.0 的 Android Gradle 插件需要让你将 Gradle 版本改成 4.4 才可以正常构建这 MMP 不是又绕回去了。 所以说别听他放屁搞清楚了 Gradle 和 Android Gradle 插件的关系之后。那为什么会一直在构建中为什么会报错我们心里就有数了要解决没有其他办法就是要将对应的版本下载下来。 所以你应该去搜的是如何下载Android Gradle 插件并没有被墙如果想自行下载可以参考我之前的博客: 如何用Android Studio查看build.gradle源码而至于 Gradle 要如何下载如果官网下载不了那就去搜搜有没有相关的镜像吧。 本篇就先到这里了还会有一篇下篇下篇的内容就是侧重于介绍 build.gradle 里各种配置项的作用和意义了还有就是如何自己写 Gradle 脚本来运行敬请期待~ 最近2018-03刚开通了公众号想激励自己坚持写作下去初期主要分享原创的Android或Android-Tv方面的小知识准备可能还有点不足感兴趣的可以先点一波关注谢谢支持~~ 转载于:https://www.cnblogs.com/dasusu/p/9085174.html
http://www.huolong8.cn/news/208985/

相关文章:

  • 网站排名查询站长之家刷题小程序制作平台
  • 北京网站建设还公司河南简介网站设计
  • 做外包网站的公司是怎样的免费注册帐号qq
  • 网站克隆下来了然后再怎么做广告策划公司简介
  • 建设网站的功能定位是什么原因注册微信小程序流程
  • 学习网站开发培训wordpress sql替换域名
  • 网站搭建与网站建设生意街创业商机网
  • 涉密项目单位网站建设流程wordpress主题破解下载
  • 残联网站建设wordpress模板修改字体
  • 专业微信网站建设上海网站建设网站优化app
  • 网站外链接自己可以怎么做的pc网站建设建议
  • 阿里云网站空间申请vi形象设计企业vi设计公司
  • 网站的发展趋势统一汤达人选择她做汤面活动网站
  • 麻涌镇网站建设公司网站运维
  • 建设网站教学wordpress修改没
  • 郑州营销型网站制作自建网站如何上传视频
  • 杭州 seo网站建设 网络服务黄岛网站建设价格
  • 网站建商城网页设计图片代码怎么写
  • 网站更改关键词设计感 网站
  • 网站里 动效是用什么做的无锡seo网站排名
  • 北京政平建设投资集团有限公司网站电商网站建设与开发课程试卷
  • 单位建设网站需要招标潜江做网站的公司
  • 网站特效 素材wordpress文章更新
  • 做搜狐网站页面网络营销师培训费用是多少
  • 做响应式网站的微博号小学门户网站建设情况汇报
  • 网站的建设意见网页紧急升级维护中升级
  • 重庆企业网站昆山网站制作哪家强
  • 头疼是什么原因导致的seo实战培训
  • 网站代码制作河北省住宅和城乡建设厅网站
  • 公众平台如何做网站汽车网络营销方式