开发中我们常常会需要用到第三方库来实现某些功能,可以避免重复造轮子,提高开发效率。

在 Android 中,JAR 包可以说是一代元老了,因为在 2017 Google IO 大会以前,Java 作为唯一的 Android 原生开发语言,以及在『Eclipse』的统治下,JAR 包是最通用的第三方库流通方式。

JAR 是一种归档文件,以 ZIP 格式构建,全称是 Java Archive。与 ZIP 不同的是,JAR 不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 Manifest 和部署描述符,用来指示工具如何处理特定的 JAR。

正是由于过去十几年『Eclipse』的影响,在『Android Studio』中导入 JAR 包也非常简单。

首先,当然要将 JAR 文件放到项目中,置于 Module 的「libs」目录下,我这里以开源库 Gson 为例。

在「Android」视图下,「libs」目录是默认不显示的:

Android 视图目录

我们无需新建该文件夹,只需切至「Project」视图即可:

Project 视图目录

接着是添加依赖,将 JAR 复制到「libs」目录后,鼠标对该 JAR 包右键菜单,点击「Add As Library...」:

Add As Library

并选择导入的 Module:

Create Library

确定后,Gradle 会自动帮我们同步依赖。

你可以看到 Module 的「build.gradle」文件中自动添加了对应的内容:

dependencies {
    ...
    implementation files('libs/gson-2.8.6.jar')
}

当你有多个 JAR 包需要导入时,其实并不需要对每个 JAR 包都进行上述操作,你可以使用一行代码导入该 Module 下所有 JAR 包:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...
}

这行代码的意思就是将「libs」目录下所有的 JAR 文件添加依赖,只需在添加 JAR 包后同步 Gradle 即可。

你可能会想,那直接用第二种方法不就好了吗,多方便是不是?

这就要考虑 Module 的依赖传递关系了,可以参考『Android Gradle Plugin 依赖项配置』一文,当有多个 JAR 包需要导入,但需要使用不同的依赖项配置时,就需要分别导入。

所以应当根据合适的场景使用合适的导入方式。