此代码是在Android中设置标签的一些基本代码。
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
如果您在targetSDK<的项目中编写此代码20或compileSDK< 20(我不知道compileSDK和targetSDK之间的区别是什么)然后就可以了。
但是,如果您的compileSDK更高,例如23,然后Android Studio会告诉你上面的代码已被弃用(而且我想从SDK中删除)。
如果我在设备上运行它会崩溃我的应用程序(在Android级别20上运行,虽然项目目标设置为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或者至少从后向函数的角度来看)?
需要专家的一些意见。
答案 0 :(得分:2)
但是,如果你有更高的compileSDK,例如23,那么Android Studio会告诉你,上面的代码已被弃用(而且我猜想从SDK中删除)。
没有。 getActionBar()
is not deprecated。 setNavigationMode()
为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而言,设计支持库中提到TabLayout
,FragmentTabHost
和PagerTabStrip
(尽管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),在这种情况下不要调用该方法。