【转】【Android】1分钟不用改任何代码在Eclipse中使用AAR
原文:https://www.jianshu.com/p/ccf306e08d5b?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
AAR 是 Google 专门为 Android Studio 推出的一种库文件格式,用于便捷的分享和使用
Android Library 项目
而被 Google 放弃的 Eclipse ADT 没办法像使用 jar 那样使用 AAR,但是我们可以使用 AAR 里的文件快速创建一个 Eclipse Library 项目来使用
AAR -> Eclipse Library
- 将 AAR 文件后缀名改为 ZIP 并解压
- 在解压得到的目录里创建一个
libs
文件夹,然后将classes.jar
文件和jni
文件夹下的所有文件移到libs
文件夹下 - 将
proguard.txt
文件的内容拷贝到你的项目的proguard-project.txt
文件中 - 在解压得到的目录里创建
project.properties
文件,内容如下:target=android-22
android.library=true
target
的值随 AAR 里 Android Manifest.xml 文件的targetSdkVersion
属性值而定 - 删除
aapt
和jni
文件夹以及R.txt
和proguard.txt
文件
至此一个 Eclipse Library 项目已经构建完成了,接下来只需打开 Eclipse 导入项目并在你的项目中配置引用这个项目即可
FAQ:
- 运行时如果有 library 中的 Activity 或其他四大组件找不到(ActivityNotFoundException)、asset 资源找不到,jar或so找不到的情况就请参考 【Android】Eclipse引用 library 时的常见异常
- Activity 报
java.lang.NoClassDefFoundError: *.Activity
异常,通常是因为这个 AAR 里的 Activity 继承或实现了其它 AAR 中的类或接口,但是你没有导入 AAR 需要的依赖,导致运行时 AAR 里的 Activity 无法实例化,解决办法就是导入全部需要的依赖,具体需要什么依赖你就自己找到AAR的pom文件查看或者反编译相应出错的类查看
Android 官方提供的 ADT 插件在引用 library 项目时看似很美好,但有很多坑
1.不会自动合并 library 中的 asset 资源
ADT插件并不会自动将 library 里的 asset 资源合并到你的项目中,因此你需要手动拷贝
2.不会自动合并 library 中的 AndroidManifest 文件
如果你引用的 library 中包含有四大组件,在不做任何额外配置的情况下你永远也启动不了 library 中包含的四大组件(例如启动activit时抛ActivityNotFoundException),因为需要你在你的项目的project.properties文件中配置一下ADT才会合并 library 中的 AndroidManifest文件,如下:
manifestmerger.enabled=true
此属性需要 ADT 17 以上版本
3.不会自动导入 library 中 libs 目录下的 jar 包 或 so 文件
解决这个问题只需升级 ADT 到 17 以上版本即可
虽说现在大部分都是用 Android Studio 开发 Android 了,但还是有部分人使用 Eclipse
的,比如大部分的游戏开发人员在集成一些第三方 SDK 的时候主要还是用的 Eclipse,所以这些问题还是有记录价值的
链接:https://www.jianshu.com/p/ccf306e08d5b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【转】【Android】1分钟不用改任何代码在Eclipse中使用AAR的更多相关文章
- Android(java)学习笔记91:Eclipse中代码提示去掉@override,不然就报错!
1. Eclipse中提示去掉@Override 把项目下载下来后有@Override的注释的方法会报错,如果把@Override去掉就不报错了.经过查阅后发现:@override注释在jdk1.5环 ...
- Android(java)学习笔记148:Eclipse中代码提示去掉@override,不然就报错!
把项目下载下来后有@Override的注释的方法会报错,如果把@Override去掉就不报错了.经过查阅后发现:@override注释在jdk1.5环境下只能用于对继承的父类的方法的重写,但不能用于对 ...
- Android(java)学习笔记190:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger
[DDMS] Can't bind to local 8600 for debugger 改成 Under Window -> Preferences -> Android -> D ...
- Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger
[DDMS] Can't bind to local 8600 for debugger 改成 Under Window -> Preferences -> Android -> D ...
- 如何在Android上编写高效的Java代码
转自:http://www.ituring.com.cn/article/177180 作者/ Erik Hellman Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架 ...
- 将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)
网上翻了几百篇博客,看了半天,要不就是写的乱七八糟看不懂,要不就是隐藏了一些细节,要不就是实现不了,最后还是在Android官网上看明白了,而且说得有条有理,以后遇到不懂的一定要先翻官网. 参考资料: ...
- activiti 用户手册中 10分钟 小例子 简单代码搭建 及 其中的 各种坑
看mossle的 5.16 用户手册中的 快速起步:10分钟教程 想自己跑一下,虽然官方文档已经写的非常详细了,但是实际操作中还是遇到各种坑,这里记录下来. 首先官网下载最新的 5版本 full G ...
- Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
随机推荐
- np.random.shuffle(x)的用法
此函数主要是通过改变序列的内容来修改序列的位置.此函数只沿多维数组的第一个轴移动数组.子数组的顺序已更改,但其内容保持不变. 参数 x:即将被打乱顺序的list 返回值 无
- vue的v-model指令
v-model指令用来绑定表单,数据传值. 如上,当在信息1输入框(表单)中输入值时,数据会对应变化:在信息2输入框中输入值时,数据并未变化. <div id="app"&g ...
- NameNode和SecondaryNameNode工作原理剖析
NameNode和SecondaryNameNode工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode中的元数据是存储在那里的? 1>.首先,我 ...
- python 单例实现
class View: _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._insta ...
- EasyUI整合篇
easy ui combobox getValue 获取不到值问题 必须设置属性showblank: true,否则只能从onSelect事件中获取 $("#ddlType").c ...
- 命令链接按钮QCommandLinkButton
继承QPushButton 它的用途类似于单选按钮的用途,因为它用于在一组互斥选项之间进行选择,命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代选项,外观通常类似于平面按钮的外观,但除了 ...
- Linux基础 - 基本命令
一.Linux系统命令操作语法格式 二.目录操作 创建目录 查看目录 改变当前的目录/位置 打印当前工作目录 三.创建文件或者修改文件时间戳(文件属性) 四.stat命令 vim 查看文件内容 mor ...
- 阿里云服务器ftp连接后21端口无法使用的问题
今天在阿里云Centos上搭了一个ftp 服务,开启了20和21端口的权限.但是用工具和ftp命令登录,均超时. ftp命令登录成功后不能使用ls 命令,直接超时. 工具登录成功后 获取根目录失败,也 ...
- pythonのdjango 缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- SpringMVC使用StandardServletMultipartResolver上传文件
DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析mult ...