android爬坑篇之第三方框架引用

来源:互联网 发布:淘宝350模板怎么买不了 编辑:程序博客网 时间:2024/06/06 01:58

一、导入篇

我们每当从github dwon下第三方库时几乎在本地的编译器中都会报错,原因是我们必须改掉第三方中builde.gridle的某些配置项。
其中必改的有:

    android {    compileSdkVersion //your compile versoin    buildToolsVersion //"your buildTools versoin"    defaultConfig {        minSdkVersion //your minSdk versoin        targetSdkVersion //your target versoin    }

具体的版本可以参考你创建的本地应用的对应版本。

还有,有一些dependencies中的依赖库的版本,也要改成和你compileSdkVersion相符合的版本。

最后,把一些和你项目无关的项给注释掉,接着try again即可。

二、冲突篇

(注:参考了郝捷的专栏,第二项为解决问题的重点)
1.gradle依赖和jar包依赖互相是有影响的
不同module中的gradle依赖和jar包依赖互相是有影响的,建议都改为gradle依赖避免lib依赖
或者可以删除app(module)中的依赖而使用库本身的,因为app本身是依赖于库的
2.两个module中引用了同一jar包,又必须用该jar包
将任意一个Module中的jar依赖为compile files(‘your jar name’),其他需要依赖的地方改为provided files(‘your jar name’)并且删除compile fileTree(include: [‘*.jar’], dir: ‘libs)。即可。
3.多种情况说明
假设项目引用了类库 A 和类库 B ,同时,这两个类库都依赖包 C 。
一、如果 A 、B 、C 均为 Maven 依赖,可以直接使用,不会存在冲突问题。
如果还是有问题,则在主项目可以去除 A 、B 中的 C 。
主项目:

compile ‘a.group:a.artifactId:a.version’ { exclude group: ‘c.groupId’, module: ‘c.artifactId’ } compile ‘b.group:b.artifactId:b.version’ { exclude group: ‘c.groupId’, module: ‘c.artifactId’ } compile ‘c.groupId:c.artifactId:c.version

二、 如果 A 、B 均为 Maven 依赖,C 为 jar 依赖。则将 C 复制到主项目、A 、B 中,主项目 compile C ,A 、B provided C 。
主项目: compile files(‘libs/C.jar’)
A 、B 项目:provided files(‘libs/xx.jar’)

三、如果 A 、B 均为 Library Project 依赖,C 为 jar 依赖。同 2 。

四、 如果 A 、B 均为 Library Project 依赖,C 为 Maven 依赖。同 2 或者 1(Maven 依赖也可以进行 provided 处理)。

五、如果 A 为 Maven 依赖或者 Library Project 依赖,B 为 jar 依赖,C 为 jar 依赖。
A 项目:provided files(‘libs/xx.jar’)
B 项目和主项目,不做其他任何处理。

六、如果 A 、B 、C 均为 jar 依赖,尝试重新将 A 、B 打包,将 C 剥离出来。

4、在Android Studio中有六种依赖说明
Compile
compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。

Provided
Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。

APK
只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错

Test compile
Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。

Debug compile
Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。

Release compile
Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

三、建议篇

当我们创建库时,建议不要使用:

compile fileTree(include: ['*.jar'], dir: 'libs')

而是使用:

compile files('libs/your.jar')

这样能够避免出现jar冲突时,要花很多时间去寻找相同的jar

0 0
原创粉丝点击