android – 为什么AOSP添加新的API来支持库而不添加到SDK?

栏目: IOS · Android · 发布时间: 6年前

内容简介:我已经为Android开发了几个月了,这个问题一再出现:添加全新功能(API)以支持库而不在标准SDK中使用的动机是什么?例:

我已经为Android开发了几个月了,这个问题一再出现:添加全新功能(API)以支持库而不在标准SDK中使用的动机是什么?

例:

FragmentTabHost API只能通过android.support.v4.app.FragmentTabHost提供.大部分时间都很好,但是如果你想使用片段嵌套和 PreferenceFragment 在一起,你死在水中 – 嵌套需要你切换到android.support.v4.app.Fragment(支持4.2以下),但是在此支持lib中没有实现PreferenceFragment.因此,您可以实施自定义解决方法,也可以使用已实施它们的第三方库(参见 this question )

编辑:由@eugen在他的回答中指出,我自己引用了支持本机片段的support-v13的FragmentTabHost.但是,这些信息并没有改变整体问题.事实上,如果我将这个API用于嵌套分片,那么我的应用程序今天不会运行在约30%的设备上(本机片段支持从4.2开始嵌套).

例:

我今天遇到的另一个问题(浪费了太多时间)是通过android.support.v7.app.ActionBarDrawerToggle提供的 ActionBarDrawerToggle .我想使用这个功能,所以我添加了整个com.android.support:appcompat-v7:21.0.到项目的依赖.我猜这样做,但是我错了 – 我的应用程序没有编译(缺少支持库引用的资源).在网络尝试了几个技巧之后,我发现 this question 终于提供了解决方案.简而言之:v7支持库依赖于SDK,因此我不得不定义compileSdkVersion 21.

后果:

现在,我告诉自己:FragmentTabHost还没有添加到任何SDK版本,这意味着甚至4-5年后,开发人员将继续使用support-v4 lib来提供这个功能(因为即使今天添加了这个API ,需要几年才能够安全地假设所有目标设备本身都支持),对吧?相同的参数也适用于android.support.v4.widget.DrawerLayout和其他仅在支持库中存在的API.

如果开发人员多年来一直使用支持库,这也意味着在这些问题可能已经解决之后,他们一定会经历上述不一致/依赖问题,对吗?

题:

为什么Google希望永远保留这些图书馆?如果所有新的API都与兼容性库并行添加到SDK中,那么每个人都不会更好,以便兼容性库可以在某个时间点老化和“退出”?

编辑:以下@ eugen的答案我现在感到困惑更多 – 一些API“更新”与更新的支持libs,但不要把它变成主要的SDK(像FragmentTabHost,从支持v4演变到支持v7).什么是不将其添加到SDK的原因?

FragmentTabHost API is available only through android.support.v4.app.FragmentTabHost.

不正确.您提供的链接导致android.support.v13.app.FragmentTabHost哪个(相对于android.support.v4.app.FragmentTabHost)与本机片段一起使用,但是API API 13之后可以使用API​​ 13以上的API.

In short: v7 support library has dependency on SDK, therefore I had to define compileSdkVersion 21.

当然,图书馆版本21需要版本21的 工具 和版本21的SDK.始终使用相应版本的构建工具,编译SDK和支持库!

截至今天,推荐这些值:

compileSdkVersion 22
buildToolsVersion '22.0.1'

targetSdkVersion 22

compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0' // includes support-v4
compile 'com.android.support:support-v13:22.0.0' // includes support-v4
Now, I tell myself: FragmentTabHost haven’t been added to any SDK version yet, which implies that even 4-5 years from now developers will continue to use support-v4 lib for providing this functionality (because even if this API is added today, it will take years before you could safely assume that all target devices support it natively), right?

这意味着如果您使用support-v13库实现它,则无需担心.它将运行到API 13.

阅读上面的support-v4和support-v13之间的区别.

Why would Google want to keep these libraries forever? 

因为你最有可能支持旧的平台.这意味着你需要一个支持库.

即使现在您也可以使用appcompat-v7(最初打算将其导入到API 7)中的ActionBarActivity(使用minSdkVersion 14),因为您希望使用该材料设计.这也意味着由于ActionBarActivity正在使用它们,您被卡住了支持片段.

Won’t it be better for everybody if all the new APIs were added to SDK in parallel to compatibility libs, such that compatibility libraries could age and “resign” at some point?

支持图书馆年龄.您可能已经注意到,自API 7而不是API 4可以使用recyclelerview-v7(和其他最新的Android库).您可能还注意到RecyclerView不在本机SDK中.为什么要将其添加到本机SDK,使其仅适用于最新的平台,当您可以使用支持库使其可供所有人使用?

http://stackoverflow.com/questions/29197821/why-does-aosp-add-new-apis-to-support-libraries-without-adding-them-to-sdk


以上所述就是小编给大家介绍的《android – 为什么AOSP添加新的API来支持库而不添加到SDK?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java学习笔记

Java学习笔记

林信良 / 清华大学出版社 / 2015-3-1 / CNY 68.00

●本书是作者多年来教学实践经验的总结,汇集了学员在学习课程或认证考试中遇到的概念、操作、应用等问题及解决方案 ●针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新 ●详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系 ●从Java SE API的源代码分析,了解各种语法在Java SE API中的具体应用 ......一起来看看 《Java学习笔记》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具