这是一个创建于 4038 天前的主题,其中的信息可能已经有所发展或是发生改变。
LZ初学Android,最近在看Android的SDK兼容性方面的资料。有点不确定自己对于“向后兼容”的概念是否理解正确,开贴向大家求证一下:
所谓的“向后兼容”,就是说旧版本SDK中提供的API,在新版本的SDK中都有提供,2者在调用的时候没什么区别,无论是形式还是实现的功能都一样(内部实现可能不一样)。
因此可以得出以下2个推论:
(1)使用旧版本SDK编译的App,完全可以在新版本SDK的环境下运行;
(2)使用新版本SDK编译的App,如果没有使用新版API(就是说只使用旧版本SDK中的API),那么完全可以在旧版本SDK的环境下运行。
最终结论:在开发涉及SDK兼容性的应用时,应该:
(1)根据App所必须使用到的API,来设置最小兼容的SDK版本(Minimum SDK version);
(2)在开发过程中:要么不使用高于Minimum SDK version中的API;要么通过if进行版本测试后使用;要么加入第三方的library替代此API;
(3)在编译的时候,一律使用最新的SDK进行编译,因为即使API在新旧SDK中看上去一样,但是其实现可能进行了优化,因此编译出来的apk文件执行效率可能更高。
不知道以上理解是否正确?
7 条回复 • 1970-01-01 08:00:00 +08:00
|
|
1
so898 2013-09-14 17:24:42 +08:00
我觉得楼主的理解挺正确的 但是实际上没有这么好的事情的…… 比如说从Android 4.0开始强制要求网络请求开单独线程这种玩意…… 还比如说某些老版SDK里面根本就没有玩意…… 都是坑……
|
|
|
2
hustlzp 2013-09-14 17:27:27 +08:00
@ so898 好多坑啊...目前计划做一个主要是用于内容展示的App,希望能够顺利~
|
|
|
3
meta 2013-09-14 17:40:31 +08:00 1
最小版本号是用来对比运行库的,如果运行库版本低于这个版本号,app则不能安装,甚至在google play里面都看不到这个app。 使用了不兼容的api的话,会编译通不过的,编译器会提示这个api只有在xxx版本才提供。通过检测目标系统Build.VERSION.SDK_INT的办法没试过,一般通过使用support库来在低版本上获得高版本的特性,当然不是所有的都可以,另外,support库也分版本的。 至于效率什么的就不了解了,我觉得java是目标代码直接在虚拟机上运行,并不连接,用哪个版本的sdk编译没有什么区别吧。
|
|
|
4
meta 2013-09-14 17:41:53 +08:00
@ so898 是主线程不允许长时间操作啦,不仅限于网络连接。
|
|
|
5
wwqgtxx 2013-09-14 17:59:12 +08:00 via Android
应该更执行效率无关,除非你用ndk,androidsdk是不会有效率区别的,那个是系统内核的事情
|
|
|
6
9hills 2013-09-14 18:48:23 +08:00
除了编译那段,其他的挺对的
|