同一个项目中多个module存在多个相同命名的jar,且版本不同时易造成引入了jar包但找不到相关的类。这种情况相对来说是比较少的。一般情况下一个工程下只有一个主module,其他的都是library库文件,但也不排斥有这种情况发生。
先说说我遇到的情况吧:在学习讯飞语音过程中,下载了多个版本的sdk和demo,其中每个module都应该引用各自的Msc.jar。但似乎由于 Android studio限制了一个project只能引入一个同名的jar,因而造成新版本的demo里找不到部分相关的类和方法。
一、查看当前项目引入的jar文件的本地存储路径(即项目中进入jar但jar看不到内容)
引用后的jar在项目.idea/libraries下会生成以jar包名的xml文件,打开相应文件即可查看相应的路径。 如scmclient项目引用的Msc.jar,其.idea/libraries/Msc.xml内容如下:
<component name="libraryTable">
<library name="Msc">
<CLASSES>
<root url="jar://$PROJECT_DIR$/scmclient84/libs/Msc.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
二、解决方法
(1)将多个module分为多个project,各自引用各自的jar
(2)将版本高的(一般版本高的都能兼容版本低的)复制到引用的jar的目录下
(3)这点的原理与(2)相同,直接将相关.idea/libraries/xx.xml里的url改为所需的jar路径