首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第一章 Gradle入门

日志级别 # 输出 quiet 级别及其以上的日志 gradle -q tasks # 输出 info 级别及其以上的日志 gradle -i tasks 输出错误堆栈信息 在使用 Gradle 构建的时候.../gradlew help --task tasks,就可以显示tasks任务的帮助信息: 强制刷新依赖 我们一个功能不可避免的会依赖很多第三方库,像 Maven 这类工具都是有缓存的,因为不可能每次编译的时候都要重新下载第三方库...默认情况下Maven这类工具会控制缓存的更新,但是也有例外,比如 Version 一样,但是里面的代码变了;还有就是联调测试使用的snapshot 版本。...通过命令行执行多个任务非常简单,只需要按顺序以空格分开即可,比如 gradle clean jar,这样就可以了,有更多的任务,可以继续添加。...通过任务名字缩写执行执行 有的时候我们的任务名字很长,Gradle提供了基于驼峰命名法的缩写调用,比如 connectCheck,我们执行的时候可以使用 gradlew connectCheck, 也可以使用

41920

Gradle学习笔记 Gradle命令行

然后我们使用Gradle运行dist和test任务,会发现Gradle会分析这几个任务之间的依赖关系,依次运行它们,gradle dist test。 结果如下。...出错继续执行 默认情况下如果构建过程出现错误Gradle就会停止构建,我们可以使用--continue参数让Gradle在出现错误的时候继续执行构建过程,直到每个任务都运行完毕。...强制执行任务 一些任务特别是gradle自带的任务,都支持增量构建。这样的任务会在运行时候根据文件状态自己决定执行与否。如果有这样的任务,在运行的时候会显示一个UP-TO-DATE字样。...我们可以通过--rerun-tasks参数强制任务完整执行。 获取构建信息 列出项目 我们可以通过在build.gradle文件中添加description = ...来为项目添加描述信息。...>:tasks For example, try running gradle :tasks 列出任务 使用gradle -q tasks列出所有任务

73910
您找到你想要的搜索结果了吗?
是的
没有找到

Hilt 工作原理 | MAD Skills

对注解的处理发生在编译器将源文件转换为 Java 字节码期间。顾名思义,注解处理器作用于源文件中的注解。注解处理器通常会检查注解,并根据注解类型来执行不同的任务,例如代码检查或生成新文件。...Hilt Gradle 插件执行很多有用的任务,包括字节码改写和类路径聚合。 字节码改写 顾名思义,字节码改写就是改写字节码的过程。与注解处理只能生成新代码不同,字节码改写可以修改现有代码。...然而,字节码改写仍有一些缺点: 该插件必须修改底层字节码,而不是源代码,这容易出错。 因为在改写操作字节码已经被编译,所以问题通常出现在运行时而不是编译。...当 :cache 被编译,虽然它会生成元数据,但在编译 :app 该元数据无法使用,因为它是一个传递依赖项。因此,Hilt 无法知晓 CacheModule,它会意外地从生成的组件中排除。...首先,对比在整个应用中手动使用 api 依赖关系,类路径聚合更不容易出错并且不需要维护。您可以像往常一样简单地使用 implementation,其余的将由 Hilt Gradle 插件处理。

1.5K20

Kotlin京东业务实战 | 强大又简洁的JVM语言

Kotlin使用了显式的null,这会强制我们在必要进行null检查。 互操作:Kotlin可与Java语言无缝通信。...这样,每次在使用该类型的变量,我们都需要进行null检查。比如说,如下代码将无法编译通过: var artist: Artist? = null?...Android Studio提供将Java转为Kotlin的插件,可以转换大部分代码。 常见编译问题: a、代码编译出错,定义变量,没有赋初始值,变量可以为空,需要加?...= null b、代码编译出错,变量可以为空使用变量需要加?...>>>> 常见问题 环境配置出错,出现无法编译或编译正常但apk中无kotlin代码,运行时报kotlin代码找不到; 解决方法:在插件代码中配置kotlin环境,在gradle中增加classpath

1.6K00

Android 配置Freeline教程

性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速效果,另外在class及dex...将下载以后得到的 gradle-2.14-all.zip 文件夹解压到我们电脑磁盘上固定存放软件的位置。 ? ? 使用命令查看gradle是否安装成功。...gradle -v Freeline配置 Freeline的特性: 支持调试 系统最低支持到api level 9 支持标准的多模块Gradle工程的增量构建 并发执行增量编译任务 进程级别异常隔离机制...支持各类主流注解库 支持Windows,Linux,Mac平台 当然每个事物都有自己的不足,现在已经Freeline的一些不足: 第一次增量资源编译的时候可能会有点慢 不支持删除带id的资源,否则可能导致aapt编译出错...python freeline.py -f 如果我们后期修改了代码,秒秒钟就可以热更新到手机: python freeline.py python freeline.py -d 注:当然你也可以直接使用

1.2K100

一些关于加速Gradle构建的个人经验

/gradlew --stop 再次执行gradle任务就可以应用daemon了,留意的话,可以看到类似这样的日志输出。...开启offline 开启offline之后,可以强制Gradle使用本地缓存的依赖,避免了网络读写操作,即使是需要从网络进行检查这些依赖。 1 ....设置并行构建 现在的工程往往使用了很多模块,默认情况下Gradle处理多模块,往往是挨个按顺序处理。可以想象,这种编译起来会有多慢。...使用—configure-on-demand会在执行任务仅仅会配置相关的modules,而不是左右的modules。尤其是对于多模块的project来说,使用起来会有不小的提升。 1 ....gradle提供了性能分析的功能,就profile,使用很简单,执行任务带上—profile参数即可。比如 1 .

1.7K10

Android Gradle 入门

强制刷新依赖 我们一个功能不可避免的会依赖很多第三方库,像Maven这类工具都是有缓存的,因为不可能每次编译的时候都要重新下载第三方库,缓存就是这个目的,先使用缓存,没有再下载。...默认情况下Maven这类工具会控制缓存的更新,但是也有例外,比如Version一样,但是里面的代码变了;还有就是联调测试使用的snapshot版本。...上两种情况我们在实际项目中都遇到过,最后就是通过强制刷新解决的。...通过命令行执行多个任务非常简单,只需要按顺序以空格分开即可,比如./gradlew clean jar,这样就可以了,有更多的任务,可以继续添加。...通过任务名字缩写执行执行 有的时候我们的任务名字很长,如果在执行的时候全部写一遍也挺费时间,为此Gradle提供了基于驼峰命名法的缩写调用,比如connectCheck,我们执行的时候可以使用.

85340

Gradle 简介

为以依赖为基础的编程方式提供语言支持 声明性语言优点在于通用任务图,你可以将其充分利用在构建中. 它提供了最大限度的灵活性,以让 Gradle 适应你的特殊需求。...构建结构化 Gradle 的灵活和丰富性最终能够支持在你的构建中应用通用的设计模式。 例如,它可以很容易地将你的构建拆分为多个可重用的模块,最后再进行组装,但不要强制地进行模块的拆分。...Gradle 对任意的 Ant 项目提供了深度导入,并在运行时将 Ant 目标(target)转换为原生的 Gradle 任务(task)。...Gradle 完全支持用于发布或检索依赖的 Maven 或 Ivy 仓库。 Gradle 同样提供了一个转换器,用于将一个 Maven pom.xml 文件转换为一个 Gradle 脚本。...它强制使用指定的版本,以减少兼容支持问题。 自由和开源 Gradle 是一个开源项目,并遵循 ASL 许可。 为什么使用 Groovy?

93510

Kotlin 1.4 来了!全新语言特性和更多改进

新语言特性 Kotlin 1.4 中引入的新语言特性改善了编写 Kotlin 代码的 "人机工程学",例如: Kotlin 接口的 SAM 转换 过去,只有 Java 编程语言中定义的功能接口(即只有一个单一抽象方法...该模式强制执行 Kotlin 的某些语言属性,这些属性通常为可选,例如指定可见性修饰符,以及任何公共声明的显式键入,防止设计库的公共 API 出错。...官方文档说明了如何启用显式 API 模式并开始使用这些附加检查。...现在,所有开发者都可以利用的优势之一是 更强大的新类型推理算法 (默认启用),它可以在更多用例中自动推理类型,即使在复杂的场景下也支持智能转换,帮助开发者提高工作效率。...启用插件后,您可以更新 build.gradle 脚本中的 Kotlin Gradle 插件版本,将应用项目升级以使用 Kotlin 1.4。

77830

C++:16---强制类型转换和类型转换

type是转换的目标类型 避免强制类型转换 强制类型转换干扰了正常的类型检查,所以强烈建议程序员避免使用强制类型转换 这个建议对于reinterpret_cast尤其使用,因为此类类型转换总是充满了风险...转换,编译器无警告 当我们把较大的算术类型赋值给较小的类型,一般的强制类型转换编译器会发出警告 但是当我们使用static_cast后,编译器就不会报出警告 演示案例 static_cast对于编译器无法自动执行的类型转换也非常有用...然而,并非任何时候都能定义一个虚函数,假设我们无法使用虚函数,则可以使用一个RTTI运算符 另一方面,与虚函数相比,使用RTTI运算符蕴含着更多潜在的风险:程序员必须清楚地知道转换的目标类型并且必须检查类型转换是否被成功执行...引用类型的dynamic_cast 引用类型的dynamic_cast与指针类型的dynamic_cast使用起来类似,只是两者在出错的返回值不同: 引用类型的dynamic_cast在出错时会抛出异常...指针类型的dynamic_cast在出错返回0 当对引用的类型转换失败,程序抛出一个名为std::bad_cast的异常,该异常定义在typeinfo头文件中 例如: class Base { public

1.9K20

Android 大型工程 App Bundle 模块化实践

缩短编译时间 Gradle 编译系统在效率上的提升,主要体现在3个方面: 并行编译 在编译任务关系依赖图中,同类多工程更易构造并行编译关系,充分利用多线程编译优势。...采用复制另一个重要原因是 feature 可能由于命中缓存、不会转换为 Project 参与编译,所以没采用编译任务来合并。...动态模块分区隔离 会添加 android 和 base 资源包作为外部引用,所以在 base 中的公共资源仍可继续使用。但是引用了其他动态模块的资源就会出错,这是我们期望出现的。...全包名引用 方向一:阻断递归 最少 不重复 隔离 是 方向二:字节码 多 重复 不隔离 否 动态模块 少 重复 平级隔离 部分 平级隔离 feature 和 feature 之间,资源和 R 在编译无法直接引用...运行时一致性 R.id 新的模块化开发在运行时还存在2类问题: 资源 id 错乱 编译所有资源的 id 都是随机分配的,以前使用 .aar 缓存总会再分配不会出现错乱,但使用 .apk 缓存就会出错

4.6K31

Flutter依赖库填坑

宿主工程中依赖Flutter plugin工程,该plugin中依赖了三方库pub_dev_lib1,此lib1--->android--->build.gradle中依赖三方jar库(jar_v2)版本...宿主工程中不允许jar库的升级,只能使用jar_v1版本。...编译工程时候出现了Analyzer5.3.0 Crash异常 分析原因:dart-lang 在build_runner之前默认会做代码检测任务(依赖analyzer),analyzer在这个时候升级到高版本导致...,解决办法: 升级本地flutter sdk 强制指定一个固定旧的analyzer版本 问题解决 工程pubspec.yaml文件中使用dependency_overrides指定固定版本,...^5.2.0 但是在很多时候,本地工程的flutter sdk版本,宿主版本中的jar包注定Flutter中三方库版本只能苟在一个低版本,无法更新,一更新就出错

69530

深入探索 Android Gradle 插件的缓存配置

以前,只有利用 Worker API 的任务可以同时运行,但是由于配置缓存可以确保任务独立且无法访问全局共享状态 (例如 Project 实例),因此可以默认启用此行为。...在此阶段结束,每个任务的状态都将被完全记录并保留下来。 在第二次构建,假设 Gradle 能够复用记录的缓存,则会加载所请求任务任务图、跳过 DSL 评估,任务配置等。...为了检测这类变更,构建系统会创建一个缓存任务使用的 build 文件的快照;此外,它还会检测 buildSrc 中是否有未更新的任务。...在使用配置缓存,为了保持每个任务完全独立,任务无法访问这一共享状态。...例如,在下面的示例中,我们不必强制要求 Handler 类型可被序列化,因为我们仅在需要才创建它: 旧代码 abstract class Mytask: DefaultTask() { private

2.3K20

深入了解gradle和maven的区别

还要注意不确定执行结果的任务,比如说同样的输入可能会得到不同的输出结果,那么这样的任务将不能够被配置为增量构建任务。...根据我们之前的介绍,大家可以发现gradle和maven从本质上来说就是不同的,gradle通过task的DAG图来组织任务,而maven则是通过attach到phases的goals来执行任务。...我们需要将maven的生命周期phase转换gradle的生命周期task。这里需要使用gradle的Base Plugin,Java Plugin和Maven Publish Plugin。...自动转换 我们除了可以使用 gradle init 命令来创建一个gradle的架子之外,还可以使用这个命令来将maven项目转换成为gradle项目,gradle init命令会去读取pom文件,并将其转换成为...strictly表示的是强制匹配特定的版本号,除了strictly之外,还有require,表示需要的版本号大于等于给定的版本号。prefer,如果没有指定其他的版本号,那么就使用prefer这个。

2.7K20

Gradle基础操作一

Copy 任务必须指定一组需要拷贝的文件和拷贝到的目录,这里使用CopySpec.from(java.lang.Object[])方法指定原文件;使用CopySpec.into(java.lang.Object...Zip,Tar,Jar,War 和Ear 任务来实现,不过它们的用法都一样,所以在这里我只介绍Zip 任务的示例。...在 gradle 7.0 已经移除 api java-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译和运行时。...#java_library_plugin 执行java 命令使用了哪些依赖范围的依赖 https://docs.gradle.org/current/userguide/java_plugin.html...方案二: exclude Gradle 也为我们提供了一系列的解决依赖冲突的方法: exclude 移除一个依赖,不允许依赖传递,强制使用某个版本。

31920

【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )

文章目录 一、Task#shouldRunAfter 函数 二、Task#shouldRunAfter 函数 、Task#mustRunAfter 函数、Task#dependsOn 函数 使用场景对比...函数 ---- Task#shouldRunAfter 函数的作用是为 Gradle 任务设置该任务执行时 , 应该在某个任务之后 ; Task#shouldRunAfter 函数原型 : TaskDependency...函数、Task#dependsOn 函数 使用场景对比 ---- Task#shouldRunAfter 函数 与 Task#mustRunAfter 函数 设置的任务 , 一般情况下先执行该设置的任务...函数 使用场景对比 : A.dependsOn B : 执行 A 任务 , 必须先执行 B , 否则 A 任务无法执行 ; A.mustRunAfter B : 如果需要执行 A 任务 , 则必须在...B 任务 ; 假如只需要执行 B 任务 , 也不需要考虑 A 任务 ; A.shouldRunAfter B : 如果需要执行 A 任务 , 则应该在 B 任务之后 ; A 任务 与 B 任务强制进行要求

41510

使用java开发logstash的filter插件

gradlew.bat 脚本是对 gradle 的封装,在执行该命令,会主动根据 gradle/wrapper/ 下的配置去下载 gradle 工具,然后再调用 gradle 进行构建模块 2....构建插件 在该项目的根目录下,创建 gradle.properties 文件,需要添加变量指定 logstash 下的 logstash-core 目录路径,使用绝对路径即可。...LOGSTASH_CORE_PATH=/logstash-core 该变量是给 build.gradle 文件中使用的。...单元测试 单测对插件来说至关重要,插件的规则转换流程、判断逻辑都非常多,各种类型的数据都可能导致插件出错,而插件验证需要编译、打包、安装再测试,流程较长,所以我们可以通过单测来减少以上流程的进行,在单测中就把所有的可能性都验证到...建议可以使用 junit 的参数化单测方式,可以提高单测的效率和数量。这个需要在 build.gradle 文件中的 dependencies 添加支持参数化的库来支持。 4.

1.2K20

使用Ionic3创建原生app系统入门

image.png 尝试使用cordova安装android插件还是出错。一周了也没有解决。网上查了无数资料,尝试未能解决问题。暂且放一放。或许后面就解决了呢。...目前遇到问题就是cordova platform add android指令过不去,无法添加android环境,就无法生成android的apk安装包,ios也是一样问题,但是不影响web访问。...使用同事的电脑尝试,无需安装java环境和android环境这一步是能通过的。 我们来看下ionic项目文件 ?...cordova帮助我们把webapp转换成真正的app,提供手机原生接口的插件。 学习前提,少量的node,npm操作知识。少量css样式基础。核心是angular开发知识。...成功生成了apk 这个apk拷贝到手机上无法安装,因为没有签名。

2K40
领券