Android studio как изменить версию api

Изменение уровня API Android Studio

Я хочу изменить минимальную версию SDK в Android Studio от API 12 до API 14. Я попытался изменить ее в файле манифеста, т.е.

и перестроить проект, но я до сих пор получаю IDE от Android Studio, вызывая некоторые ошибки. Я предполагаю, что мне нужно установить минимальный SDK в «свойствах проекта» или что-то подобное, поэтому среда IDE распознает изменение, но я не могу найти, где это делается в Android Studio.

13 ответов

Если вы хотите обновить minSdkVersion в существующем проекте.

  • Обновить build.gradle(Module: app) . Убедитесь, что он находится под Gradle Script, и он НЕ build.gradle(Project: yourproject) .
  1. Кнопка синхронизации gradle (обновлены все проекты gradle)
  2. Реконструкция проекта

После обновления build.gradle minSdkVersion вам нужно щелкнуть по кнопке, чтобы синхронизировать файл gradle ( «Синхронизировать проект с gradle файлами» ). Это очистит маркер.

Обновление manifest.xml, например. удаление каких-либо ссылок на уровни SDK в файле манифеста больше не требуется в Android Studio.

Для пользователей студии Android:

  • щелкните правой кнопкой мыши каталог приложения
  • выберите параметр «настройка модуля»
  • измените платформу ADK как то, что вам нужно
  • Нажмите «Применить»

gradle автоматически перестроит проект.

Как сейчас Android Studio стабильна, есть простой способ сделать это.

  • Щелкните правой кнопкой мыши файл проекта
  • Выберите «Открыть настройки модуля»
  • Перейдите на вкладку «Ароматизаторы».

  1. Выберите Min SDK Version из выпадающего списка

PS: Хотя на этот вопрос уже был дан ответ, но Android Studio немного изменила его стабильный выпуск. Таким образом, простой прямой способ поможет любому новому поиску ответа приземлиться здесь.

В студии Android вы можете легко нажать:

  • Ctrl + Shift + Alt + S .
  • Если у вас есть более новая версия android studio , чем сначала нажмите на приложение. чем продолжить с шага 3 следующим образом.
  • Откроется окно с набором параметров
  • Перейдите в Flavors, и на самом деле все, что вам нужно

Вы также можете изменить versionCode вашего приложения.

В build.gradle измените minSdkVersion 13 на minSdkVersion 8 . Это все, что вам нужно сделать. Я решил свою проблему, только делая это.

В соответствии с этим ответом вы просто не включаете minsdkversion в файл manifest.xml, а система сборки будет использовать значения из файла build.gradle и поместите информацию в окончательный apk.

Поскольку система сборки нуждается в этой информации, это имеет смысл. Вам не нужно указывать эти значения два раза.

Вам просто нужно синхронизировать проект после изменения файла build.gradle , но Android Studio 0.5.2 отображает желтую строку состояния поверх окна редактора build.gradle, чтобы помочь вам

Также обратите внимание на наличие как минимум двух файлов build.gradle : один мастер и один для приложения/модуля. Тот, который нужно изменить, находится в приложении/модуле, он уже включает свойство minSdkVersion во вновь сгенерированном проекте.

Если у вас возникли проблемы с указанием целевой SDK для API Google вместо базового пакета SDK, просто измените compileSdkVersion 19 на compileSdkVersion «Google Inc.:Google APIs:19»

Также, как и обновление манифеста, обновите файл модуля build.gradle тоже (он указан в панели проекта чуть ниже манифеста — если там нет minSdkVersion ), вы смотрите на неправильный, так как там пара). Перестроить и все должно быть хорошо.

Для последней версии Android Studio v2.3.3 (11 октября 2017 года):
1. Нажмите View в строке меню
2. Нажмите «Открыть настройки модуля» 3. Откройте вкладку Flavors
4. Выберите Min Sdk версию, которая вам нужна
6. Нажмите OK

Читайте также:  Lords at war для android

Источник

Как изменить версию android и номер версии кода в Android Studio?

Как изменить версию android и номер версии кода Android Studio? Я хочу изменить файл apk (приложение) в Google Play, и мне нужно изменить версию android и номер версии кода. Я пробовал с этим в AndroidManifest.xml-файл в Android Studio:

но это не будет работать. Когда я попытался опубликовать его в Google Play, он отобразил, что я должен изменить имя и код версии android. Помощь Pls.

9 ответов

поехать в построить.Gradle в и установите код версии и имя внутри defaultConfig элемент

самый простой способ установить версию в Android Studio:

нажмите SHIFT + CTRL+ALT+S (или файл -> структура проекта -> приложение)

выберите вкладку «вкусы»

последние два поля ‘код’ и ‘версии’

вы можете определить свой versionName и versionCode в вашем модуле такой :

нажмите Ctrl+Alt+Shift+S в Android studio или перейдите в файл > структура проекта. Выберите приложение, на левой стороне вкладку и выберите стеариновая кислота на правой стороне по умолчанию config измените код , имя и т. д.

откройте сборку.gradle файл и убедитесь, что у вас есть versionCode и versionName внутри defaultConfig элемент. Если нет, добавьте их. См.этой ссылке для более подробной информации.

вы можете управление версиями приложений мудро С помощью Расширенный Плагин Версии Сборки для Gradle.

вам просто нужно включить плагин в yout build.gradle :

и затем вы можете использовать функции управления версиями (и, очевидно, настройка них):

для получения дополнительной информации, взгляните на официальная документация.

перейти в сборку.gradle и установить код версии и имя внутри элемента defaultConfig

после обновления файла манифеста вместо создания проекта перейдите в командную строку и выберите путь . bld\Debug\платформы\android. Выполните команду «Ant release». Твой новый релиз.apk-файл будет иметь новый код версии.

Источник

Обновляемся на новую версию API Android по наставлению Google

Скоро выходит Android 12, но в этом августе уже с 11-й версии разработчикам придётся использовать новые стандарты доступа приложений к внешним файлам. Если раньше можно было просто поставить флаг, что ваше приложение не поддерживает нововведения, то скоро они станут обязательными для всех. Главный фокус — повышение безопасности.

Переход на новую версию API — довольно трудоёмкая операция, требующая больших затрат на её поддержку при введении крупных апдейтов. Далее расскажу немного про наш переход и возникшие при этом трудности.

Что происходит

Если вы уже знакомы с теорией, то этот раздел можно пропустить — тут я хочу поверхностно сравнить подходы к предмету в разных версиях операционной системы.

В Android есть внутреннее Internal Storage (IS) и внешнее хранилище External Storage (ES). Исторически это были встроенная память в телефоне и внешняя SD-карта, поэтому ES был больше, но медленнее и дешевле. Отсюда и разделение — настройки и критически важное записывали в IS, а в ES хранили данные и большие файлы, например, медиа. Потом ES тоже стал встраиваться в телефон, но разделение, по крайней мере логическое, осталось.

У приложения всегда есть доступ к IS, и там оно может делать что угодно. Но эта папка только для конкретного приложения и она ограничена в памяти. К ES нужно было получать доступ и, кроме манипуляции со своими данными, можно было получить доступ к данным других приложений и производить с ними любые действия (редактировать, удалять или украсть).

Но после разделения на внутреннее и внешнее хранилища все равно оставались проблемы. Многие приложения могли хранить чувствительную информацию не только в IS, но и в ES — то есть ответственность лежала целиком на разработчиках и на том, кто хочет завладеть файлами.

Читайте также:  Boot from android device

В Android решили всё это переделать ещё в 10-й версии, а в 11-й это стало обязательным.

Чтобы минимизировать риски для пользователя в Google решили внедрить Scoped Storage (SS) в ES. Возможность проникнуть в папки других приложений убрали, а доступ есть только к своим данным — теперь это сугубо личная папка. А IS с 10-й версии ещё и зашифрована по умолчанию.

В Android 11 Google зафорсировала использование SS — когда таргет-версия SDK повышается до 30-й версии API, то нужно использовать SS, иначе будут ошибки, связанные с доступом к файлам. Фишка Android в том, что можно заявить совместимость с определённой версией ОС. Те, кто не переходили на 11, просто говорили, что пока не совместимы с этой версий, но теперь нужно начать поддерживать нововведения всем. С осени не получится заливать апдейты, если не поддерживаешь Android 11, а с августа нельзя будет заливать новые приложения.

Если SS не поддерживается (для девайсов ниже 10-й версии), то для доступа к данным других приложений требуется получить доступ к чтению и записи в память. Иначе придётся получать доступ к файлам через Media Content, Storage Access Framework или новый, появившийся в 11-м Android, фреймворк Datasets в зависимости от типа данных. Здесь тоже придётся получать разрешение доступа к файлу, но по более интересной схеме. Когда расшариваемый файл создаёшь сам, то доступ к нему не нужен. Но если переустановить приложение — доступ к нему опять потребуется. К каждому файлу система привязывает приложение, поэтому когда запрашиваешь доступ, его может не оказаться. Особо беспокоиться не нужно, это сложно отследить, поэтому лучше просто сразу запрашивать пермишен.

Media Content, SAF и Datasets относятся к Shared Storage (ShS). При удалении приложения расшаренные данные не удаляются. Это полезно, если не хочется потерять нужный контент.

Хотя даже при наличии SS можно дать доступ к своим файлам по определённой технологии — через FileProvider можно указать возможность получения доступа к своим файлам из другого приложения. Это нормально, потому что файлы расшаривает сам разработчик.

Также добавилась фича — если приложение не использовалось несколько месяцев, то снимаются все пермишены и доступы к системным элементам. По best practice разрешение запрашивается по необходимости (то есть непосредственно перед использованием того, на что спрашиваем разрешение), поэтому мы просто перед выполнением какого-либо действия проверяем, есть ли у нас пермишены. Если нет, то запрашиваем.

В то же время перекрыли доступы к приложениям внутри девайса. Если раньше можно было отследить, что установлены определённые приложения и отправлять к ним соответствующие интенты, то сейчас мы должны прямо в манифесте прописать, что работаем именно с этими приложениями, и только после этого получить доступ.

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

Перейдём к практике.

Переход на новую версию

Основная функциональность по работе с файлами в приложении iFunny представлена в виде сохранения мемов в память и расшаривания их между приложениями. Это было первое, что требовалось починить.

Для этого выделили в общий интерфейс работу с файлами, реализация которого зависела от версии API.

FilesManipulator представляет собой интерфейс, который знает, как работать с файлами и предоставляет разработчику API для записи информации в файл. Copier — это интерфейс, который разработчик должен реализовать, и в который передаётся поток вывода. Грубо говоря, мы не заботимся о том, как создаются файлы, мы работаем только с потоком вывода. Под капотом до 10-й версии Android в FilesManipulator происходит работа с File API, после 10-й (и включая её) — MediaStore API.

Читайте также:  Finish intent in android

Рассмотрим на примере сохранения картинки.

Так как операция сохранения медиафайлов достаточно длительная, то целесообразно использовать MediaStore.Images.Media.IS_PENDING , которая при установлении значения 0 не дает видеть файл приложениям, отличного от текущего.

По сути, вся работа с файлами реализована через эти классы. Шаринг в другие приложения автоматически сохраняют медиа в память устройства и последующая работа с URI уже происходит по новому пути. Но есть такие SDK, которые ещё не успели перестроиться под новые реалии и до сих пор используют File API для проверки медиа. В этом случае используем кеш из External Storage и при необходимости провайдим доступ к файлу через FileProvider API.

Помимо ограничений с памятью в приложениях, таргетированных на 30-ю версию API, появилось ограничение на видимость приложения. Так как iFunny использует шаринг во множество приложений, то данная функциональность была сломана полностью. К счастью, достаточно добавить в манифест query, открывающую область видимости к приложению, и можно будет также полноценно использовать SDK.

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

После проверок запуска UI-тестов на девайсах с версиями API 29-30 было выявлено, что они также перестали корректно отрабатываться.

Первоначально в LogCat обнаружил, что приложение не может приконнектиться к процессу Orchestrator и выдает ошибку java.lang.RuntimeException: Cannot connect to androidx.test.orchestrator.OrchestratorService.

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

Тест удачно запустился, но возникла другая ошибка — Allure не может сохранить отчёт в память устройства, падает с ошибкой.

Очевидно из-за Scoped Storage стало невозможно сохранять файлы в другие папки, поэтому снова почитав документацию по управлению файлами в памяти на девайсе, обнаружил интересный раздел. Там рассказано, как для нужд тестов открыть доступ к папкам девайса, но с существенными ограничениями, которые можно почитать тут.

Так как нам нужно использовать этот пермишен только для тестов, то нам условия подходят. Поэтому я быстренько написал свой ShellCommandExecutor, который выполняет команду adb shell appops set —uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow на создании раннера тестов.

На Android 11 тесты удачно запустились и стали проходить без ошибок.

После попытки запуска на 10-й версии Android обнаружил, что отчет Allure также перестал сохраняться в память девайса. Посмотрев issue Allure, обнаружил, что проблема известная, как и с 11-й версией. Достаточно выполнить команду adb shell appops set —uid PACKAGE_NAME LEGACY_STORAGE allow . Сказано, сделано.

Запустил тесты — всё еще не происходит сохранения в память отчёта. Тогда я обнаружил, что в манифесте WRITE_EXTERNAL_STORAGE ограничен верхней планкой до 28 версии API, то есть запрашивая работу памятью мы не предоставили все разрешения. После изменения верхней планки (конечно, для варианта debug) и запроса пермишена на запись тесты удачно запустились и отчёт Allure сохранился в память устройства.

Добавлены следующие определения пермишенов для debug-сборки.

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

Источник

Оцените статью