热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidGradle依赖管理、去除重复依赖、忽略的方式

这篇文章主要介绍了AndroidGradle依赖管理、去除重复依赖、忽略的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

常用依赖

 //1.直接依赖第三方开源库,一般是托管在 jitpack 或者 jcenter
 implementation 'com.google.code.gson:gson:2.2.4'
 implementation 'com.android.support:cardview-v7:25.0.0'
 implementation 'com.android.support:design:25.0.0'
 //2.直接依赖本地的aar文件,一般是在libs目录下
 implementation(name: 'LiteAVSDK_Professional_5.1.5293', ext: 'aar')
 //3.直接依赖本地的jar文件
 implementation files('libs/bdasr_V3_20170801_60da871.jar')
 //4.依赖本地的model
 implementation project(':wavelibrary')
 implementation project(':android-ffmpeg')

库工程依赖传递问题

1、依赖常用的基本类型有:provided和compile,provided 只在编译生效不会打包到 apk 或 aar 中;compile 是会打包到 apk或 aar 中的(如果是库工程的话有特殊情况,参考下面3).

2、app 工程的当前(compile+) 的依赖都会打包到 app 中

3、库工程中:

1) jar 包:远程依赖不会打包到 aar 中;本地依赖会;

2) aar:远程和本地都不不会打包到 aar中.

3) 如果你要提供你的库工程的 aar 给他人,你需要同时告诉他这个库工程依赖的其他aar 和远程 jar包(因为他们没有打包到 aar 中)

4) 如果通过工程依赖(即compile project(':lib')的方式), 依赖是可以传递的,所以不需要在声明一次依赖.

去掉重复依赖

1.第三方库中同样使用了implementation或者compile依赖相同的库

  implementation('com.allenliu.versionchecklib:library:2.0.5') {
    exclude group: 'com.android.support', module: 'appcompat-v7'
    exclude group: 'com.android.support.constraint', module: 'constraint-layout'
    exclude group: 'org.greenrobot', module: 'eventbus'
    exclude group: 'com.squareup.okhttp3', module: 'okhttp'
  }

2.在不同的库中出现相同的so文件

pickFirst只会打包第一个遇到的冲突的so,merge(碰到冲突会合并)和exclude(直接排除匹配到的文件,不建议使用)

 packagingOptions {
      pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
      pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
    }

遇到这种错误可以通过上面方法尝试解决

Error:Execution failed for task ‘:app:transformNativeLibsWithMergeJniLibsForDebug'. > More than one

补充知识:Gradle依赖的统一管理,解决依赖冲突

看见别人在用implementation rootProject.ext.dependencies["xxxx"]不知道是什么意思,上网查了一下,原来是为了解决或者说预防gradle依赖冲突的问题。

在项目开发中我们会经常引入多个Module,然而每个Module中又包含了V4、V7,为了升级新版本依赖包只用更改一次,我们决定采用Gradle依赖的统一管理,避免重复繁琐的劳动。

记录get到的新知识,用法如下:

1.在Project目录下新建config.gradle文件,文件名可自定义

具体内容如下:

ext {

  android = [
      compileSdkVersion    : 27,
      buildToolsVersion    : "27.0.0",
      minSdkVersion      : 21,
      targetSdkVersion    : 27,
      versionCode       : 6,
      versionName       : "1.2.2",
      renderscriptTargetApi  : 21
  ]

  version = [
      supportLibraryVersion  : "26.1.1",
      okhttpVersion      : "3.9.0",
      retrofitVersion     : "2.3.0",
      glideVersion      : "4.0.0",
      butterknifeVersion   : "8.8.1",
      fragmentationVersion  : "1.1.9",
  ]

  dependencies = [
      //base
      "appcompat-v7"           : "com.android.support:appcompat-v7:${version["supportLibraryVersion"]}",
      "cardview-v7"            : "com.android.support:cardview-v7:${version["supportLibraryVersion"]}",
      "design"              : "com.android.support:design:${version["supportLibraryVersion"]}",
      "constraint-layout"         : "com.android.support.constraint:constraint-layout:1.0.2",

      //net
      "gson"               : "com.google.code.gson:gson:2.8.2",
      "okhttp"              : "com.squareup.okhttp3:okhttp:${version["okhttpVersion"]}",
      "logging-interceptor"        : "com.squareup.okhttp3:logging-interceptor:${version["okhttpVersion"]}",
      "retrofit"             : "com.squareup.retrofit2:retrofit:${version["retrofitVersion"]}",
      "converter-gson"          : "com.squareup.retrofit2:converter-gson:${version["retrofitVersion"]}",
      "adapter-rxjava2"          : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitVersion"]}",

      //dao
      "greendao"             : "org.greenrobot:greendao:3.2.2",

      //rx
      "rxjava"              : "io.reactivex.rxjava2:rxjava:2.1.5",
      "rxandroid"             : "io.reactivex.rxjava2:rxandroid:2.0.1",
      "rxbinding"             : "com.jakewharton.rxbinding2:rxbinding:2.1.0",
      "rxpermissions"           : "com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar",

      //di
      "javax_annotation"         : "org.glassfish:javax.annotation:10.0-b28",
      "butterknife"            : "com.jakewharton:butterknife:${version["butterknifeVersion"]}",
      "butterknife-compiler"       : "com.jakewharton:butterknife-compiler:${version["butterknifeVersion"]}",

      //multidex
      "multidex"             : "com.android.support:multidex:1.0.3",

      //kotlin
      "kotlin-stdlib"           : "org.jetbrains.kotlin:kotlin-stdlib:1.2.10",

      //ui test
      "espresso-core"           : "com.android.support.test.espresso:espresso-core:3.0.2",
      "espresso-idling-resource"     : "com.android.support.test.espresso:espresso-idling-resource:3.0.2",

      //unit test , 为了整合mockito和PowerMockito,mockito暂时最高只支持2.8.9
      "junit"               : "junit:junit:4.12",
      "mockito"              : "org.mockito:mockito-core:2.8.9",
      "powermock-module-junit4"      : "org.powermock:powermock-module-junit4:1.7.4"

  ]

}

2.在Project的build.gradle中添加

apply from: "config.gradle"

3.在modle的build.gradle中添加引用

apply plugin: 'com.android.application'

android {
  compileSdkVersion rootProject.ext.android["compileSdkVersion"]
  buildToolsVersion rootProject.ext.android["buildToolsVersion"]

  defaultConfig {
    applicationId "json.chao.com.wanandroid"
    minSdkVersion rootProject.ext.android["minSdkVersion"]
    targetSdkVersion rootProject.ext.android["targetSdkVersion"]
    versionCode rootProject.ext.android["versionCode"]
    versionName rootProject.ext.android["versionName"]
    //AndroidJunitRunner必须要显示指定在defaultConfig中,使用Gradle依赖管理无法使其生效
    testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    renderscriptTargetApi rootProject.ext.android["renderscriptTargetApi"]
    renderscriptSupportModeEnabled true  // Enable RS support
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
  }
}


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

    //base
    implementation rootProject.ext.dependencies["appcompat-v7"]
    implementation rootProject.ext.dependencies["cardview-v7"]
    implementation rootProject.ext.dependencies["design"]
    implementation rootProject.ext.dependencies["constraint-layout"]

    //net
    implementation rootProject.ext.dependencies["gson"]
    implementation rootProject.ext.dependencies["okhttp"]
    implementation rootProject.ext.dependencies["retrofit"]
    implementation rootProject.ext.dependencies["converter-gson"]
    implementation rootProject.ext.dependencies["adapter-rxjava2"]

    //dao
    implementation rootProject.ext.dependencies["greendao"]

    //rx
    implementation rootProject.ext.dependencies["rxjava"]
    implementation rootProject.ext.dependencies["rxandroid"]
    implementation rootProject.ext.dependencies["rxbinding"]
    implementation rootProject.ext.dependencies["rxpermissions"]

    //UI测试
    androidTestImplementation (rootProject.ext.dependencies["espresso-core"]) {
      exclude group: 'com.android.support', module: 'support-annotations'
    }
    implementation (rootProject.ext.dependencies["espresso-idling-resource"]) {
      exclude module: 'support-annotations'
    }
}

(两个文件中有不对应的依赖方法,that's ok, 只是粘贴代码的时候删除了一些,知道用法就行了)

以上这篇Android Gradle依赖管理、去除重复依赖、忽略的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
author-avatar
睫毛弯弯黄小牛为
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有