Этот код является базовым кодом для настройки вкладок в Android.Android целевой sdk vs устаревшие методы
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 (там, где нет проблем с бытием устаревшее) и попробуйте запустить его на Android с SDK 21 или 23, где эти функции , очевидно, удалены из SDK? Повреждено ли приложение или работает?
2) Что произойдет, если я решит настроить «высокий» SDK (например, 23)? Это есть, я оставлю «старый» код, упомянутый выше, и будет использовать «новый» код для вкладок, которые появились в SDK 23 или около того (что не было в нижнем SDK); то я попытаюсь запустить приложение на Android с более низким SDK, например. 20. Применяется ли приложение или работает?
редактировать:
Btw Теперь я начал проект с targetSDK и compileSDK 20 на Android с 22 уровня, и она работала.
Значит, единственное, что действительно имеет значение, это версия compileSDK? Даже не имеет значения на SDK-версии устройства, но это действительно важно для compileSDK?
Потому что, как я сказал о двух тестах - проект с плохим HIGH SDK запущен на устройстве с хорошим LOW SDK = сбой. Проект с хорошим низкоуровневым SDK запускается с делением с плохим HIGH SDK = не сбой.
Но логика, конечно же, говорит о том, что она также должна иметь значение на версии устройства Android (например, для доступа к некоторым новым функциям .. или действительно имеет значение только на compiledSDK или, по крайней мере, из вида back-functionallity)?
Нужны некоторые мнения экспертов по этому вопросу.
Ребята, если вы попробуете поставить действиеBar.setNavigationMode (ActionBar.NAVIGATION_MODE_TABS); в проекте с compileSDK, например 23, вы увидите предупреждение, напоминающее, что «это может привести к сбою», и на самом деле он сбой! поэтому он может вызвать сбои :) очевидно .. из того, что я видел сегодня, этот код, вероятно, был удален в 23 или около того – luky
«и действительно он сбой» - предположительно, это потому, что у вас есть ошибка в коде. [Это пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/TabFragmentDemoNative) отлично работает с 'compileSdkVersion' из 23, несмотря на то, что он использует устаревший' setNavigationMode () 'и' NAVIGATION_MODE_TABS'. – CommonsWare
f ** k как это возможно? моя андроид-студия говорит, что это может вызвать исключение null-указателя, и оно бросает! если я изменяю уровни SDK, никакое исключение не бросается, и панель вкладок действительно появляется! поэтому я не знаю :( – luky