常用依赖
1
2
3
4
5
6
7
8
9
10
11
|
//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依赖相同的库
1
2
3
4
5
6
|
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(直接排除匹配到的文件,不建议使用)
1
2
3
4
|
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文件,文件名可自定义
具体内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
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中添加引用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
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依赖管理、去除重复依赖、忽略的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/wapchief/article/details/84974219