常用依赖方式
我们最常用的依赖声明有:
//依赖文件(批量依赖jar) compile fileTree(include: ['*.jar'], dir: 'libs') //依赖文件(单个文件jar) compile files('libs/normal-1.0.0.jar') //远程依赖(aar或jar) compile 'com.jakewharton:butterknife:6.0.0' //依赖工程 compile project(':base-jar') //可以指定依赖的具体配置,这要保证base-jar中配置了publishNonDefault为true,不然有可能找不到 compile project(path:':base-jar',configuration:'sitDebug') //依赖本地aar,需要在repositories中配置flatDir,就是把存放aar的目录拍扁到和gradle配置在一个目录下. compile(name: 'image_picker_v1.0.3', ext: 'aar') |
库工程依赖传递问题
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')的方式), 依赖是可以传递的,所以不需要在声明一次依赖.
排除传递的依赖:
//一般通过远程依赖都会自动导入该依赖的依赖.通过下面的方式可以移除这种传递的依赖 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) |
排除冲突文件
参考官方文档:PackagingOptions
通过packagingOptions中的exclude方法配置.
pickFirst
//如下:如果多个 aar中包含了冲突的 jar 或者 so, 可以通过下面的配置,则 Android 打包的时候符合下面匹配规则的文件就选择第一个作为打包内容,后续的直接护绿. packagingOptions { pickFirst "**/libBugly.so" pickFirst "**/tbs-*.jar" pickFirst "**/bugly-*.jar" } |
packagingOptions还有其他两个配置项为merge(碰到冲突会合并)和exclude(直接排除匹配到的文件),这里的参数模式支持**和*,前者可以跨越文件目录路径,后者只能匹配某个目录名或文件名,比如:
//匹配的是任意目录下的libBugly.so 文件 **/libBugly.so //匹配的是根目录的某个目录下的文件名以 Bugly.so 结尾的文件 */*Bugly.so |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。