关于android:Android-导入第三方库的三种方式

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

一:介绍
三种形式:Gradle 抓取 ,libs导入,源码导入
二:Gradle 抓取
Gradle 抓取的办法最简略,只须要在Project->app文件夹下的build.gradle文件增加依赖:

在build.gradle文件中增加依赖

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版本的依赖形式:

再来看看3.0的:

比照能够看到,Android 3.0中,compile依赖关系已被弃用,被implementation和api代替,provided被compile only代替,apk被runtime only代替。
implementation:应用了该命令编译的依赖,它仅仅对以后的Module提供接口。

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的弱小的查问性能,

能够看到,这个类在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文件夹下:

而后在单击jar包右键,抉择“Add as library…”可实现导入;或者在咱们上述的build.gradle文件中增加依赖:

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包
}

四:源码导入
源码导入的办法最大的长处受害于开源,咱们能够通过我的项目中的需要,对第三方库的源码进行间接批改。首先咱们下载第三方库的源码到本地,将源码解压到咱们我的项目的根目录:

利用其余模块的间接

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"

结尾:兴许起点只有失望和失败,但这绝不是进行前行的理由。

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元

阿里云限时活动-1核2G-1M带宽-40-100G ,特惠价87.12元/年(原价1234.2元/年,可以直接买3年),速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

You may also like...

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据