Android 导入v7包常见错误,以及项目引用v7包错误解决
android下v4 v7 v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理。
android的扩展包主要是用来兼容低版本的,比如android3.0以后出现了actionbar,如果要使用actionbar,那么手机系统必须在3.0以上才能使用,这样将会导致很多用户不能安装apk从而损失用户;(有人会想,为什么不直接将新出来的东西全部打包到sdk中而是提供各种支持包?我是这样理解的,比如:如果将原生actionbar直接打包到低版本的sdk包中,而低版本手机里面却没有相关的代码,这样即使在开发的时候能在兼容低版本,但运行在低版本手机上时,应用去系统中找actionbar,发现没有就会报错,所以这种做法是不能实现的)
google开发人员将高版本出来的新东西做了很多向下兼容的支持包,这就是v4、v7...等包的作用,实现的原理就是模仿高版本的新内容,使用低版本去实现(比如v7包中actionbar,其实就是自定义了一个title栏,然后上面有title、logo、back键等等,给这些控件赋值或者设置属性都是模仿原生actionbar的属性名称,具体请关注我下一篇博客---使用actionbarsherlock替换原生actionbar)
然而,当我使用v7包的时候却不是那么顺畅,在这里总结一下使用的步骤、遇到的错误以及解决的办法:
1、导入v7包:
Eclipse——>Import--->Existing Android Code Into Workspase--->
D:\IDE\ANDROID64\sdk\extras\android\support\v7\appcompat;(导入成功后,在工作空间里就会有这样一个项目,打开看看里面的内容,发现src目录下是空的,为什么没有代码呢?原来v7包将java源代码打成了jar包
,在项目libs目录下;整个工程的结构就是引用了v7-appcompat.jar,然后一个res目录;其实这个res目录才是重点,如果没有res目录,v7包的使用就不会这么麻烦,直接将v7-appcompat.jar拷贝到项目中就行了,但是这个jar包中是没有资源目录的,这就是为什么v7支持包需要一库工程的形式供开发者使用。)
2、接下来会发现v7工程报了错误:
res目录下有很多values目录,这是android为了兼容和适配不同版本系统而细分了很多个values目录,
values-v21就是Android5.0系统加载的资源目录(根据values后面的后缀,可区分不同版本、不同分辨率、不同语言等从而兼容不同版本、适配不同屏幕大小和不同国家语言),有人会尝试把这些“多余”的values包删除掉,就不报错了,但是发现删除这个后又有了新的错误,永无止境,况且即使你把所有的错误都删除,估计这个v7包也没什么用了,所以这种解决办法是不可行的。
刚刚上面说到了values-v21是Android5.0加载资源的目录,但是我发现我的编译版本是4.0,这就是为什么报错,因为编译版本是4.0,在应用编译打安装包时,她不认为这个应用会安装到5.0上,因为target是4.0,所以它不会为5.0做任何事情,也就更不会将values-21打包进去,既然不会打包进去,存在就没什么价值,所以认为Android4.0应用中不应该存在这个values-21,所以就报错了;解决办法就是讲编译版本提高到5.0以上:
解决办法:只要将编译版本提高到5.0就行
(右击-->Properties--->Project Build Target--->勾选5.0———>clean库工程)
、我们的工程应用库工程后,还是报错,同样的道理,因为我们的工程将v7库工程引用进来后,我么你的资源目录里面就包括了v7的资源目录,里面照样也会有values-v21等,我已也要将我们的工程编译版本提高到5.0,然后clean
4、完成上述操作后,发现工程没有错误了,但是一运行,又报错:
它说在support-v7包的ActionBar中有多个dex文件,但遇到这种错误,一般都是重复引入jar包造成的;
再看看工程的build path:
果然发现引入了两个v4和v7包,这是为什么?
原来在我们自己的工程libs下有一个v4包和一个v7包,而v7库工程里面也有,我的工程又引用了v7库工程,
这样将v7库工程下的v4和v7包也引入了,所以导致工程中重复了:
找到了原因,问题就迎刃而解了,打开工程的build path,Remove掉我们工程中的两个支持包就行
(使用v7库工程中引入的支持包):
运行项目,大功告成
Android 导入v7包常见错误,以及项目引用v7包错误解决的更多相关文章
- 项目jar包管理,使用 .userlibraries 文件增加jar包的可移植性,明确jar包依赖,多项目共用jar包里
当一个普通的项目,在不适用maven 等jar包管理工具的时候,通常我都会直接把jar 包复制lib下,并且在build path 中直接添加额外jar包,或者使用user_libraries包所用的 ...
- [转]Android 导入v7包常见错误,以及项目引用v7包错误解决
android下v4 v7 v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...
- android studio生成aar包并在其他工程引用aar包
1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...
- android 解决studio生成aar包并在其他工程引用aar包的坑,不需要任何gradle配置
1.首先我们创建一个module 2.编写我们的一个类 3.编译我们的module,生成release版本的aar,注意千万不要是debug版本的, 点击最右边的gradle面板,选择我们的modul ...
- Android Studio使用远程依赖时下载不了jar包的解决方法
使用AS很大的一个好处就是可以使用在线jar包,只需在引用jar包的时候在版本后加上+,比如: compile 'com.facebook.fresco:fresco:0.1.0+' 这样不用在jar ...
- nexus私服仓库搭建以及项目引用
第一步:使用ubunto下载安装nexus 并打开登录进入到nexus管理页面,默认账号为 admin 密码在 admin.password 中,首次登录会让你重新修改密码 第二步 配置自己本地 ...
- android导入项目出现style错误,menu错误
android导入项目出现style错误,menu错误 style //查看 res/values/styles.xml 下的报错点. <style name="AppBaseThem ...
- android导入项目出现R文件不能生成
关于原因网上有好多,比如 1.有时候eclipse不自动编译,把project clean一下,让R.java重新生成 2.选择菜单 Project >> Clean ,前提是勾选上 ...
- android导入项目出错之解决办法
导入android源码后,基本都有错误,R.java也不会自动生成,因为是第一次导入工程,工程有错R.java就不会自动生成了,工程有错误,当然模拟器就不能启动,也就看不到效果.随后网上找各种解决方法 ...
随机推荐
- django 发送手机验证码
一.流程分析: 1.用户在项目前端,输入手机号,然后点击[获取验证码],将手机号发到post到后台. 2.后台验证手机号是否合法,是否已被占用,如果通过验证,则生成验证码,并通过运行脚本,让短信运营商 ...
- Server-U FTP与AD完美集成方案详解
最近咱有个任务,那就是把公司的文件服务器.FTP服务器.邮件服务器进行迁移并作相应的整合.登陆后台查看了,公司目前正在使用的方案.FTP服务器使用的是Server-u FTP,验证方式选择的windo ...
- TCP/IP学习笔记__mbuf
Socket发送和接收数据都是写入和读取mbuf(存储器缓存)来完成的.下面着重介绍下Sendto函数与mbuf的关系: 以UDP协议为例: 1.UDP的输出执行过程: UDP的输出执行过程 2.协议 ...
- sublime下配置C/C++运行环境
最近在学习<WEB前端课程>老师教我们使用DW,但是不太喜欢,就选择了sublime,写前端代码还是很方便. 平时都是写C++,C比较多,借鉴了别人的配置步骤,将sublime打造成IDE ...
- python if判断语句&计算
python对缩进要求严格,代码块里的缩进必须一样,可以常用 tab键 表示4个空格 if 条件: 代码块 else: if判断语句如下: 1 print("吃饭,喝水,回家") ...
- 使用 Nexus Repository Manager 搭建私有docker仓库
使用容器安装Nexus3 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name nexus -- ...
- 用go实现常用算法与数据结构——队列(queue)
queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到.一个典型的队列如下图(图片来自 segmentfault): 可以看出队列和我们日常生活中排队是基本一致的.都遵循 FIFO(F ...
- PHP 5 Array 函数
PHP Array 简介 PHP Array 函数允许您访问并操作数组. 支持简单的数组和多维数组. 安装 PHP Array 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP 5 ...
- miracl去除某些特殊信息
只需要在mirdef.h中增加定义 #define MR_STRIPPED_DOWN 即可在编译的时候,去掉错误信息 #define MIRACL 32 #define MR_LITTLE_ENDI ...
- Bootstrap3 代码-变量
通过 <var> 标签标记变量. y = mx + b <var>y</var> = <var>m</var><var>x< ...