Решение для INSTALL_FAILED_OLDER_SDK Android Studio
http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги: Android
Полное сообщение об ошибке: Installation did not succeed. The application could not be installed: INSTALL_FAILED_OLDER_SDK The application’s minSdkVersion is newer than the device API level.
означает, что версия SDK устройства, которое я использую, ниже, чем требуемая версия SDK.
Решение: Найдите расположение проекта Расположение проекта \ app \ build.gradle Обратите внимание, что он находится в папке приложения, а не в хорошо известной (в папке gradle). Измените содержимое внутри minSdkVersion Диапазон настройки minSdkVersion — 14–16, И я протестировал targetSdkVersion от 1 до 10000 без каких-либо проблем, но все же не рекомендуется изменять его случайным образом
различается в зависимости от настроек компьютера, не спрашивайте, как я получил этот диапазон, я сам пробовал это долгое время
Измените содержимое внутри minSdkVersion Диапазон настройки minSdkVersion — 14–16, И я протестировал targetSdkVersion от 1 до 10000 без каких-либо проблем, но все же не рекомендуется изменять его случайным образом. различается в зависимости от настроек компьютера, не спрашивайте, как я получил этот диапазон, я сам пробовал это долгое время
Конкретный номер версии выглядит следующим образом
Версия gradle — последняя 3.6.0
На этот раз процесс установки программного обеспечения напоминает мне об использовании очень низкой версии и не может автоматически обновляться до последней версии. Это может быть вызвано только установкой библиотеки tesorflow, которая не подходит для python версии 3.7 из pip на официальном сайте.Я переустановил две версии python, даже 2.0, но версии 3.6 нет, и, наконец, нашел способ установить библиотеку pycharm
Интеллектуальная рекомендация
19.03.21 Я загрузил комплексные обучающие видеоуроки Photoshop CC 2015 и обучающие видеоуроки по новым функциям PS CC 2015. Я просмотрел несколько видео, но мне кажется, что они в основном объясняют н…
…
проверка данных весеннего mvc Два способа проверки данных Spring MVC: 1.JSR303 2.Hibernate Validator Второй метод является дополнением к первому методу Шаги для проверки данных с использованием Hibern…
Существует два способа вызова между сервисами Springcloud: RestTemplate и Feign. Здесь мы представляем сервисы вызова RestTemplate. 1. Что такое RestTemplate RestTemplate — это структура веб-запросов …
1. Понимать предварительный, средний, последующий порядок и иерархическую последовательность бинарных деревьев; Свяжите язык C со структурой данных двоичного дерева; Освойте с…
Вам также может понравиться
Последнее обучение, как использовать Kaldi, чтобы проснуться без использования WSTF, поэтому вам нужно глубоко пойти в Kaldi для обучения. Временное состояние обучения. Три изображения представляют со…
Во время простоя некоторые веб-страницы, которые мы создали, не были завершены, но не хотят, чтобы другие видели, вы можете создать простой эффект шифрования страницы на странице этой веб-страницы, ан…
Расширенные статьи серии Zookeeper 1. NIO, ZAB соглашение, 2PC представления концепции 2. Лидер выборов 3. Рукописный распределенный замок, центр настройки ==================================== 1. NIO,…
Посмотрите на конечный эффект первым DemoPreview.gif SETP1 эффект капли воды Первая реакция на эффект капли воды — нарисовать замкнутую кривую. С помощью события MotionEvent измените радиус во время п…
…
Why — Problem
Xamarin.Android projects by default have a MSBuild property enabled that ends up confusing the developer with a various edge case of what means in an Android Application. It will set the following by default:
This tells the task that we want the latest API version as an argument in the tooling:
if (!AndroidUseLatestPlatformSdk) | |
cmd.AppendSwitchIfNotNull («—max-res-version «, ApiLevel); |
There is then various logic going on to ensure we try to set this to the same :
public string TargetSdkVersion { get; set; } | |
public override bool Execute () | |
{ | |
Log.LogDebugMessage («GetJavaPlatformJar Task»); | |
Log.LogDebugMessage (» AndroidSdkDirectory: {0}», AndroidSdkDirectory); | |
Log.LogDebugMessage (» AndroidSdkPlatform: {0}», AndroidSdkPlatform); | |
Log.LogDebugMessage (» AndroidManifest: {0}», AndroidManifest); | |
var platform = AndroidSdkPlatform; | |
XAttribute target_sdk = null; | |
// Look for targetSdkVersion in the user’s AndroidManifest.xml | |
if (!string.IsNullOrWhiteSpace (AndroidManifest)) { | |
if (!File.Exists (AndroidManifest)) { | |
Log.LogError («Specified AndroidManifest.xml file does not exist: {0}.», AndroidManifest); | |
return false; | |
} | |
try { | |
var doc = XDocument.Load (AndroidManifest); | |
var manifest = doc.Root; | |
if (manifest != null) { | |
var uses_sdk = manifest.Element («uses-sdk»); | |
if (uses_sdk != null) { | |
target_sdk = uses_sdk.Attribute (androidNs + «targetSdkVersion»); | |
if (target_sdk != null && !string.IsNullOrWhiteSpace (target_sdk.Value)) | |
platform = target_sdk.Value; | |
} | |
} | |
} catch (Exception ex) { | |
// If they’re manifest is bad, let’s error them out | |
Log.LogErrorFromException (ex, true); | |
return false; | |
} | |
} | |
platform = GetTargetSdkVersion (platform, target_sdk); | |
JavaPlatformJarPath = Path.Combine (MonoAndroidHelper.AndroidSdk.TryGetPlatformDirectoryFromApiLevel (platform, MonoAndroidHelper.SupportedVersions), «android.jar»); | |
if (!File.Exists (JavaPlatformJarPath)) { | |
Log.LogError («Could not find android.jar for API Level {0}. » + | |
«This means the Android SDK platform for API Level {0} is not installed. » + | |
«Either install it in the Android SDK Manager (Tools > Open Android SDK Manager…), » + | |
«or change your Xamarin.Android project to target an API version that is installed. » + | |
«({1} missing.)», | |
platform, JavaPlatformJarPath); | |
return false; | |
} | |
TargetSdkVersion = platform; | |
Log.LogDebugMessage (» JavaPlatformJarPath: {0}», JavaPlatformJarPath); | |
Log.LogDebugMessage (» TargetSdkVersion: {0}», TargetSdkVersion); | |
return true; | |
} | |
string GetTargetSdkVersion (string target, XAttribute target_sdk) | |
{ | |
string targetFrameworkVersion = MonoAndroidHelper.SupportedVersions.GetIdFromApiLevel (AndroidSdkPlatform); | |
string targetSdkVersion = MonoAndroidHelper.SupportedVersions.GetIdFromApiLevel (target); | |
int frameworkSdk, targetSdk; | |
if (int.TryParse (targetFrameworkVersion, out frameworkSdk) && | |
int.TryParse (targetSdkVersion, out targetSdk) && | |
targetSdk < frameworkSdk) { | |
int lineNumber = ; | |
int columnNumber = ; | |
var lineInfo = target_sdk as IXmlLineInfo; | |
if (lineInfo != null && lineInfo.HasLineInfo ()) { | |
lineNumber = lineInfo.LineNumber; | |
columnNumber = lineInfo.LinePosition; | |
} | |
Log.LogWarning ( | |
subcategory: string.Empty, | |
warningCode: «XA4211», | |
helpKeyword: string.Empty, | |
file: AndroidManifest, | |
lineNumber: lineNumber, | |
columnNumber: columnNumber, | |
endLineNumber: , | |
endColumnNumber: , | |
message: «AndroidManifest.xml //uses-sdk/@android:targetSdkVersion ‘{0}’ is less than $(TargetFrameworkVersion) ‘{1}’. Using API-{2} for ACW compilation.», | |
messageArgs: new[]{ | |
targetSdkVersion, | |
MonoAndroidHelper.SupportedVersions.GetIdFromFrameworkVersion (targetFrameworkVersion), | |
MonoAndroidHelper.SupportedVersions.GetIdFromApiLevel (targetFrameworkVersion), | |
} | |
); | |
return targetFrameworkVersion; | |
} | |
return targetSdkVersion; | |
} |
The general guidance from google is the following:
However since we do not write a in the AndroidManifest.xml unless explicitly overridden, the default behavior will instead be demoted to the and thus Android OS features are not enabled for the API level we expect them to be. Rather we only get OS features up to the .
3 ответа
30
Как изменить targetSdkVersion и minSdkVersion в студии Android
У вас была одна и та же проблема, кроме как прибить ее через пару часов.
Шаг 1
Открыть build.gradle — * Path\Your_Application\app\build.gradle *
Измените значения targetSdkVersion и minSdkVersion на то, что вы хотите.
Шаг 2
В Android-меню stuido найдите «Build» (alt + b @windows) и выберите «Очистить проект»
Надеюсь, что это поможет другим с той же проблемой.
26 март 2014, в 11:35
Поделиться
11
В качестве альтернативы нажмите «Файл» > «Структура проекта» > «Приложение» > «Ароматизаторы» > «Min Sdk Version» и нажмите «ОК» при изменении. Вы также можете изменить версию Target Sdk. Я думаю, что это более аккуратный подход к редактированию файла сборки gradle напрямую.
22 сен. 2016, в 19:46
Поделиться
в build.gradle
Измените эти значения в соответствии с текущим обновлением проекта
в диспетчере sdk
compileSdkVersion 25
buildToolsVersion «25.0.2»
minSdkVersion 15
targetSdkVersion 25
в зависимостях заменить ниже код
compile ‘com.android.support:appcompat-v7:25.1.0’
и синхронизировать проект
24 янв. 2017, в 06:12
Поделиться
Ещё вопросы
- 2Кнопка OnClick не срабатывает при первом нажатии в ASP.NET?
- 2Как вызвать асинхронную задачу внутри таймера?
- 1OPENGL Программирование пользовательского интерфейса
- 1Как метод getLineNumber () в классе StackTraceElement находит фактический номер строки исходного файла Java
- 1Не могу загрузить текстуру в webgl
- Удаление повторяющихся значений из таблицы MySQL, но оставить один
- 1Панды читают файл с разделителями
- 1Добавить пароль (без присмотра) в существующий xlsx без эксклюзивных инструментов Windows
- 1Создать массив из текущего массива с помощью PHP
- Как суммировать количество обследованных домов из таблицы CodeIgniter и MySql
- 1Получить данные Image uint8 без холста
- 1Использование Apache Ivy с netbeans
- 1Объедините несколько файлов CSV в JavaScript, используя фильтрацию
- Список инициализации классов с закрытыми членами
- Как создать div, ссылку и IMG к другому IMG в Javascript
- Как подключить функцию от контроллера к директиве
- 1Выйдите из выполнения в пользовательском классе контроллера в CodeIgniter, чтобы остановить рендеринг представлений
- 1Неожиданная строка json, когда массив json_encode имеет значение объекта в php
- 1Переключение между режимами сохранения активности WebView (без перезагрузки)
- Javascript работает в HTML, но не в файле Javascript
- 1Перезапись URL не найдена
- Аргумент pthread_create использовался в C ++. Каждый раз, когда функция потока получала значение, было одинаковым, почему?
- угловая $ scope. $ apply не работает должным образом с form.submit ()
- Используйте jar-файл Mysql ClusterJ для подключения к кластеру NDB
- 1Какой лучший способ поделиться наблюдаемым свойством между различными компонентами в Vue?
- 1Как я могу проверить (подтвердить), выполнено ли Ember Promise?
- Как подобрать значение накануне?
- общий ранг работает с использованием FIND_IN_SET, но отдел не работает ранг запроса
- Невозможно вызвать конструктор контроллера и отправить функцию
- Угловая ссылка MVC5 изменяется после открытия новой страницы
- Как я могу добавить паузу в эту функцию jquery?
- 1Добавление поля даты и времени для повторного массива
- 1Проблема RuntimeEnvironmentPropertiesConfigurer — при запуске администратора с широким листом на tomcat
- 1почему эта функция возвращает false, когда она должна возвращать true?
- CORS Угловой JS
- 1Как удалить элемент из ListView
- 1Сортировать диапазон ячеек, win32com.client
- Как определить, по какому элементу щелкнули, используя jQuery?
- 1Как настроить OnClickListener для повернутого ImageView?
- Обрезать и центрировать изображение произвольного размера в пределах div
- 1Что такое сообщения в Сервисах Android?
- 2Слушайте изменения буфера обмена на фоне приложения uwp?
- Инвентаризация моей базы данных начинается с 28?
- Чтение данных из JSON в JQuery
- Встроенный Python —
- OpenGL: рендеринг модели с большой прозрачностью текстур, без упорядочивания рисования?
- Рекомендуется обновить строку, если она существует, в противном случае вставьте
- 1питон с использованием последовательности Фибоначчи
- 1Как заставить Spring MVC Controller загружаться лениво?
- Угловой указатель повтора объекта
targetSdkVersion
targetSdkVersion — это свойство, которое сообщает системе, для какой версии Android было разработано и протестировано приложение.
Если пользователь запускает ваше приложение на устройстве с версией Android, которая выше, чем targetSdkVersion, заданный в вашем приложении, то система может запустить некоторое функции обратной совместимости, чтобы ваше приложение по-прежнему выглядело и работало таким образом, каким вы задумывали.
Например:
В Android 12 изменен внешний вид пользовательских уведомлений. Раньше они могли использовать всю область уведомлений, но в системе Android 12 стандартный шаблон применяется ко всем настраиваемым уведомлениям, чтобы они выглядели более согласованными.
Если значение targetSdkVersion меньше 31, система предположит, что вы не тестировали эту функцию, и будет отображать уведомления по-старому, чтобы минимизировать риск того, что уведомление не будет отображаться должным образом. Только после обновления целевой версии SDK до 31 будет использоваться новый вид уведомлений.
Все ли изменения в Android SDK обрабатываются таким образом?
Нет, не все изменения, представленные в новых версиях Android, являются целевыми и используют эти механизмы обратной совместимости. В документации вы можете видеть, что для каждого выпуска версии Android изменения разделены на две группы:
- поведенческие изменения для приложений, ориентированных на определенные версии Android
- и изменения для всех приложений, независимо от того, какой targetSdkVersion они имеют.
Примером последнего может быть введение одноразовых разрешений в Android 11. Когда устройство использует Android версии 11 или выше и приложение запрашивает разрешение на определение местоположения, пользователь может предоставить временный доступ к этим данным, и приложение должно обработать этот выбор, независимо от того, нацелено ли оно на SDK версии 30 или нет.
How — Solution
Proposal 1 — Eliminate and explicitly set and .
This is the approach that Android Studio follows. It makes more sense to explicitly set these items and have the developer learn explicitly what each contribute to the Android application. There is very room for error this way as the user will be responsible for setting their , and .
- Makes future templating easier. Developers only will need to know what they need to support. The and will automatically be set to the highest API level installed.
- There is no sense of a «magic» value that sets the latest API version. Developers will know exactly what values they have set in their project as per the and .
Requires removal of code and alterations to existing build tasks, unit tests, etc.
Proposal 2 — Modify to set the in the
This proposal keeps the current code and explicitly sets the in the to ensure there is no way Android OS feature flags can be set to the .
compileSdkVersion
compileSdkVersion определяет, какая версия Android SDK будет использоваться gradle для компиляции вашего приложения.
Например:
В Android 12, в SDK версии 31, был представлен новый API, который позволяет нам легко реализовать сплэш-скрин. В этом новом API заставку можно настроить с помощью следующих свойств:
Если вы хотите использовать этот API в своем приложении, вам сначала необходимо:
- скачать SDK версии 31 в Android Studio, а затем
- обновить compileSdkVersion до 31 в вашем приложении.
Только тогда вы сможете увидеть эти новые свойства. И только после этого вы можете использовать этот новый API экрана-заставки в своем коде.
А как насчет старых устройств?
Это, конечно, не означает, что вы можете использовать только этот новый API и забыть о пользователях, у которых есть более старые версии Android, где этот API недоступен.
Если minSdkVersion в вашем приложении ниже 31, вам также необходимо предоставить альтернативный способ отображения экрана-заставки для тех старых устройств, которые не имеют доступа к этому новому API.
Точно так же некоторые методы или свойства могут быть объявлены устаревшими в этой версии Android SDK, а некоторые даже удалены. Вот почему после обновления compiledSdkVersion в своем приложении вы часто будете видеть некоторые предупреждения и ошибки во время компиляции, которые необходимо устранить.
Но изменение только compileSdkVersion на самом деле не меняет поведения созданного вами приложения.
Как Android узнает, может ли он использовать новые функции с вашим приложением или нет? Вот где в игру вступает targetSdkVersion.