求证:对SDK的“向下兼容”概念的理解

2013-09-14 17:02:44 +08:00
 hustlzp
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文件执行效率可能更高。

不知道以上理解是否正确?
2779 次点击
所在节点    程序员
7 条回复
so898
2013-09-14 17:24:42 +08:00
我觉得楼主的理解挺正确的
但是实际上没有这么好的事情的……
比如说从Android 4.0开始强制要求网络请求开单独线程这种玩意……
还比如说某些老版SDK里面根本就没有玩意……
都是坑……
hustlzp
2013-09-14 17:27:27 +08:00
@so898 好多坑啊...目前计划做一个主要是用于内容展示的App,希望能够顺利~
meta
2013-09-14 17:40:31 +08:00
最小版本号是用来对比运行库的,如果运行库版本低于这个版本号,app则不能安装,甚至在google play里面都看不到这个app。
使用了不兼容的api的话,会编译通不过的,编译器会提示这个api只有在xxx版本才提供。通过检测目标系统Build.VERSION.SDK_INT的办法没试过,一般通过使用support库来在低版本上获得高版本的特性,当然不是所有的都可以,另外,support库也分版本的。
至于效率什么的就不了解了,我觉得java是目标代码直接在虚拟机上运行,并不连接,用哪个版本的sdk编译没有什么区别吧。
meta
2013-09-14 17:41:53 +08:00
@so898 是主线程不允许长时间操作啦,不仅限于网络连接。
wwqgtxx
2013-09-14 17:59:12 +08:00
应该更执行效率无关,除非你用ndk,androidsdk是不会有效率区别的,那个是系统内核的事情
9hills
2013-09-14 18:48:23 +08:00
除了编译那段,其他的挺对的
hustlzp
2013-09-14 19:43:23 +08:00
@meta
@wwqgtxx
@9hills 明白了,编译那段是在网上看别人说的。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX