Android目标sdk与弃用方法

时间:2015-09-03 20:02:39

标签: android sdk deprecated

此代码是在Android中设置标签的一些基本代码。

final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

如果您在targetSDK<的项目中编写此代码20或compileSDK< 20(我不知道compileSDK和targetSDK之间的区别是什么)然后就可以了。

但是,如果您的compileSDK更高,例如23,然后Android Studio会告诉你上面的代码已被弃用(而且我想从SDK中删除)。

如果我在设备上运行它会崩溃我的应用程序(在Android级别2​​0上运行,虽然项目目标设置为23并且编译版本也是23,所以它崩溃了,因为它已被弃用并从SDK级别23中删除)。

问题:

  

1)如果我使用compileSDK版本编译我的项目会发生什么   targetSDK版本设置为20(存在没有问题   已弃用)并尝试使用SDK 21或23在Android上运行它   功能显然已从SDK中删除?应用程序崩溃或工作?

     

2)如果我决定瞄准"高"会发生什么? SDK(例如23)?那   是的,我将离开" old"上面提到的代码并将使用一些   "新"标签的代码,出现在SDK 23左右(没有   存在于较低的SDK);然后我会尝试运行该应用程序   具有较低SDK的Android,例如20.应用程序会崩溃还是工作?

修改

顺便说一句,现在我在Android上启动了带有targetSDK和compileSDK 20的项目,级别为22,并且它有效。

所以似乎唯一真正重要的是compileSDK版本?在SDK版本的设备上并不重要,但它对compileSDK真的很重要吗?

因为正如我所说的那两项测试 - 在具有良好LOW SDK =崩溃的设备上启动了错误HIGH SDK的项目。具有良好LOW SDK的项目在推出时出现了糟糕的HIGH SDK =没有崩溃。

但是逻辑当然说它必须对Android版本的设备也很重要(例如,访问一些新函数..或者真的只关于编译的SDK或者至少从后向函数的角度来看)?

需要专家的一些意见。

3 个答案:

答案 0 :(得分:2)

  

但是,如果你有更高的compileSDK,例如23,那么Android Studio会告诉你,上面的代码已被弃用(而且我猜想从SDK中删除)。

没有。 getActionBar() is not deprecatedsetNavigationMode()deprecated but not removed

  

如果我使用compileSDK版本和targetSDK版本编译我的项目会发生什么,例如20(不推荐使用的地方没有问题),并尝试在Android上使用SDK运行它,例如21或23,这些来自SDK的功能显然被删除了吗?应用程序崩溃或工作?

该应用应该可以正常工作。 "已过时"意味着"我们认为有更好的解决方案,我们希望您使用它"。

  

如果我决定瞄准"高"会发生什么? SDK意味着例如23,我将离开" old"上面提到的代码,将使用一些" new"标签的代码,例如在SDK 23中出现(这意味着在较低的SDK中不存在),我将尝试使用较低的SDK在Android上运行应用程序,例如20?应用程序崩溃或工作?

首先,我不知道任何"'新的'标签的代码,例如出现在SDK 23"中。设计支持库具有我能想到的唯一新的选项卡实现,它可以回溯到API级别7。

其次,如果您尝试使用比minSdkVersion更新的内容而没有经过充分检查(例如,使用Build.VERSION.SDK_INT并绕过旧设备上的代码),您的应用应该无法编译。

最后,如果您引用旧API级别上不存在的类,方法,字段,接口等,那么当代码执行时,您的应用程序将崩溃。典型的错误是VerifyError,虽然它取决于您尝试使用的不存在的性质。

关于标签,有无数的实现可供您使用。大多数都以third-party libraries tied to ViewPager的形式出现。就Android SDK而言,设计支持库中提到TabLayoutFragmentTabHostPagerTabStrip(尽管the latter has a bug in the 23.0.0 edition of the support-v4 library, apparently)。

答案 1 :(得分:0)

已弃用的API仍然可用,因此您可以自由使用它们 - 该应用程序不会在任何平台上崩溃。但是,建议您阅读文档以了解API被弃用的原因:通常开发人员提供替代解决方案。

答案 2 :(得分:0)

Here是关于compile / target / minSDK的一些解释。

  

1)如果我使用compileSDK版本编译我的项目会发生什么   targetSDK版本,例如20(不推荐使用的地方)和   我会尝试在Android上使用SDK运行它,例如21或23   SDK的功能明显删除了?应用程序崩溃或工作?

Android Studio可能只是警告您API已被弃用,但未被删除。如果它已被删除,将编译SDK设置为23应该会破坏您的编译。您的应用程序即使使用已弃用的API也应该可以正常工作,但是当您有时间时应该更新它,因为它不再是推荐的。

  

2)如果我决定瞄准"高"会发生什么? SDK意味着例如   23,我将离开" old"上面提到的代码并将使用一些   "新"标签的代码,例如在SDK 23中出现(这意味着   在较低的SDK中没有存在)我会尝试运行应用程序   具有较低SDK的Android,例如20?应用程序崩溃或工作?

当您使用SDK 23中引入的API时,您还需要将compileSDK设置为23。如果您将minSDK设置为22,则可以将其安装在使用SDK 22的设备上,但是,如果您尝试使用该方法,则应用程序将因NoSuchMethodError而崩溃。但是,您可以检查设备上运行的SDK(使用Build.VERSION.SDK_INT),在这种情况下不要调用该方法。