¿Cómo uso herramientas: overrideLibrary en un archivo build.gradle?

295

Estoy usando las bibliotecas leanback, que requieren Android 17 o posterior. Sin embargo, mi aplicación admite un minSDK de 16, así que recibo un error de compilación de Gradle diciendo

Error:Execution failed for task ':Tasks:processPhoneDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library /Users/mike/Projects/android-for-dummies-v3/Tasks/build/intermediates/exploded-aar/com.android.support/leanback-v17/21.0.2/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage

Cuando miro la documentación de las herramientas de compilación , veo cómo agregar el overrideLibrarymarcador a mi manifiesto, pero el problema es que estoy declarando mi minSdk en mi archivo gradle en lugar de en mi manifiesto.

¿Cómo uso overrideLibrarycuando el minSdk se declara en build.gradle en lugar de en AndroidManifest.xml?

emmby
fuente
No hagas esto. En su lugar, actualice minsdkversion en build.gradle
Dr Deo
44
Hay razones legítimas para hacer esto, como usar condicionalmente una biblioteca probando el nivel de API antes de usarla.
Guillaume Perrot

Respuestas:

568

Abra Android Studio -> Abrir archivo de manifiesto

agregar <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> no olvide incluir xmlns:tools="http://schemas.android.com/tools"también, antes de la <application>etiqueta

ingrese la descripción de la imagen aquí

xDragonZ
fuente
en mi casotools:overrideLibrary="info.hoang8f.fbutton"
shareef
13
Cuidado con las bibliotecas incluidas que contienen <uses-sdk tools:ignore="GradleOverrides">. Esos harán que su tools:overrideLibraryatributo sea ignorado. Ver stackoverflow.com/questions/31062893/…
Theo
1
Mi problema aún existe después de agregar herramientas: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Estaba funcionando, pero de repente dejó de funcionar hoy después de crear una nueva actividad.
arjunkn
me salvaste el día (a)
KunalK
@arjunkn: add <uses-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, si no funciona, comprueba si el espacio de nombres de tus herramientas es correcto o no, xmlns: tools = " schemas. android.com/tools "
NIPHIN
170

no importa que declares tu minSdk en build.gradle. Tiene que copiar overrideLibraryen su AndroidManifest.xml, como se documenta aquí .

<manifest 
    ... >
<uses-sdk tools:overrideLibrary="com.example.lib1, com.example.lib2"/>
    ...
</manifest>

El sistema ignora automáticamente la sdkVersion declarada en AndroidManifest.xml.

Espero que esto resuelva tu problema.

icastell
fuente
1
¿Tiene que especificar alguna versión en uses-sdk? Parece confuso especificar versiones en AndroidManifest que simplemente serán ignoradas
emmby
1
Tienes razón. No es necesario, de todos modos si lo configura en AndroidManifest gradle lo ignorará en el momento de la compilación.
icastell
13
+1 para mostrar dos libs, por ejemplo. No puede usar dos etiquetas separadas use-sdk. así que si desea anular dos o más, puede poner una coma en el medio. ¡¡Gracias!!
Hitesh Chavda
1
pero esto no funcionó para mí usar dos bibliotecas separadas por comas, ¿hay algún problema con mi biblioteca?
Zia Ur Rahman
7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Estaba enfrentando el problema del conflicto entre diferentes versiones de min sdk. Entonces esta solución funcionó para mí.

Kuldeep Saxena
fuente
1

Como la biblioteca lo requiere minSdkVersion 17, puede cambiar lo mismo en el build.gradlearchivo (Módulo: Aplicación):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

y después de esa compilación, el proyecto no debería arrojar ningún error de compilación.

Arpit Namdev
fuente
44
Si bien esto funcionaría, en realidad no responde la pregunta. OP pregunta cómo se usa overrideLibrary. Y hay casos específicos en los que desea anularlo en lugar de cumplir (ya que está bien anularlo)
Zoe
1

Acabo de cambiar minSdkVersion="7"en C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmly funcionó.

Pasos:

  1. Camino: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Valor: <uses-sdk android:minSdkVersion="7"/>
  3. Comando Ran en el nuevo indicador de cmd:

    C:\MyApp>phonegap build android --debug [phonegap] executing 'cordova build android --debug'... [phonegap] completed 'cordova build android --debug'

Manjunath Mruthyunjaya
fuente
1
Esto no responde la pregunta, que es cómo usar overrideLibrarycuando el minSdk se declara en build.gradle.
LarsH
1

acaba de cambiar solo android: minSdkVersion = "16" y funciona perfectamente C: \ MyApp \ plataformas \ android \ CordovaLib \ AndroidManifest.xml

BIRJA KUMAR
fuente
0

use este código en manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>
Ali Bagheri
fuente
0

Como soulution para todas las bibliotecas, podemos hacer coincidir la versión SDK de ellas para que no ocurra ningún evento inesperado

subprojects { 
afterEvaluate {project -> 
    if (project.hasProperty("android")) { 
        android { 
            compileSdkVersion 28 
            buildToolsVersion '28.0.3'
            defaultConfig {
                //It's kinda tricking android studio but anyway it works
                minSdkVersion 17
            }
        } 
    } 
    if (project.hasProperty("dependencies")) {
        dependencies {
            implementation 'com.android.support:support-core-utils:28.0.0'
            implementation 'com.android.support:appcompat-v7:28.0.0'
            implementation 'com.google.android.gms:play-services-base:16.1.0'
        }
    }
} 
}

Elimine las bibliotecas que no usa en su proyecto (gms) y asegúrese de que la versión SDK coincida con los datos de Gradle de su nivel de aplicación

Mohammad f
fuente