Use legacy android support libraries что это
Перейти к содержимому

Use legacy android support libraries что это

  • автор:

Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов

Support Library – библиотека, которая на старых версиях Android делает доступными возможности новых версий. Например, фрагменты появились только в третьей версии (API Level 11). Если вы хотите использовать их в своем приложении, это приложение не будет работать на более старых версиях Android, т.к. эти старые версии никогда не слышали про класс android.app.Fragment. Какие тут есть выходы?

1) Добавить в код проверку версии системы и в зависимости от результата выполнять тот или иной код. Т.е. если версия 11 и выше, используем фрагменты, иначе Activity. Вполне выполнимо, но не совсем просто. Можно ошибиться и запутаться. Т.е. при запуске приложения на старых версиях приходится либо отказываться от новшеств и пользоваться тем, что есть, либо изобретать велосипед и реализовывать новшества самому.

2) Можно забить на старые версии и позиционировать свое приложение только для новых версий. Тогда теряется ощутимая часть потенциальных пользователей вашей программы. На момент написания этого материала на версии Android ниже третьей сидит 69,7% пользователей. Ощутимая такая потеря получится — больше, чем две трети! Конечно, со временем все перейдут на третью и последующие версии, и смогут использовать ваше приложение. Но к тому времени выйдут новые версии Android с новыми возможностями, вы их реализуете в своем приложении и, тем самым, снова отсеете часть пользователей. В общем, вырисовывается постоянная дискриминация пользователей по версии.

3) Использовать библиотеку Support Library. Она содержит классы — аналоги новшеств последних версий, которые будут работать на старых версиях.

На данный момент есть две библиотеки v4 и v13. Цифра здесь указывает минимальный API Level на котором можно использовать эту библиотеку. Т.е. приложение, использующее v4, может быть запущено на API Level >= 4 и ему будут доступны новшества, которые входят в эту библиотеку (например, фрагменты).

Библиотеки эти периодически обновляются, в них добавляются новые классы, реализующие новые возможности. Так что, если вы не нашли в них сейчас то, что вам нужно, вполне возможно, что это появится в будущем. Самый яркий пример – ActionBar. Его, к сожалению, в v4 пока нет. И я, честно говоря, не знаю, появится ли. Умельцы пишут свои аналоги, т.е. реализуют первый вариант из рассмотренных нами выше и предоставляют нам возможность использовать его, как третий вариант. Ведь мы вовсе не обязаны ограничиваться стандартной Support Library от гугла. Можно использовать и другие библиотеки от других разработчиков. Самая популярная реализация ActionBar – это ActionBarSherlock.

Разобрались с тем, что такое Support Library и зачем она нужна. Теперь посмотрим, как ее использовать. Работать будем с v4.

Если у вас библиотека загружена, а версия ADT одна из последних, то Eclipse сам автоматически добавит в проект эту библиотеку. И вы сразу после создания нового проекта сможете ее использовать.

Если не все так радужно, то надо скачать и добавить самим. Несложный и недолгий процесс. На официальном сайте есть инструкция. И я здесь просто напишу перевод этой инструкции со своими дополнениями. Но не спешите все это проделывать! Возможно, вам это не понадобится.

Чтобы загрузить библиотеку:

Откройте SDK Manager, найдите там Android Support Library и установите ее

Библиотека v4 загрузится в папку: /extras/android/support/v4/android-support-v4.jar

Чтобы добавить библиотеку в ваш проект:

В проекте создайте папку libs. Он должна быть в корне, на том же уровне, что и res, bin и прочие. Поместите в папку libs загруженную библиотеку android-support-v4.jar. Далее, правой кнопкой на этой библиотеке в папке libs, и в контекстном меню Build Path > Add to Build Path.

Обновите манифест, указав в нем, что минимальная требуемая версия для вашего приложения – API Level 4.

android:minSdkVersion=»4″

При создании нового проекта проверьте — если папка libs с библиотекой в проекте есть, то выше приведенная инструкция вам не нужна.

Из рассмотренных нами в прошлых уроках классов, библиотека содержит Fragment, FragmentManager, FragmentTransaction, ListFragment, DialogFragment.

Полный список объектов можно посмотреть, открыв API на сайте. Вот основной пакет — android.support.v4.app. Слева видны остальные.

Напишем простейший пример использования фрагмента в приложении для API Level 10.

Project name: P1141_SupportLibrary
Build Target: Android 2.3.3 (не 4.1 . )
Application name: SupportLibrary
Package name: ru.startandroid.develop.p1141supportlibrary
Create Activity: MainActivity

Сначала layout fragment.xml:

Пустой красный LinearLayout.

Далее создаем класс — MyFragment. Если мы сделаем это по старинке, наследуя android.app.Fragment, то в созданном классе получим ошибку The import android.app.Fragment cannot be resolved. И это логично, т.к. в Android 2.3.3 (API Level 10) нет такого класса.

И, собственно, именно тут и пригодится нам библиотека v4. Будем наследовать ее класс android.support.v4.app.Fragment при создании фрагмента

MyFragment.java:

package ru.startandroid.develop.p1141supportlibrary; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class MyFragment extends Fragment < public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) < return inflater.inflate(R.layout.fragment, null); >>

Правим main.xml:

Только FrameLayout, который будет контейнером для фрагмента.

Далее есть один нюанс. Чтобы в старой версии Android использовать фрагменты из Support Library, нам необходимо использовать не стандартное Activity, а также из библиотеки – android.support.v4.app.FragmentActivity.

MainActivity.java:

package ru.startandroid.develop.p1141supportlibrary; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Menu; public class MainActivity extends FragmentActivity < @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.main); MyFragment myFrag = new MyFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.cont, myFrag).commit(); >@Override public boolean onCreateOptionsMenu(Menu menu) < getMenuInflater().inflate(R.menu.main, menu); return true; >>

В коде видим еще одно отличие. FragmentActivity использует метод getSupportFragmentManager (а не getFragmentManager) для получения FragmentManager. В остальном, работа с фрагментами не будет отличаться от прошлых уроков. Различие будет только в секции import. Если раньше было, например так:

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
(это работает только на новых версиях)

то с использованием v4 будет так:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
(это будет работать и на старых и на новых версиях)

Цель проста — работоспособность вашего приложения на старых версиях, которые ничего не знают про фрагменты. Старые версии будут использовать для работы с фрагментами классы библиотеки v4. Но, разумеется, этот код без проблем сработает и на последних версиях Android.

Все сохраняем, запускаем приложение и видим работающий фрагмент на Android версии 2.3.3

Ради интереса запустим его же на Android 4.1

Итого, благодаря библиотеке, один и тот же код работает на старых и новых версиях и использует возможности новых версий.

На следующем уроке:

— учитываем ориентацию и размер экрана в работе приложения

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

Use legacy android support libraries что это

На этом шаге мы рассмотрим порядок создания Android- проекта .

Чтобы создать Android -проект, используем Android Studio IDE вместо IntelliJ . Среда разработки Android Studio основана на IntelliJ и содержит дополнительные возможности для разработки Android -приложений.

Скачайте Android Studio по ссылке https://developer.android.com/studio . Как только загрузка завершится, следуйте инструкциям по установке для вашей системы по ссылке https://developer.android.com/studio/install.html .

Обратите внимание, что здесь, в основном, описывается работа с Android Studio Dolphin 2021.3.1 и Android 8.1 (API 27) . Если у вас установлена более свежая версия, что-то могло и измениться.

Прежде чем создать новый проект, убедитесь, что у вас загружен необходимый пакет Android SDK для вашей системы, выбрав More Actions | SDK Manager в диалоговом окне Welcome to Android Studio (рисунок 1).

Рис.1. Вызов SDK Manager

В окне Android SDK убедитесь, что Android 8.1 (Oreo) (API 27) отмечен галочкой и имеет статус Installed в столбце Status (рисунок 2).

Рис.2. Проверка установки API 27

Если нет, поставьте галочку и нажмите ОK , чтобы запустить загрузку. Если пакет уже установлен, нажмите Cancel и вернитесь в диалог Welcome to Android Studio .

Вернувшись к диалоговому окну приветствия, нажмите New Project .

В следующем окне оставьте выбор Phone and Tablet | Empty Activity (рисунок 3).

Рис.3. Выбор Phone and Tablet | Empty Activity

Окно имеет несколько разделов. В основном, мы будем использовать раздел Phone and Tablet .

Здесь следует выбрать внешний вид экрана приложения. Предложенные шаблоны позволяют сэкономить время на написание стандартного кода для типичных ситуаций. Опытный разработчик может вручную написать любой из предложенных вариантов, используя вариант No Activity , где никаких заготовок не будет.

Несколько лет назад был только один шаблон. Список шаблонов постоянно меняется (добавляют и удаляют). В 3.1 было 13, в Android Studio 3.2 добавили 14-й шаблон Fragment+ViewModel . А в 3.3 число сократилось до 12 (причём один из них относится к экзотическому C++ ). В версии 4.0 шаблонов стало 15.

  • No Activity ;
  • Basic Activity ;
  • Basic Activity (Material 3) ;
  • Bottom Navigation Activity ;
  • Empty Compose Activity ;
  • Empty Compose Activity (Material 3) ;
  • Empty Activity ;
  • Fullscreen Activity ;
  • Google AdMob Ads Activity ;
  • Google Maps Activity ;
  • Google Pay Activity ;
  • Login Activity ;
  • Primary/Detail Flow ;
  • Navigation Drawer Activity ;
  • Responsive Activity ;
  • Settings Activity ;
  • Scrolling Activity ;
  • Tabbed Activity ;
  • Fragment + ViewModel ;
  • Game Activity(C++) ; (Новый!)
  • Native C++

В версию Dolphin добавили новый шаблон Game Activity(C++) (стало 21).

Шаблон Empty Activity предназначен для обычных телефонов. На картинке над названием шаблона вы видите приблизительный вид приложения с использованием данной заготовки. Для учебных программ в 99% подойдёт этот вариант.

Шаблон Primary/Detail Flow (раньше было Master/Detail Flow , BLM и всё такое) предназначен для планшетов с реализацией двухпанельного режима. Шаблон Fullscreen Activity можно использовать для игр, когда требуется дополнительное пространство без лишних деталей. Другие шаблоны нужны для создания приложений с гуглокартами или сервисами Google Play .

В диалоговом окне New Project введите имя приложения «Samodelkin» в поле Name . Убедитесь, что выбран язык программирования Kotlin (рисунок 4).

Рис.4. Диалоговое окно создания Android -проекта

Поле Name — понятное имя для приложения, которое будет отображаться в заголовке приложения. В принципе вы можно задать имя по-русски, но у Android есть замечательная возможность выводить нужные строки на телефонах с разными языками. Скажем, у американца на телефоне появится надпись на английском, а у русского — на русском. Поэтому в первоначальных настройках всегда используются английские варианты, а локализованные строки подготовите позже. Необходимо сразу вырабатывать привычку к правильному коду.

Поле Package name формирует специальный Java -пакет. В Java используется перевёрнутый вариант для наименования пакетов, поэтому сначала идёт ru , а потом уже название сайта. Пакет служит для уникальной идентификации вашего приложения, когда вы будете его распространять. Если сто человек напишет сто приложений с названием «Cat» , то будет непонятно, где приложение, написанное разработчиком Василием Котовым. А приложение с именем пакета ru.vaskakotov.cat проще найти. Обратите внимание, что Гугл в своей документации использует пакет com.example в демонстрационных целях. Если вы будете просто копировать примеры из документации и в таком виде попытаетесь выложить в Google Play , то у вас ничего не выйдет — это название зарезервировано и запрещено к использованию в магазине приложений.

Третье поле Save location позволяет выбрать место на диске для создаваемого проекта. Вы можете создать на своём диске отдельную папку для своих проектов и хранить свои программы в ней. Студия запоминает последнюю папку и будет автоматически предлагать сохранение в ней. В случае необходимости вы можете задать другое местоположение для отдельного проекта через кнопку с значком папки.

В поле Language можно выбрать язык: Kotlin или Java .

В блоке Minimum API level выбираем минимальную версию системы, под которую будет работать приложение. Выберите свой вариант. На данный момент Гугл поддерживает версии, начиная с API 9 , выпуская специальные библиотеки совместимости для старых устройств. Но вы можете выбрать более современный вариант.

Если по каким-то причинам нужно поддерживать старые библиотеки, то ставьте флажок Use legacy android.support libraries . К вам это вряд ли относится, игнорируем флажок.

Нажмите Finish . Появится маленькое диалоговое окно, отображающее процесс настройки проекта.

Пару минут спустя будет открыт новый проект.

Конфигурация нового проекта, структура каталогов и определения по умолчанию класса активности и UI были созданы и добавлены в ваш проект. Бегло ознакомимся с ними.

На следующем шаге мы рассмотрим настройку Gradle .

Android Studio: All com.android.support libraries must use the exact same version specification

Вот такая ошибка в строке compile ‘com.android.support:appcompat-v7:23.4.0’ :

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 24.0.0, 23.4.0. Examples include com.android.support:support-v4:24.0.0 and com.android.support:animated-vector-drawable:23.4.0

Несоответствие версий

Чтобы посмотреть версии библиотек, я использовал это:

gradlew -q dependencies app:dependencies --configuration compile 
------------------------------------------------------------ Root project ------------------------------------------------------------ No configurations ------------------------------------------------------------ Project :app ------------------------------------------------------------ compile - Classpath for compiling the main sources. +--- com.mikepenz.materialdrawer:library:0.9.5 | +--- com.mikepenz.iconics:library:0.7.3 | +--- com.android.support:support-v4:21.0.3 -> 24.0.0 | | \--- com.android.support:support-annotations:24.0.0 | \--- com.android.support:appcompat-v7:21.0.3 -> 23.4.0 | +--- com.android.support:animated-vector-drawable:23.4.0 | | \--- com.android.support:support-vector-drawable:23.4.0 | | \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | +--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | \--- com.android.support:support-vector-drawable:23.4.0 (*) +--- com.android.support:appcompat-v7:23.4.0 (*) +--- com.android.support:design:23.4.0 | +--- com.android.support:recyclerview-v7:23.4.0 | | +--- com.android.support:support-annotations:23.4.0 -> 24.0.0 | | \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | +--- com.android.support:appcompat-v7:23.4.0 (*) | \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) +--- com.android.support:cardview-v7:23.4.0 +--- com.google.firebase:firebase-core:10.2.1 | \--- com.google.firebase:firebase-analytics:10.2.1 | +--- com.google.android.gms:play-services-basement:10.2.1 | | \--- com.android.support:support-v4:24.0.0 (*) | +--- com.google.firebase:firebase-common:10.2.1 | | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | | \--- com.google.android.gms:play-services-tasks:10.2.1 | | \--- com.google.android.gms:play-services-basement:10.2. 1 (*) | \--- com.google.firebase:firebase-analytics-impl:10.2.1 | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | +--- com.google.firebase:firebase-iid:10.2.1 | | +--- com.google.android.gms:play-services-basement:10.2. 1 (*) | | \--- com.google.firebase:firebase-common:10.2.1 (*) | +--- com.google.firebase:firebase-common:10.2.1 (*) | \--- com.google.android.gms:play-services-tasks:10.2.1 (*) +--- com.google.firebase:firebase-auth:10.2.1 | +--- com.google.android.gms:play-services-base:10.2.1 | | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | | \--- com.google.android.gms:play-services-tasks:10.2.1 (*) | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | +--- com.google.firebase:firebase-common:10.2.1 (*) | \--- com.google.android.gms:play-services-tasks:10.2.1 (*) +--- com.google.firebase:firebase-database:10.2.1 | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | +--- com.google.firebase:firebase-database-connection:10.2.1 | | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | | \--- com.google.firebase:firebase-common:10.2.1 (*) | +--- com.google.firebase:firebase-common:10.2.1 (*) | \--- com.google.android.gms:play-services-tasks:10.2.1 (*) +--- com.google.firebase:firebase-storage:10.2.1 | +--- com.google.android.gms:play-services-basement:10.2.1 (*) | +--- com.google.firebase:firebase-storage-common:10.2.1 | | \--- com.google.android.gms:play-services-basement:10.2.1 (*) | +--- com.google.firebase:firebase-common:10.2.1 (*) | \--- com.google.android.gms:play-services-tasks:10.2.1 (*) +--- com.firebaseui:firebase-ui:0.5.1 | +--- com.firebaseui:firebase-ui-database:0.5.1 | | +--- com.android.support:appcompat-v7:23.4.0 (*) | | +--- com.android.support:recyclerview-v7:23.4.0 (*) | | \--- com.google.firebase:firebase-database:9.4.0 -> 10.2.1 (*) | \--- com.firebaseui:firebase-ui-auth:0.5.1 | +--- com.android.support:appcompat-v7:23.4.0 (*) | +--- com.facebook.android:facebook-android-sdk:4.14.1 | | +--- com.parse.bolts:bolts-android:1.4.0 | | | +--- com.parse.bolts:bolts-tasks:1.4.0 | | | \--- com.parse.bolts:bolts-applinks:1.4.0 | | | \--- com.parse.bolts:bolts-tasks:1.4.0 | | +--- com.android.support:customtabs:23.4.0 | | | +--- com.android.support:support-annotations:23.4.0 -> 2 4.0.0 | | | \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | | +--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | | \--- com.android.support:cardview-v7:23.4.0 | +--- com.android.support:design:23.4.0 (*) | +--- com.google.firebase:firebase-auth:9.4.0 -> 10.2.1 (*) | \--- com.google.android.gms:play-services-auth:9.4.0 | +--- com.google.android.gms:play-services-auth-base:9.4.0 | | +--- com.google.android.gms:play-services-base:9.4.0 -> 10.2.1 (*) | | \--- com.google.android.gms:play-services-basement:9.4.0 -> 10.2.1 (*) | +--- com.google.android.gms:play-services-base:9.4.0 -> 10.2. 1 (*) | \--- com.google.android.gms:play-services-basement:9.4.0 -> 1 0.2.1 (*) +--- com.firebaseui:firebase-ui-storage:0.6.0 | +--- com.android.support:appcompat-v7:23.4.0 (*) | +--- com.android.support:palette-v7:23.4.0 | | \--- com.android.support:support-v4:23.4.0 -> 24.0.0 (*) | +--- com.github.bumptech.glide:glide:3.7.0 | \--- com.google.firebase:firebase-storage:9.6.0 -> 10.2.1 (*) \--- com.soundcloud.android:android-crop:1.0.1 (*) - dependencies omitted (listed previously) 

Мой build.gradle:

apply plugin: 'com.android.application' android < compileSdkVersion 23 buildToolsVersion '25.0.0' defaultConfig < applicationId "com.example.user.datingservice" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true >buildTypes < release < minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' >> > dependencies < compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', < exclude group: 'com.android.support', module: 'support-annotations' >) compile('com.mikepenz.materialdrawer:library:0.9.5@aar') < transitive = true >compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.android.support:cardview-v7:23.4.0' compile 'com.google.firebase:firebase-core:10.2.1' compile 'com.google.firebase:firebase-auth:10.2.1' compile 'com.google.firebase:firebase-database:10.2.1' compile 'com.google.firebase:firebase-storage:10.2.1' compile 'com.firebaseui:firebase-ui:0.5.1' compile 'com.firebaseui:firebase-ui-storage:0.6.0' compile 'com.soundcloud.android:android-crop:1.0.1@aar' testCompile 'junit:junit:4.12' > apply plugin: 'com.google.gms.google-services' 

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

  • android
  • android-studio
  • android-support-library

Use legacy support library option in android

image

Should I select the Use legacy android.support libraries option when creating a new project? What will happen if I don’t select this option?

3,651 1 1 gold badge 28 28 silver badges 46 46 bronze badges
asked Jun 11, 2020 at 13:03
jai singh Rawat jai singh Rawat
253 1 1 gold badge 3 3 silver badges 7 7 bronze badges

You can use the support libraries or androidx libraries but not mixing them.The default option is the 2nd one since the support libraries are deprecated.

Jun 11, 2020 at 13:18

4 Answers 4

A little context:

Up until recently, almost every Android app used the android.support libraries so that they could use features introduced on new Android versions also on older Android versions. You can read about it here: https://developer.android.com/topic/libraries/support-library

Recently, Google announced that there would be no new releases for the support library, and that instead the support library would become a new library called AndroidX . Here’s their announcement:

With the release of Android 9.0 (API level 28) there is a new version of the support library called AndroidX which is part of Jetpack. The AndroidX library contains the existing support library and also includes the latest Jetpack components.

You can continue to use the support library. Historical artifacts (those versioned 27 and earlier, and packaged as android.support.*) will remain available on Google Maven. However, all new library development will occur in the AndroidX library.

We recommend using the AndroidX libraries in all new projects. You should also consider migrating existing projects to AndroidX as well.

So all Android apps should now aim to use AndroidX, instead of the old support library. When you create a new project in Android Studio, it will by default use AndroidX, but you can still choose to Use legacy android.support libraries if you wish, by clicking the checkbox you found.

Most of the time, you probably want to use AndroidX

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *