AS如何引用本地jar包问题解决方案

时间:2024-04-13 20:41:49

从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包的导出与导入

导出

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

把工程切换到Project视图下,在app目录下创建libs目录
把jar拷贝到libs目录
右键——Add to Library,Create Library默认选app。完成后jar包将变成如下这样
AS如何引用本地jar包问题解决方案

二、aar包的导出与导入

导出

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

导入

两种方法

【1】通过gradle(个人推荐)

把aar复制到工程应用app下的libs目录中
在app的build.gradle中添加一个本地仓库,并把libs作为仓库地址:

// aar包添加1/2
repositories {
flatDir{
dirs ‘libs’
}
}

修改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’)
}

重新编译,编译成功后,在build\intermediates\exploded-aar目录下能看到zjun_lib-release.aar包的内容了。jars下是class文件,res下是资源文件(图是后来截取的,包名已经修改成zjun_lib-1.1.aar了)
AS如何引用本地jar包问题解决方案

【2】界面导入

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