真心的被android中的targetSdkVersion折磨了两天。配置它一直报空指针。不兼容造成的
来源:互联网 发布:网络教育自我鉴定 编辑:程序博客网 时间:2024/05/16 07:46
1.在AndroidManifest.xml 中不了解它的用途。我在创建项目的时候也是随便猜测的随便选择了一个。导致我在访问网络死都访问不上一直报空指针。
下面总结了下他们都有什么用
如果开发的时候使用的4.x之前的SDk,请在写置android:targetSdkVersion=""的时候不要写4.x的版本,不管你是否需要menu这都不是一个很好的编程习惯,保持界面的一致性是每个开发者应该共同维护的事情。
这里说明一下android:targetSdkVersion的含义:
这里必须提到另外几个概念minSdkVersion、maxSdkVersion
minSdkVersion与maxSdkVersion比较容易理解,就是在安装程序的时候,如果目标设备的API版本小于minSdkVersion,或者大于maxSdkVersion,程序将无法安装(这一点必须注意,如果你的程序希望给2.1用,而且没有用高级的api,请设定尽量低的版本)。一般来说没有必要设置maxSdkVersion,android自身平台具有向下兼容性。
targetSdkVersion相对复杂一些,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。这里就出现了刚才的问题,如果你为低版本的sdk软件设置了高版本的target,号称适应4.x,系统自然不会帮你检查兼容性,4.x取消了屏幕下方的menu键,也就出现了这个问题。所以要注意,target不是说你能支持的版本,是你的目标版本。新的adt建议设置target,又是指最高版本,google会去发布这个规定吗,所以还是需要多去理解,不能生硬看api才能更多的从android开发中学到东西,android给了我们个人或小团队开发者一个做真正有用产品的机会。
这也带来了另一个必须说的问题,就是比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError,我今天也刚刚遇到用户反馈的这个问题,现在通过具体了解这个问题也有了更加清晰的认识。这个错误也就是说,此属性不会帮你解决兼容性的测试问题。因此你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的。
在default.properties中的target是指在编译的时候使用哪个版本的API进行编译。
再吐槽几句吧,如果希望开发Android平台,请不要抱怨分辨率,不要抱怨机型,为你的用户定做最合适的产品是你的义务。
另一方面说,如果我们试着去习惯4.x的设计和编码理念,就会减少很多这方面的困扰,google给了我们很多解决方案,我们应该试着去习惯,而不是做一个2.x的开发者,虽然我们的用户大都是2.x的版本,但是理念总归需要先进一点的,开放,共同学习,这才是android。
AndroidMenifest.xml中minSdkVersion、targetSdkVersion、targetApiLevel的区别
在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="10" android:maxSdkVersion="10" />
在default.properties中,会看到下面的语句: target=android-10 如果是使用Eclipse的话,还可能会看到这样的警告:
Attribute minSdkVersion (4) is lower than the project target API level (10)
那么,这里面的minSdkVersion、targetSdkVersion、maxSdkVersion、target API level四个数值到底有什么区别?
最后补充官方文档的一些解释:
(1)targetsdkversion即其以上的版本将使用新的功能(os new api),但对低版本的需要进行code支持,即文章【1】写到的使用反射(reflection)的技术对老版本使用的一些api功能进行支持,否则会出现老版本上崩溃的现象;
(2)使用最新的开发平台开发,并设置其对应的targetsdkversion;发布的时候,需要从min到target上均需要进行测试;
(3)文章【2】提到了最大兼容性的问题,体现到两个方面:device feature support(新的属性), 和OS version support(新的api)。当进入新的开发平台时,为了使应用程序最大兼容性,可以对用不到新平台支持的一些特性进行选择设置,使得老版本(不被Market过滤掉)可以安装使用.
(4)minSDKVersion是向后(老版本)兼容,targetSDKVersion是向前兼容。
- 真心的被android中的targetSdkVersion折磨了两天。配置它一直报空指针。不兼容造成的
- 被一个低级错误折磨了两天
- 被delphi控件折磨了两天
- BF609 CCES下的SPI驱动调试--就这样被它折磨了一周
- 昨天晚上被 Android 手机上的广告程序折磨了。
- 这两天MyEclipse 不编译了,无论怎么更改保存, classes目录下都是空的.
- java 中的空指针,不为空,的理解
- 关于MVP的一点思考(View被释放后,又调了View的方法,造成空指针)
- 解决了一个butterknife,报空指针的bug
- contraller层方法调用Service的方法一直报空指针异常
- Gallery在不可见情况下,onscroll造成的空指针异常
- tomcat启动一直报空指针错误
- hibernate4整合spring一直报空指针
- mybatis一直报空指针异常
- android googlemap的location报空指针解决案例
- [android] viewpager获取当前view报空指针的解决方法
- android 用gson解析json的时候报空指针
- [android] viewpager获取当前view报空指针的解决方法
- IMediaDeathNotifier
- 用List实现Stack基本功能
- 【4】coco2d-x核心类之CCDirector
- WinDBG常用断点命令
- CocosStudio 学习笔记 之 开关、进度条、步进器也,Button触摸事件的监听
- 真心的被android中的targetSdkVersion折磨了两天。配置它一直报空指针。不兼容造成的
- Java多线程-(1)概念与原理
- Python学习笔记(六)抽象(上)
- 基于比较的排序算法的最优下界为什么是O(nlogn)
- git学习
- Android之rild进程启动源码分析
- 认真是我们最好的人生态度
- 配置 Sublime Text 方便查看Scala 编译器的解析结果
- Linux获取网页源码的几种方法