Android学习笔记

文章目录

  • Android学习笔记
  • 第1章 Android应用和开发环境
  • 1.2 使用Gradle自动化构建项目
  • 1.2.6 依赖管理


疯狂Android讲义

第1章 Android应用和开发环境

1.2 使用Gradle自动化构建项目
1.2.6 依赖管理

在构建Java项目时通常都要依赖一个或多个框架,Gradle既可像Maven那样从仓库(远程仓库和本地仓库都行)中下载所依赖的JAR包,也可像Ant那样直接引用项目路径下的JAR包,非常方便。【66666】

为Gradle配置依赖大体上需要两步。

  • ①为Gradle配置仓库。配置仓库的目的是告诉Gradle到哪里下载JAR包。
  • ②为不同的组配置依赖JAR包。配置依赖JAR包的目的是告诉Gradle要下载哪些JAR包。

第1步是为了告诉Gradle从哪里下载所依赖的JAR包,需要为Gradle配置仓库,Gradle可以直接使用Maven中央仓库,也可以使用Maven本地仓库,还可以使用本地磁盘路径作为Maven仓库。

如果需要使用Maven中央仓库,那么只要在build.gradle文件中增加如下配置即可。

// 定义仓库
repositories{
    // 使用Maven默认的中央仓库
    mavenCentral()
}

Android应用开发文档 android应用开发项目_android

有时候在国内通过Maven中央仓库下载JAR包速度太慢,开发者可能希望使用Maven中央仓库的国内镜像,Gradle也允许显式指定Maven仓库的URL。例如如下配置。

// 定义仓库
repositories{
    // Maven远程仓库
    maven{
        // 显式指定Maven仓库的URL
        url "https://repo1.maven.org/maven2"
    }
}

Android应用开发文档 android应用开发项目_学习_02

Gradle还允许直接使用本地磁盘路径作为Maven仓库。例如如下配置。

// 定义仓库
repositories{
    //Maven本地仓库
    maven{
        // 显式指定本地磁盘路径作为Maven仓库的URL
        url "D:/Develop/Java/maven-repository"
    }
}

Android应用开发文档 android应用开发项目_自动化_03

第2步是为了告诉Gradle需要下载哪些JAR包,并为不同的组配置数量不等的JAR包。

关于什么是“组”,这是由现代软件项目的特征决定的,很多时候,同一个项目在编译时依赖某一组JAR包;在运行时可能依赖另一组JAR包;在测试时可能又依赖其他JAR包,因此允许使用不同的组来区分不同的JAR包。【没毛病】

Gradle使用configurations来配置组。例如如下代码即可配置一个组。

configurations{
    // 配置名为dingjiaxiongDependency的依赖组
    dingjiaxiongDependency
}

接下来就可以为依赖组配置数量不等的JAR包,Gradle使用dependencies来为依赖组配置JAR包。

与在Maven中指定JAR包的方式相同,配置JAR包同样需要指定3个信息。

  • JAR包所属的组织名:通过group指定。
  • JAR包的名称:通过name指定。
  • JAR包的版本:通过version指定。

如下配置为dingjiaxiongDependency依赖组添加了commons-logging 1.2的JAR包。

dependencies{
    // 配置依赖JAR包
    dingjiaxiongDependency group:'commons-logging', name:'commons-logging',version:'1.2'
    // 简写为如下形式
    dingjiaxiongDependency 'commons-logging:commons-logging:1.2'
}

简写形式也是实际开发中使用最多的形式。group、name、version属性写成一个字符串,中间以英文冒号隔开即可。

如果在为依赖组添加JAR包之后需要进行额外配置,则可使用闭包。例如如下配置代码。

Android应用开发文档 android应用开发项目_自动化_04

大部分时候,依赖组总是需要添加多个JAR包,此时既可通过多次调用dingjiaxiongDependency来添加多个依赖JAR包,也可使用数组形式一次添加多个JAR包。

例如如下配置。

dingjiaxiongDependency 'commons-logging:commons-logging:1.2','org.apache.commons:commons-dbcp2:2.2.0'

在定义好该依赖之后,接下来即可在任务中使用该依赖了。

下面定义一个简单的任务来查看dingjiaxiongDependency所依赖的JAR包

task showDingjiaxiongDependency{
    doLast{
        // 输出dingjiaxiongDependency 所依赖的JAR包
        println configurations.dingjiaxiongDependency.asPath
    }
}

执行命令 gradle showDingjiaxiongDependency

Android应用开发文档 android应用开发项目_Android应用开发文档_05

它会先去中央仓库下载下来。

Android应用开发文档 android应用开发项目_学习_06

默认放C盘了

Android应用开发文档 android应用开发项目_Gradle_07

修改一下,C盘可经不起这样搞

  1. 创建存储jar包的目录,比如笔者这里
    D:\gradle\cache
  2. 新增环境变量GRADLE_USER_HOME

删了C盘里面下的东西再执行一次

Android应用开发文档 android应用开发项目_android_08

OK,现在就舒服了。

Android应用开发文档 android应用开发项目_Gradle_09

从输出结果可以看到,Gradle从Maven中央仓库下载了commons-logging的JAR包和commons-dbcp2的JAR包,由于commons-dbcp2的JAR包又依赖commons-pool2的JAR包,因此Gradle还下载了commons-pool2的JAR包。

在实际项目开发中,通常并不需要自己配置依赖组,因为当应用jva插件之后,该插件默认已经添加了多个依赖组,其中常用的依赖组有如下几个。

  • implementation:主项目源代码(src/main/java)所依赖的组。这个依赖组很常用。
  • compileOnly:主项目源代码(src/main/java)编译时才依赖的组。
  • runtimeOnly:主项目源代码(src/main/java)运行时才依赖的组。
  • testImplementation:项目测试代码(src/test/java)所依赖的组。
  • testCompileOnly:项目测试代码(src/test/java)编译时才依赖的组。
  • testRuntimeOnly::项目测试代码(src/test/java)运行时才依赖的组。
  • archives:项目打包时依赖的组。

对于上面这些常用的依赖组,我们可以根据需要为不同的依赖组添加JAR包。比如为项目的编译、运行添加依赖JAR包,则为implementation组添加JAR包即可;为项目的测试添加依赖JAR包,则为testImplementation组添加JAR包即可。

假如在项目的源代码中同时用到了commons-logging、commons–dbcp2两个JAR包中的类,为了保证该项目可正常编译、运行,则需要为implementation组增加如下配置。

// 以数组形式添加多个jar包
implementation 'commons-logging:commons-logging:1.2',"org.apache.commons:commons-dbcp2:2.2.0"

这样该项目中的Java类即可正常使用这两个JAR包所包含的类。比如在src/main/java目录下增加一个HelloWorld类,该类完全可以使用commons-logging、commons-dbcp2所包含的类。

接下来为项目添加application插件,并通过mainClassName属性指定主类之后,即可通过gradle run命令运行HelloWorld类。

package dingjiaxiong;

import org.apache.commons.logging.Log;
import org.apache.commons.dbcp2.BasicDataSource;

public class HelloWorld
{
	public static void main(String[] args)
	{
		Log log;
		BasicDataSource ds = new BasicDataSource();
		System.out.println("数据源:" + ds);
	}
}

gradle run

Android应用开发文档 android应用开发项目_android_10

虽然有点乱码,但是还是运行成功了

【解决一下乱码】

Android应用开发文档 android应用开发项目_自动化_11

再试一次

Android应用开发文档 android应用开发项目_Android应用开发文档_12

OK,没问题了

或者直接改一下gradle.bat

Android应用开发文档 android应用开发项目_自动化_13

再试一次

Android应用开发文档 android应用开发项目_自动化_14

OK, 没用【环境变量删了】

Android应用开发文档 android应用开发项目_学习_15

算了,姑且这样吧