常用依赖

 //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依赖管理、去除重复依赖、忽略的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持Devmax。

Android Gradle依赖管理、去除重复依赖、忽略的方式的更多相关文章

  1. html5 canvas合成海报所遇问题及解决方案总结

    这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Html5 video标签视频的最佳实践

    这篇文章主要介绍了Html5 video标签视频的最佳实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题

    HTML5在微信内置浏览器下,在右上角菜单的调整字体导致页面显示错乱的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  4. ios – containerURLForSecurityApplicationGroupIdentifier:在iPhone和Watch模拟器上给出不同的结果

    我使用默认的XCode模板创建了一个WatchKit应用程序.我向iOSTarget,WatchkitAppTarget和WatchkitAppExtensionTarget添加了应用程序组权利.(这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOSApp和WatchKitExtension访问共享文件夹URL:延期:iOS应用:但是,测试NSURL

  5. Ionic – Splash Screen适用于iOS,但不适用于Android

    我有一个离子应用程序,其中使用CLI命令离子资源生成的启动画面和图标iOS版本与正在渲染的启动画面完美配合,但在Android版本中,只有在加载应用程序时才会显示白屏.我检查了config.xml文件,所有路径看起来都是正确的,生成的图像出现在相应的文件夹中.(我使用了splash.psd模板来生成它们.我错过了什么?这是config.xml文件供参考,我觉得我在这里做错了–解决方法在config.xml中添加以下键:它对我有用!

  6. ios – 无法启动iPhone模拟器

    /Library/Developer/CoreSimulator/Devices/530A44CB-5978-4926-9E91-E9DBD5BFB105/data/Containers/Bundle/Application/07612A5C-659D-4C04-ACD3-D211D2830E17/ProductName.app/ProductName然后,如果您在Xcode构建设置中选择标准体系结构并再次构建和运行,则会产生以下结果:dyld:lazysymbolbindingFailed:Symbol

  7. Xamarin iOS图像在Grid内部重叠

    heyo,所以在Xamarin我有一个使用并在其中包含一对,所有这些都包含在内.这在Xamarin.Android中看起来完全没问题,但是在Xamarin.iOS中,图像与标签重叠.我不确定它的区别是什么–为什么它在Xamarin.Android中看起来不错但在iOS中它的全部都不稳定?

  8. 在iOS上向后播放HTML5视频

    我试图在iPad上反向播放HTML5视频.HTML5元素包括一个名为playbackRate的属性,它允许以更快或更慢的速率或相反的方式播放视频.根据Apple’sdocumentation,iOS不支持此属性.通过每秒多次设置currentTime属性,可以反复播放,而无需使用playbackRate.这种方法适用于桌面Safari,但似乎在iOS设备上的搜索限制为每秒1次更新–在我的情况下太慢了.有没有办法在iOS设备上向后播放HTML5视频?解决方法iOS6Safari现在支持playbackRat

  9. 使用 Swift 语言编写 Android 应用入门

    Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。做梦,虽然Swift编译器可以胜任在安卓设备上编译Swift代码并运行。这需要的不仅仅是用Swift标准库编写一个APP,更多的是你需要一些框架来搭建你的应用用户界面,以上这些Swift标准库不能提供。简单来说,构建在安卓设备上使用的Swiftstdlib需要libiconv和libicu。通过命令行执行以下命令:gitclonegit@github.com:SwiftAndroid/libiconv-libi

  10. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部