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

Gradle基础操作一

Gradle的文件操作 本地文件: 使用 Project.file(java.lang.Object)方法,通过指定文件的相对路径或绝对路径来对文件的操作,其中相对路径为相对当前project[根project...文件中) // 依赖当前项目下的某个模块[子工程] implementation project(':subject01') 本地jar 依赖:依赖本地的某个jar包,具体可通过 文件集合、文件树的方式指定...由 java 插件提供,用于编译测试的依赖项,运行时不需要 testRuntimeOnly 由 java 插件提供,只在测试运行时需要,而不是在测试编译时需要,取代老版本中被移除的testRuntime...在 gradle 7.0 已经移除 api java-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。...插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。

37020

Gradle 提速:每天为你省下一杯喝咖啡的时间

前言 作为一名 Android 开发同学,当你的工程和代码达到一定规模的时候,相信你一定遇到过编译速度过慢的问题。比如: ? 等待编译的时间,仿佛过了一个世纪,有没有!...Scan,是一个很好的诊断工具,通过该工具可以很好的帮助你去分析和解决编译速度慢的问题。...在配置阶段避免执行一些耗时的工作,比如 IO 操作或者网络请求等 依赖解析 减少动态 (2.+) 版本和 SNAPSHOT 版本的依赖库,通常这种方式的依赖,会强制 Gradle 去远端仓库比对是否有新的变化...替代 compile,有效的减少编译时的依赖项,需升级至 Gradle 3.4 版本 增量编译,Gradle 可以将依赖关系分析到单个类级别,以便仅重新编译受更改影响的类。...Android Gradle 插件版本中被修复 注意二:在最新的 Android Studio 版本中,configuration on demand 已被移除 使用 WebP 格式的图片,有效减少图像文件大小

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

    教你一步步发布一个开源库到 JCenter

    需要使用一个存储于网上的 gradle 脚本文件来根据各种配置项来编译、打包项目。...有两种方式: 不使用 apply from,直接将脚本模板文件里的代码拷贝至 build.gradle 中,然后根据具体项目,手动修改每一个配置项(略麻烦,不推荐) 脚本模板文件中,每一个配置项都使用了对应的变量来配置...//例如:com.dasu.tv:tv:0.0.1,在build.gradle里就可以根据这个路径来compile依赖库了 //以下三项均是必配项 publishedGroupId...另外,你还可以通过在 build 文件夹下面查看是否有生成对应的文件来判断 gradlew install 脚本有没有成功执行。...那么这时候,你就可以愉快的在你的新项目中的 build.gradle 文件里直接通过 compile 来将你的开源库依赖到你项目中就可以了。

    2K140

    Gradle 的Dependencies

    本地 jar 依赖:本地 jar 文件依赖,一般包含以下两种方式 //直接依赖某文件 implementation files('libs/foo.jar', 'libs/bar.jar') //配置某文件夹作为依赖项...由 java 插件提供,用于编译测试的依赖项,运行时不需要 testRuntimeOnly 由 java 插件提供,只在测试运行时需要,而不是在测试编译时需要,取代老版本中被移除的 testRuntime...在 gradle 7.0 已经移除 api java-library 插件 提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。...取代老版本中被 移除的 compile compileOnlyApi java-library 插件 提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。...当然除此之外,Gradle 也为我们提供了一系列的解决依赖冲突的方法: exclude 移除一个依赖,不允许依赖传递,强制使用某个版本 Exclude 排除某个依赖 dependencies {

    1.4K20

    最新版gradle安装使用简介

    个人觉得有两个原因: 第一个原因是gradle安装文件和依赖包的网络环境,如果单单依靠国内的网络环境的话,非常难安装完成。...我们看两个task DAG的例子,一个是通用的task,一个是专门的编译java的例子: task可以依赖task,我们看个例子: task hello { doLast {...Gradle Wrapper 上面讲的是gradle的手动安装,如果是在多人工作的环境中使用了gradle,有没有什么办法可以不用手动安装gradle就可以自动运行gradle程序呢?...application plugin,使用的是jcenter的依赖仓库,还指定了几个具体的依赖项。...本文已收录于 http://www.flydean.com/gradle-kick-off/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    1.3K11

    Android Gradle插件

    classpath(依赖的名字)(当然也可以自己创建id) buildSrc 文件夹中构建脚本和 Gradle 插件同一项目均可见,因此同一项目中的其他模块也可以使用 buildSrc 中创建的插件...) 构建工具会根据每个build.gradle文件创建出一个Project实例,初始化阶段会执行项目根目录下的Settings.gradle文件,来分析哪些项目参与构建。...在编译项目时的一个 task,在 .class 文件转换成 .dex 的流程中会执行这些 task,对所有的 .class 文件(可包括第三方库的 .class)进行转换,转换的逻辑定义在 Transform...getInputType: 在项目中会有各种各样格式的文件,通过 getInputType 可以设置 LifeCycleTransform 接收的文件类型,此方法返回的类型是 SetGradle用处 gradle插件修改第三方代码 1、我们知道在打包过程中,可以通过动态修改字节码,来进行插桩,实现埋点等业务,那么,在什么时机插入呢?

    1.2K20

    读书笔记--Android Gradle权威指南(上)前言笔记

    根目录下的这个 build.gradle 是统筹全局的,在这里,你可以配置一些所有工程共同的配置项,比如 Android Gradle 的版本,依赖库的仓库地址这些所有工程的共同配置项。...我们要通过 Java 命令来执行某个 java 文件,那么至少需要一个类,类里面需要有 main 方法,这个 java 文件才能运行起来。...同样,要通过 gradle 命令来执行某个构建任务,那么至少需要一个 task,这个构建任务才能跑起来。 但更多的是不同的概念,多个类之间可以有相互依赖的关系,类中持有另一个类的引用等等。...但在 task 方面,多个 task 之间只能有前后依赖关系,即某个 task 的运行是否需要哪个 task 先运行的基础上才允许,也就是说,在 Gradle 的构建工作过程中,多个 task 是构成一条直线的...那为什么会一直在构建中,为什么会报错我们心里就有数了,要解决,没有其他办法,就是要将对应的版本下载下来。

    1.2K40

    Android厂商推送Plugin化 | 掘金技术征文-双节特别篇

    我们最后会在build/generated/下面生成一个资源文件gradleResValue.xml,它会在在编译时会被合并到项目资源文件内。...各位大佬,不知道有没有了解过Jake大神的ButterKnife的'com.jakewharton.butterknife'插件是如何生成R2的。...因为以前的Module内的R.Id因为都不是final的所以没有办法被注解所使用,这个时候Jake大神通过Hook了R文件生成的Task,然后copy了一份重新生成了一份R2. android.applicationVariants.all...但是在Demo开发阶段源码的编译方式会更适合我开发,所以如何将一个group+name+version更换成一个本地的Module呢??...TODO 我还是有个地方想做的,由于当前推送为了保证最少的依赖,所以就连OKHttp都没有直接引用,其实可以在Plugin内根据当前Projcet的dependencies中是否含有一些第三方库,然后根据这个来引入其中的一部分类似

    94550

    ARouter 拦截器之多 module 独立运行

    第一步:配置 gradle.properties 在gradle.properties 文件中添加如下代码 #是否需要单独运行某个模块 true:表示某个模块不作为依赖库使用 isSingleCircleModule...在app下的build.gradle文件配置 if (!...如果想将其中一个作为依赖库使用,那么就指匠情挑设置为false即可。...关于组件之间 AndroidManifest 合并问题 其实这个可以在正式打包的时候,注释掉module中的相关代码即可,毕竟是在组件模式。那有没有办法解决每次都要注释的问题呢?答案是yes....大致思路如下: 在可独立运行的module的res->main文件夹下新建一个文件夹(命名自定义),然后将对应的清单文件复制一份,名称不需要修改,内容的差别就是前面提到的,去掉application属性和默认启动配置项

    87740

    【Android】实现登录、注册、数据库操作(极简洁)

    首先看一下我这个Android程序的三级目录 我已经标注好顺序了 0 → 1 → 2 → 3 → 4 总共5步 步骤 0 编译,具体Gradle是个啥,我也不清楚,我只知道Android...是用Gradle进行编译的,编译的过程它会 一、检查Gradle自身程序是否可用或版本是否最新 二、启动各种我们桌面上看不见的程序,如果我没猜错的话,Gradle和Java、Python都差不多,大概就是一些...java.exe、javac.exe之类的 三、匹配各种依赖项,存在的检查完整性,不存在的去指定网站下载 步骤 1 解析注册XML,AndroidManifest.xml在Android中的作用和Windows...步骤 2 运行Activity,所谓Activity 翻译为 :活动、界面 一个Activity就是一个运行界面,AndroidStudio会启动在AndroidManifest.xml中被设置为 MAIN...步骤 3 解析布局XML,在每个Activity创建(onCreate)时都会加载自己的xml布局文件,这些xml布局文件定义了对应Activity长什么样子。

    2.2K10

    关于 ASP.NET 内存缓存你需要知道的 10 点

    这里,内存缓存时通过依赖注入来启用的,因此第一步就是在 Startup 类中注册内存缓存的服务。...该变量会被构造器中被赋值。构造器会通过 DI(依赖注入)接收到缓存参数,然后被存储在本地变量总,提供后续使用。 3....上述代码在 Index() 这个 action 中设置了一个缓存项。这是通过使用 IMemoryCache 的 Set() 来完成的。Set() 方法的第一个参数是键名,用来标识该数据项。...如果 Get() 不能在缓存中找到指定的数据项,IsNullOrEmpty() 就会返回 true。而只有这时候 Set() 才会被调用,一次来添加数据项。 第二种办法更加优雅一点。...它使用 TryGet() 方法来获取一个数据项。TryGet() 方法会返回一个布尔值来指明数据项有没有被找到。实际的数据项可以使用一个输出参数拉取出来。

    1.2K20

    Gradle 进阶学习 之 Task

    识别与包含:只有当子项目在settings文件中被配置后,Gradle才能识别它们,进而在构建过程中将它们包含进来。...无论是编译代码、测试、打包还是部署,这些操作都是通过执行定义好的任务来完成的。 任务的依赖性:任务可以相互依赖,这意味着某些任务只有在其他任务完成后才能执行。...通过任务输入输出 Gradle 也允许你通过定义任务的输入和输出文件来指定执行顺序。Gradle 会根据这些文件的存在与否来决定是否需要执行任务。...3.8.2 动态添加依赖项 一旦任务被注册,你可以通过 Gradle 提供的 Task API 在运行时动态地修改任务的行为,包括添加依赖项。...Task 对象的 onlyIf 方法允许你提供一个闭包,这个闭包将作为决定任务是否执行的条件。如果闭包返回 true,则任务将执行;如果返回 false,则任务将被跳过。

    29210

    第九章 Android Gradle高级自定义

    只要知道它的名字,我们就可以使用useLibrary把他们添加到classpath,这样我们的编译就可以通过了。...有没有发现,和我们在res/values这个文件夹里定义的xml文件的格式是一样的,只不过我们通过Gradle配置,Android Gradle帮我们自动做到了,这样我们控制Android Gradle...有时候我们安装、运行或者调试的时候,可能会遇到CommandRejectException这样的异常,这个一般是当我们执行一个命令的时候,在规定的时间内没有返回应有的结果,这时候我们可以通过把超时时间设置长一些来解决...9.10 dex选项配置 我们都知道,我们的Android中的Java源代码,被编译成class字节码后,在我们打包成APK的时候又被dx命令优化成Android虚拟机可执行的DEX文件,DEX文件比较紧凑...现在我们了解了原理了,也知道通过-J参数重新配置更大的内存就可以解决这个问题,但是我们在Android Gradle插件中怎么配置这个内存呢?

    1.7K10

    gradle安装使用简介

    个人觉得有两个原因: 第一个原因是gradle安装文件和依赖包的网络环境,如果单单依靠国内的网络环境的话,非常难安装完成。...我们看两个task DAG的例子,一个是通用的task,一个是专门的编译java的例子: task可以依赖task,我们看个例子: task hello { doLast {...Gradle Wrapper 上面讲的是gradle的手动安装,如果是在多人工作的环境中使用了gradle,有没有什么办法可以不用手动安装gradle就可以自动运行gradle程序呢?...application plugin,使用的是jcenter的依赖仓库,还指定了几个具体的依赖项。...默认情况下gradle有自己的本地仓库,一般在~/.gradle目录下面,如果我们之前用的是maven仓库,那么在本地的maven仓库中已经存在了很多依赖包了,如何重用呢?

    59520

    Android 12 自动适配 exported 深入解析避坑

    然而这个事情的状态是这样的: 如果出现问题的 AndroidManifest 文件是你本地的,那手动修改即可; 但如果出现问题的是第三方远程依赖,并且对方并没有提供源码和更新,你就无法直接修改; 如果第三方依赖太多...下执行,也可以单独放到一个 gradle 文件之后 apply 引入,它的作用就是: 在打包过程中检索所有没有设置 exported 的组件,给他们动态配置上 exported,这里有个特殊需要注意的是...; XmlParser 类找不到,这个首先确定 AGP 版本和 Gradle 版本是否匹配,具体可见 gradle-plugin,另外可以通过 groovy.util.XmlParser 或者 groovy.xml.XmlParser...gradle:4.1.0 以及其下版本安装 apk 到 Android12 的机器上, 有 intent-filter 但没有 exoprted 的适配问题,基于这个问题,不知道各位是否有什么好的建议...对象中更改其路径来完成,不知道大家有没有什么比较好的思路 。

    1.6K30

    Gradle For Android(3)--管理依赖关系

    Gradle甚至解决了依赖项是自己的问题,这种依赖关系被称之为Transitive Dependencies。 这一章会介绍以来管理并且解释Android Project中添加依赖关系的几种办法。...gradle.properties来保存,避免被人看到 本地仓库 在本地硬盘或者网络硬盘上可以构建一个Maven或者Ivy的仓库。...中include library工程 文件依赖 添加Jar文件,我们可以使用Gradle提供的file和fileTree方法来添加单个或者整个文件目录作为依赖,或者通过include来过滤其他的文件:...每一个配置都不仅仅会添加到classpath中,而是会被添加到APK中。 apk配置项仅仅会把依赖库添加到包中,而不会把它添加到编译的classpath中。...动态版本 在某些情况下,你可能需要每次都是用最新的依赖库来构建App或者Lib。

    1.5K30

    最新版gradle安装使用简介

    个人觉得有两个原因: 第一个原因是gradle安装文件和依赖包的网络环境,如果单单依靠国内的网络环境的话,非常难安装完成。...有了这个DAG,gradle就可以决定各个task的顺序,并执行他们。 我们看两个task DAG的例子,一个是通用的task,一个是专门的编译java的例子: ?...Gradle Wrapper 上面讲的是gradle的手动安装,如果是在多人工作的环境中使用了gradle,有没有什么办法可以不用手动安装gradle就可以自动运行gradle程序呢?...application plugin,使用的是jcenter的依赖仓库,还指定了几个具体的依赖项。...默认情况下gradle有自己的本地仓库,一般在~/.gradle目录下面,如果我们之前用的是maven仓库,那么在本地的maven仓库中已经存在了很多依赖包了,如何重用呢?

    1.1K31

    Gradle的一些技巧和遇到的问题

    2. minifyEnabled 设置为true时shrinkResources 的设置才会生效 全局变量的使用 在多个module的情况下,不同module的build.gradle文件中有部分配置项类似...在项目根目录的build.gradle文件中添加以下代码和android{}同级 ext { //全局变量控制,可在module中的build.gradle文件通过rootProject.ext.xxx...productFlavors来实现应用的不同定制版本,每一个Flavor与buildTypes配合产出对应的一种输出类型的apk文件,新建的项目初始化只有一个默认的Flavor:defaultConfig...离线工作 在gradle中引用第三方模块时采用maven方式依赖,每次打开Android Studio或者点击sync按钮时,都会去maven中央仓库去取第三方的库文件,一般是jar或者aar文件。...gradle.properties文件中设置一个isRunAlone的变量来区分不同的场景,在组件的build.gradle开头这样写: if(isRunAlone.toBoolean()){

    1.9K30

    Gradle 命令行黑魔法

    本人从maven转到Gradle,深深被gradle强大的命令行功能折服。通过命令行来实现Gradle的各种特性,就像魔法师在表演魔法一样。 日志输出。 Gradle中的日志有6个层级。...但是有时候我们想指定使用某个gradle文件,那么可以使用-b命令。 比如当前目录有个子目录subproject1,里面有个叫hello.gradle。...image.png 查看指定dependency的依赖情况。 假如我想查看项目中有没有引入junit,那些阶段引入了junit,那么可以使用dependecyInsight来查看。...如果你想知道某个task执行时那些task会被一起执行,但是你又不想真正的执行这些task,可以使用-m来试运行。...第一次运行Gradle命令,会在项目更目录下生成一个.gradle目录来存放编译后的脚本。只有当构建脚本发生修改时采用重新编译。我们可以使用--recompile-scripts来强行重新编译。

    95350

    货拉拉 Android 模块化路由框架:TheRouter

    如果编译期没有这个文件,会生成一份默认路由表放在这个目录内;如果有,会将路由表合并。 路由表生成时可配置是否启用检查路由合法性,判断目标页面是否存在,(warning/error)级别。...,对于没办法修改代码的第三方SDK内部,如果希望通过路由打开,只需要手动在RouteMap.json文件中声明,就能通过路由打开了。...5.3 实现原理每个加了 @FlowTask 注解的方法,都会在编译期被解析,生成一个对应的 Task 对象,这个对象包含了初始化方法的相关信息,比如:是否异步执行、任务名、是否依赖其他任务先执行。...当所有aar都编译完成,生成好全部的 Task 以后,会在主 app 中通过Gradle插件进行聚合,在这时会将所有的 Task 做一次检查,通过构建有向无环图来防止 Task 发生循环引用的情况。...TheRouter 中提供了一个 Gradle 脚本,只需要在开发本地的local.properties文件中声明要参与编译的module,其他未声明的默认使用aar编译,这样就能灵活切换源码与aar,

    1.8K40
    领券