最近在做一个项目时,遇到一个问题:同一个Android工程中,多个Module依赖同一个Jar包,导致包冲突,解决如下:

解决步骤:

  • 将任意一个Module中的jar依赖更改为compile files('your jar name')
  • 其他需要依赖的地方改为provided files('your jar name')
  • 删除所有gradle中的compile fileTree(include: ['*.jar'], dir: 'libs)

具体案例解决说明:

案例:

一个AndroidStudio工程中,存在app module以及环信Module,且两者都依赖定位sdk,现出现依赖问题。

解决步骤:
  • 在app module的gradle中以compile方式引入:compile files('libs/AMap_Location_V2.4.1_20160414.jar')
  • 在环信 Module的gradle中以provided方式引入:provided files('libs/AMap_Location_V2.4.1_20160414.jar')
  • 在app module及环信module的gradle中去掉:compile fileTree(include: ['*.jar'], dir: 'libs')

原理讲解:

多个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。

注意事项:

在module改完后要clean project,一定要清除缓存,本人就因为这个步骤没做而一直报同个错.
arr格式(适用于AndroidStudio)的包,不会出现上述问题

更多相关文章

  1. Android(安卓)NDK开发环境搭建_r8
  2. Android(安卓)批量打包 基于Walle的多渠道快速打包自动脚本
  3. Linux系统Android(安卓)NDK编译环境搭建
  4. Android(安卓)打包aar给unity3d使用 项目心得
  5. 用cmake生成ios framework库
  6. mac下编译ffmpeg1.1.4
  7. SpringSource通过Spring for Android(安卓)1.0将Spring Framewor
  8. [Android] Dagger2 入门 2
  9. 如何用eclipse编译调试adnroid的Browser

随机推荐

  1. Android本地程序的printf输出到logcat中
  2. Android热修复之替换原有classes.dex的源
  3. 速读原著-Android应用开发入门教程(3D动
  4. Android(安卓)获取 PackageInfo 引发 Cra
  5. 亚洲占据了Android整个市场的半壁江山
  6. android 动画详解(二)
  7. Android-Layout:RelativeLayout常用XML属
  8. Android5.0开关机模块——zygote进程
  9. android UI学习 -- 设置界面的布局(包括s
  10. Android布局总结一:GridLayout布局(网格