AndroidStudio中的依赖的几种方式以及JAR包重复的解决方案

AndroidStudio中Module相当于Eclispe中的Library,这里不做过多介绍

多个Module依赖同一个jar,直接把jar放入对应需要的Module会导致编译报类冲突

这里就要讲一讲AndroidStudio中的依赖的几种方式

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打包。

我们需要用的是Provided,这样在写代码的时候可以在Module中正常使用jar中的类,但是要有一个Module以compile的方式依赖这个jar,这样编译的时候只有一个jar编译进apk。

注:使用Provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module

JAR包重复的解决方案:

1、 使用provided把各个moudle的jar的范围控制在当前moudle.
2、让重复jar的两个moudle当中被引用的moudle含有jar,另一个不引用,然后全是compile方式
3、新建一个moudle专门装jar,所有需要引用jar的直接依赖这个moudle
4、把公用的jar放在项目文件夹下,引用的时候通过“/”回退目录,参考http://www.cnblogs.com/GISRSMAN/p/5140701.html 

 

有moduleA、B,A、B包含的so文件平台数不同,会报错。

 

1.将其中作为依赖的module jar改成provider形式, 这样jar就不会被编译进apk不会产生重复

jar只在当前module生效

2.直接去掉其中一个,依赖另一个即可

 

 

建议 将公共类新建一个common Moduel 统一管理

 

也可以将一些公共资源抽离出来 比如对话框等可以服用的资源文件 ,所有module指向一个common即可

减少module之前不必要的依赖网

 

 

当存在两个需要jniLibs的module时候,注意平台的一致性 ,避免因为平台不一致导致的 UnsatisfiedLinkError

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_40919743/article/details/78693982