Манифест Android: больше нельзя форсировать minSDK. не должен быть объявлен в файле манифеста Android

Возникла небольшая проблема со сборкой.

Получил библиотеку, для которой требуется minSDK: 23, а я все еще хочу поддерживать 21.

Решение

    <uses-sdk
    android:minSdkVersion="21"
    tools:overrideLibrary="a.rogue.library" />

Больше не синхронизируется и показывает

Версия minSdk не должна быть объявлена ​​в файле манифеста Android. Вы можете переместить версию из манифеста в defaultConfig в файле build.gradle. Удалить minSdkVersion и синхронизировать проект Затронутые модули: approot

Странное наблюдение: Синхронизация завершается неудачно, но сборка выполняется успешно. Кроме того, синхронизация после сборки также выполняется успешно.

Однако это нездоровая ситуация:

  • Если я добавлю строку overrideLibrary в манифест - он не будет синхронизироваться.
  • Если я уберу из манифеста строку overrideLibrary - он, конечно, не соберется, потому что там конфликт minSDK.

Любой способ уладить это? Может ли overrideLibrary как-то находиться в build.gradle?

Спасибо


person Maneki Neko    schedule 04.06.2020    source источник
comment
Я думаю, вы импортируете старый проект, я прав?   -  person Kuldeep mourya    schedule 04.06.2020
comment
Нет, мое приложение было создано в Gradle с нуля. Я хочу импортировать aar, но этот aar вынуждает меня прекратить поддержку 21,22, чего я бы не хотел делать :-(   -  person Maneki Neko    schedule 04.06.2020
comment
Вы добавили minSdkVersion 21 в Gradle?   -  person Kuldeep mourya    schedule 04.06.2020
comment
Конечно. Вот и причина конфликта. Вы знаете, слияние манифеста пытается решить, какую версию включить в окончательный манифест. Минимальный SDK корневого модуля меньше, чем SDK библиотеки => Вы запрашиваете у приложения поддержку версии, которая не поддерживается вашими SDK. Если он ставит max, он не подчиняется вашему запросу minSDK. Если это заставит min - ваше приложение может сломаться во время выполнения, и вы даже не узнаете об этом. Это конфликт! Кстати, работает и в обратную сторону, потому что библиотеки автоматически поддерживают уровни API выше своего минимума.   -  person Maneki Neko    schedule 04.06.2020


Ответы (2)


Я также столкнулся с этим сегодня, и, насколько я вижу, он был представлен как часть версии 4.0.0 Плагина Android Gradle (я все еще ищу ссылку), и хотя сначала это выглядит разочаровывающим Я думаю, что это правильно, поскольку на самом деле это позволяет избежать некоторых потенциальных сбоев во время выполнения. (например, когда потребитель вызывает API библиотеки, который опирается на какой-то другой API, который был представлен в более новой версии SDK, но мы все равно заставили его быть старше)

Если вы можете себе позволить, просто вернитесь к предыдущей стабильной версии 3.6.3, и пока все будет в порядке, но разработчики библиотеки выбрали minimumSdkVersion не просто так. Может быть, обратиться к ним, чтобы уточнить причину этого и получить совет. Удачи!

person Zsolt Boldizsár    schedule 08.06.2020

Я просто сделал это, и это сработало. В файле build.gradle на уровне приложения просто убедитесь, что вы указали «minSdkVersion #» в разделе defaultConfig, где упомянутый ранее знак # — это номер SDK, на который вы ориентируетесь. Пример:

android {
compileSdkVersion 30
buildToolsVersion "29.0.2"
defaultConfig {
    applicationId "com.example.ranchhand1"
    minSdkVersion 23
    targetSdkVersion 30
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

}

person Will Buffington    schedule 29.03.2021