Android 导入第三方库的三种方式

Android 导入第三方库的三种方式 一:介绍
三种方式:Gradle 抓取 ,libs导入,源码导入
二:Gradle 抓取
Gradle 抓取的方法最简单,只需要在Project->app文件夹下的build.gradle文件添加依赖:
Android 导入第三方库的三种方式
文章图片

在build.gradle文件中添加依赖
Android 导入第三方库的三种方式
文章图片

Android Studio 默认依赖库是google(),jcenter(),我们还能添加Maven仓库的依赖

allprojects { repositories { google() jcenter() mavenCentral() maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }//个推的maven镜像依赖 maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }//阿里云的maven } }

上面使用implementation ,还有compile 和api的区别
首先是2.x版本的依赖方式:
Android 导入第三方库的三种方式
文章图片

再来看看3.0的:
Android 导入第三方库的三种方式
文章图片

对比可以看到,Android 3.0中,compile依赖关系已被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代。
implementation:使用了该命令编译的依赖,它仅仅对当前的Module提供接口。
Android 导入第三方库的三种方式
文章图片

LibraryA 中引用了 LibraryC 的库,如果LibraryA 中对 LibraryC的依赖用的是 implementation关键字。 如下:
dependencies { . . . . implementation project(path:':libraryC') }

那么LibraryC中的接口,仅仅只能给LibraryA使用,而我们的 App Module 是无法访问到LibraryC 提供的接口的,也就是将该依赖隐藏在内部,而不对外部公开。这就是implementation关键字的作用。
api(类似于之前的compile)可以提供给外部使用
等同于原有的compile,此依赖配置,使Gradle意识到,其引入的依赖模块,无论在编译期还是在运行时,都对其他上层模块可见,即通过api配置引入的依赖模块,在依赖关系上具有传递性。这将会使得其他上层模块可以直接使用依赖模块的Api,但这同时意味着一旦依赖模块发生Api的改动,将导致所有已经使用了此依赖模块改动了的Api的上层模块都需要重新执行编译
问题:
Android依赖会发生依赖冲突问题,jar包中已经添加了某个依赖,我们项目有添加某个依赖
例如:
api 'cn.bmob.android:bmob-sdk:3.6.6'
初见Unable to merge dex
改了Gradle必然要编译,于是随手点了Sync后就去打水上厕所了,美滋滋的回来后发现,纳尼?一片血红色在我的Build栏目下,仔细一看:
Caused by: com.android.dex.DexException: Multiple dex files define Lcom/google/gson/internal/bind/TypeAdapters;

这里的意思就是说,重复的dex文件出现在了TypeAdapters这个类了,然后就利用AndroidStudio的强大的查询功能,
Android 导入第三方库的三种方式
文章图片

可以看到,这个类在com.google.code.gson和cn.bmob.android这两个Gradle的依赖里都出现了,这就是所谓的重复依赖或者依赖冲突或者Jar包冲突了,其实就是Bmob的SDK里已经自己集成了gson和okio这两个jar了,而我自己在项目中也用到了这两个jar包,从而导致了依赖冲突。
解决方案:
除了删除冲突包外,我们还可以用Gradle的 exclude group 将指定的包名排除到编译范围外
//bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk: implementation ('cn.bmob.android:bmob-sdk:3.5.5'){ // gson-2.6.2 exclude group: 'com.squareup.okhttp3'//等价于exclude group: 'com.squareup',module:'okhttp3' exclude group: 'com.squareup.okio' exclude group: 'com.google.code.gson' //exclude(module: 'gson')// 防止版本冲突 }

三:libs 导入
将网上下载对应的第三方库的jar包放入Project-->app文件夹下的libs文件夹下:
Android 导入第三方库的三种方式
文章图片

然后在单击jar包右键,选择“Add as library...”可实现导入;或者在我们上述的build.gradle文件中添加依赖:
Android 导入第三方库的三种方式
文章图片

dependencies { implementation fileTree(dir: 'libs',includes: ['*.jar','*.aar']) implementation files('libs/cglib-for-android.jar') }

方式二:
在module的build.gradle先添加
android { 。。。。。。。} //与dependencies同一级别 //然后在dependencies中添加 repositories { flatDir { dirs 'libs' } }dependencies { implementation(name:'cglib-for-android',ext:'jar') implementation(name:'xx', ext:'aar')//这是arr包 }

四:源码导入
源码导入的方法最大的优点受益于开源,我们可以通过项目中的需求,对第三方库的源码进行直接修改。首先我们下载第三方库的源码到本地,将源码解压到我们项目的根目录:
Android 导入第三方库的三种方式
文章图片

应用其他模块的直接
dependencies { implementation project(path: ':common_base') }

在settings.gradle添加新导入的项目名称:
include ':module_red' include ':module_goods' include ':module_free' include ':module_me' include ':module_login' include ':common_base'//依赖 include ':app' rootProject.name = "KuaiLaiTao"

【Android 导入第三方库的三种方式】结尾:也许终点只有绝望和失败,但这绝不是停止前行的理由。

    推荐阅读