Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Выход новых версий Android и адаптация приложений под них

#android


У меня была проблема с выходом Android Lollipop. Когда человек обновил свой девайс
до 5.0, мое приложение перестало работать из-за того, что некоторые методы стали deprecated.

Вопрос: как так делать приложения, чтобы они не переставил внезапно работать ? Вот
скоро будет уже 6.0 андроид, как мне предвидеть это ?

__

Предположу: открыть доку или еще где-то об новом андроиде 6.0, посмотреть, может
там будут где-то написаны методы, которые станут устаревшими и что вместо них использовать..
    


Ответы

Ответ 1



Deprecated - устаревшие классы или методы, которые НЕ РЕКОМЕНДУЕТСЯ использовать. При этом они не удаляются из SDK и ими по прежнему можно пользоваться на любой версии API. За всю историю Android, действительно удалили из заметного, кажется, только библиотеку Apache. Объявленный устаревшим метод или класс лучше не использовать, так как, как правило такой класс имеет более новый "заменитель", который дублирует (иногда дополняет) функциональность устаревшего. Новый метод\класс несет в себе какие то исправления, улучшает совместимость и тп. , поэтому нет объективных причин не использовать именно его. Однако, здесь есть такой нюанс, что если вам требуется работоспособность на версиях ниже API, в котором метод\класс объявлен устаревшим, то для обратной совместимости вы должны использовать именно deprecated-метод потому, что иначе на более старых версиях API ваш код не будет работать. Иногда новые методы или классы включают в библиотеки поддержки, тогда, подключив такую библиотеку вы можете использовать новый метод на более низких версиях API. О том, что использовать вместо устаревшего метода\класса написано в документации к этому устаревшему методу. Например, с API 16 объявлен устаревшим метод setBackgroundDrawable(),вместо него указан setBackground(). Это значит, что если вашему приложению не требуется поддержка ниже версии API16, то лучшим решением будет использовать второй метод вместо первого. Так же, все современные IDE дают подсказку о deprecated и предлагают альтернативу. Кроме того IDE проследит и за совместимостью всех методов и классов с заявленными вами поддерживаемыми API для своего приложения. К каждой новой версии API выходит отчет со всеми изменениями в этом API (добавлено, заменено, удалено) по сравнению с предыдущим. Например, для API22 -> API23 - Android API Differences Report. (аналогично для библиотек поддержки). С прочими отчетами можно ознакомится переходя из таблицы версий API по этой ссылке (кликать на номер версии API). В этой же таблице можно найти и множество другой информации по каждой новой версии - все пункты кликабельны и содержат клад знаний. Таким образом, само объявление метода\класса устаревшим, как правило не приводит к неработоспособности приложения. Однако, на практике это не всегда так и новая версия API может и "не понимать" старого метода\класса или в новую систему внесены ограничения, не позволяющие использовать старые способы. Особенно это касается недокументированных "хаков". В таких случаях надо разбираться индивидуально и универсального решения тут нет. Как например, случай с запретом c API19 любому приложению работать с SMS - многим это испортило настроение. Для неразрешимых конфликтов (когда устаревший метод невозможно использовать в новом API, а поддержка более старых версий необходима) обычно используется ветвление кода по версиям API, то есть в зависимости от версии на устройстве выполняется либо устаревший метод, либо новый. Один из примеров - эпические изменения в классе AsyncTask. Решение с ветвлением кода по версии API (в конце ответа)

Ответ 2



По поводу Marshmallow, у меня приложение имеет пермишн запись и чтение с флешки, в шестом андроиде нужно руками давать разрешение, а по умолчанию они отключены, и собственно доступа к флешки у приложения не стало. Для всех пользователей зефирки нужно запрашивать разрешения, добавлять логику.

Комментариев нет:

Отправить комментарий