曾经在项目中编译出现过问题, 即编译时查找jar/aar包时找不到相应的包, 这时了解一下android studio是怎样查找jar/aar的是有必要的,
下面是我曾经编译时报找不到包的错误中的一部分:
https://jcenter.bintray.com/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.pom https://jcenter.bintray.com/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.jar //远程仓库 file:/Users/stone/AndroidStudioProjects/demo001/myapplication/libs/my-lib-1.0.1.jar file:/Users/stone/AndroidStudioProjects/demo001/myapplication/libs/my-lib.jar //自定义仓库 file:/Users/stone/my_program/adt-bundle-mac-x86_64-20140624/sdk/extras/android/m2repository/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.pom file:/Users/stone/my_program/adt-bundle-mac-x86_64-20140624/sdk/extras/android/m2repository/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.jar file:/Users/stone/my_program/adt-bundle-mac-x86_64-20140624/sdk/extras/google/m2repository/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.pom file:/Users/stone/my_program/adt-bundle-mac-x86_64-20140624/sdk/extras/google/m2repository/com/stone/lib/my-lib/1.0.1/my-lib-1.0.1.jar //本地仓库
错误提示说从上面这些地方查找my-lib-1.0.1.jar包时没有找到. 从上面这一堆乱七八糟的字符串中我们可以发现, 其实可以分为三部分:
a. gradle默认仓库 (gradle默认配置的仓库是:https://jcenter.bintray.com)
b. 自定义仓库
c. 本地仓库
我们知道gradle或maven都是根据构建脚本构建项目的, 项目中的相关引用都会到仓库(repository)中去查找,
这里贴出导致上面错误的那个构建文件(相关的部分):
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' //默认会从本地仓库和远程仓库中查找 compile 'com.stone.lib:my-lib:1.0.1' //默认引用的是jar,如果要引用aar, 用下面的语句即可
//compile 'com.stone.lib:my-lib:1.0.1@aar'
}repositories { flatDir { //自定义一个仓库提供查找, 即在构建文件的同级目录libs中查找引用 dirs 'libs' } }
通过上面报的错误和构建脚本可以看出(需要非常细心哟), 所引用的jar/aar的命名是有一定要求的, 即: "artifactId[-version].jar",
熟悉maven的朋友一定都知道什么是artifactId的, 不懂的赶紧跟上
总结一下:
1. 引用的包位置要放对
2. 包的命名要正确
3. 包的格式要正确(包格式出问题相对较少, 但我还是碰到过, 我引用appcompat-v7的aar包时, 出现过这个问题, aar是zip格式的, 我解压后发现里面有aapt目录和annotations.zip等, 其实不应该有这些东西)
当然还是得根据具体情况而定, 根据编译时的提示来定位问题比较容易......