AS中jar包和aar包的导出与导入

时间:2022-02-20 09:09:45

从Eclipse转Android Studio后,很多操作都不是很清楚,就包括jar包的使用,直到昨天出现了问题,才去找原因并解决。

问题是这样的:自定义的控件打成jar包了,在其他工程中调用,在运行时出现错误,提示说在xml中的自定义控件无法填充。在xml中弹出错误,说NoClassDefFoundError,进入源码发现指向的是styleable,也就是自定义属性。毫无疑问,这就是R文件的问题了。在libs中打开jar包,都是些class文件,根本没有R文件和attrs文件。肯定要加入才有效。

那怎么把这些资源文件加入jar包中???

最后,在百度经验里找一篇aar导入的文章,才明白jar包和aar包的区别。当晚就把jar包和aar包的导出与导入进行了总结,今天发表以帮助有需要的朋友。这些都是简单地导出与导入,不涉及代码混淆等比较高级的操作(日后研究)。

在AS中有两种包:jar包和aar包
jar包:只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。
aar包:包含jar包和资源文件,如图片等所有res中的文件。

一、jar包的导出与导入

导出

  1. 新建库,File——New——New Module——Android Library
  2. 编译或生成工程,Build——Make Module
  3. 获取jar包,在build\intermediates\bundles\release目录下的classes.jar

导入

  1. 把工程切换到Project视图下,在app目录下创建libs目录
  2. 把jar拷贝到libs目录
  3. 右键——Add to Library,Create Library默认选app。完成后jar包将变成如下这样
    AS中jar包和aar包的导出与导入

二、aar包的导出与导入

导出

编译库后,jar包和aar会同时生成,arr包的路径:build\outputs\aar\zjun_lib-release.aar。zjun_lib为我的库名

导入

两种方法

【1】通过gradle(个人推荐)
  1. 把aar复制到工程应用app下的libs目录中
  2. 在app的build.gradle中添加一个本地仓库,并把libs作为仓库地址:

    // aar包添加1/2
    repositories {
    flatDir{
    dirs 'libs'
    }
    }
  3. 修改dependencies。添加一行:compile(name:’zjun_lib-release’, ext:’aar’)。name就是zjun_lib-release.aar的文件名,ext就是zjun_lib-release.aar扩展名

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.2.1'
    // aar包添加2/2
    compile(name:'zjun_lib-release', ext:'aar')
    }
  4. 重新编译,编译成功后,在build\intermediates\exploded-aar目录下能看到zjun_lib-release.aar包的内容了。jars下是class文件,res下是资源文件(图是后来截取的,包名已经修改成zjun_lib-1.1.aar了)
    AS中jar包和aar包的导出与导入

【2】界面导入
  1. File——New——New Module——Import .JAR/.AAR Package(jar包也可以这样导入)
  2. 选择aar包所在的路径,一般还是放置在libs目录下。Finish完成即可
    AS中jar包和aar包的导出与导入
  3. Sync Now同步一下工程与Gradle,或重新编译工程。zjun_lib-1.1将变成一个带茶杯的文件夹,且会自动添加一个iml文件
    AS中jar包和aar包的导出与导入
  4. 添加到app的依赖中去。Project Structure——app——Dependencies中添加Module dependency,把module添加进去

参考:
http://jingyan.baidu.com/article/2a13832890d08f074a134ff0.html