关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7


新建一个工程时发现多了一个appcompat_v7这个东西,

后来才发现这是官方的一个兼容包,

没什么大惊小怪的,做工程还是更平时一样,要怎么做才不会出现这个包呢?

其实在新建项目的时候把minimum required sdk选择android 4.0以上版本就不会出现那个了。



appcompat_v7 报错


参考这文章操作后http://jingyan.baidu.com/article/2f9b480dbe6eff41cb6cc2e9.html


提示error: 


Error retrieving parent for item: No rsource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'. styles_base_text.xml /appcompat_v7/res/values-v23 line 19 Android AAPT Problem


SDK中Extras -> support libraries 版本更新到23  


猜测是因为这个版本的support libraries里面的这个jar包android-support-v7-appcompat.jar , 引用了最新的android SDK里的资源, 所以这个appcompat_v7项目,需要对应的SDK Platform来build




果然如此, SDK manager 里面安装 SDK platform V23 后 ,   项目右键properties -> Android -> Build Target 选择 android 6.0 , 也就是API 23 版本


然后project -> clean 一下,   项目自动build , 马上都正常了 bin目录也生成了appcompat_v7.jar




尝试删除appcompat_v7 新建个项目,   结果刚新建appcompat_v7 的项目还是必须clean下才能正常了, 但只要这个项目不删除的话, 后面建立的依赖项目倒是不用做什么更改


还发现个问题, 创建项目的时候, 最小SDK 8 的话都会引入这个appcompat_v7来提高兼容性


而前面也看到了这个兼容性的包是针对当前最高版本的android的, 于是创建项目的时候选择 compile with 如果选择低版本, 项目创建后看起来挺正常的代码也没有错误, 但测试跑一下就一堆错误


其实这个也容易理解毕竟appcompat_v7引用的support libraries是最新的, appcompat_v7 这个需要的是对应的最新的SDK来编译, 如果创建项目的时候把compile with这个选择的是低版本而遇到问题的话


改起来也容易 , properties -> Android -> Build Target 这里选择对应的高版本就是了,  或者直接修改project.properties这个文件, 改成对应的版本




那么如果不管android2.2版本兼容性的话, 那么最低SDK 就选4.0, 这样的话就不会引入appcompat_v7, 编译版本也就可以不用选择最高版了.



==================================================



例如从网上下载下来原本开发环境是SDK v19的一个工程,   打开工程后如果本地开发环境SDK中没有安装一样的SDK版本的话
console提示Unable to resolve target 'android-19'


project.properties文件中 
target=android-19


而且会提示build path 错误
Description ResourcePathLocationType
The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this projectAndroidPushNotificationsDemoUnknownJava Problem




这个就是因为找不到jar文件,  于是我们用SDK manager更新勾选对应版本的SDK Platform 就能得到这个SDK的jar文件
然后把项目重新开一下, 就能看到Eclipse帮我们自动导入了这个库到项目中
如果手动去改target=android-xx ,Eclipse也会自动导入对应的库文件也就是对应的SDK jar文件, 前提是安装了这个版本的SDK  platform




AndroidManifest.xml文件中描述了我们的app的细节及app支持哪些Android版本。


<uses-sdk>元素中的minSdkVersion和targetSdkVersion 属性,标明在设计和测试app时,最低兼容API的级别和最高适用的API级别。例如:


    <uses-sdk中定义
        android:minSdkVersion="8"
        android:targetSdkVersion="20" />




那么比如我们的工程target=android-19这个SDK版本下开发的, 但在AndroidManifest却又指定了最低和最高适用版本.
这个最高的级别是需要通过我们的测试的. 
对于实际运行中低版本的Android , 运行高版本开发出来的功能的话, Android会忽略不支持的特性,所以我们可以安全地使用较新版本的XML属性,而不需要担心旧版本Android遇到这些代码时会崩溃


既然, 低版本Android的手机运行我们实际高版本开发的APP不会崩溃,在高版本的Android系统上就更没有问题了, 所以project.properties文件中定义了target=android-19, 但uses-sdk中定义最高使用级别更高是没有问题的 .android:targetSdkVersion="20"  但我们还是必须自己测试.




低版本忽略不支持的特性是为了最大程度保证程序不崩溃  , 那么怎么让低版本的手机上也能使用部分新的特性呢?  这时就需要用到兼容包了, 就是为了提供给低版本的Android一些新的特性.


比如 android:minSdkVersion="8"   这个被指定了后,  Eclipse就会自动添加android-support-v4.jar到库文件, 这个jar包就是个兼容包.  而这个jar实际路径是\sdk\extras\android\support\v4 , Eclipse帮我们自动导入了这个jar文件
它来自Android Support Library,它能使我们的app有更好的兼容性




那么一般情况下我们添加了jar包  二进制文件就可以了, 如果需要深入去了解其实现方法, 就必须在build path里面把jar包对应的源代码放进来 , 这样我们就能在Eclipse里面直接查看其定义
有doc的话也应该添加



1.被引用的项目在“Android”选项里设置“Is Library”打钩

2.引用项在“Android”选项里设置“add"被引用项

3 .android Dependencies会显示引用项目,依赖项目

    Android Private Libraries:表示放在libs里面的jar包引用和依赖项目中的包,视为私有引用

    Referenced Libraries:表示引用的外部jar包。


4.注意:

如果引用项目和被引用项目用到同一个jar包,版本需要保持一致。

Android Private Libraries和Referenced Libraries不能重复引用同一个jar包,两个都有时去掉一个。

即为libs下的包不能够和外部引用的包重复。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值