¿Cómo construir Android gradle proyecto que contiene módulos con diferentes compileSdkVersion, targetSdkVersion y minSdkVersion?
Mi proyecto de biblioteca de Android se compone de cuatro módulos:
- proyecto
- base
- fábrica
- V14
- V18
Aquí hay una captura de pantalla de esta configuración de IntelliJ:
- Error de proyecto de Android Studio Library
- Programas funcionan bien con LibGDX -desktop pero no LibGDX - Android?
- Cómo cambiar el directorio libs en Gradle?
- Varios archivos dex definen Lcom / google / firebase / FirebaseException
- Cómo averiguar cuántos métodos se agregan con una biblioteca en Android Studio / Gradle
Mis módulos utilizan ajustes de nivel SDK de Android muy específicos:
- base
compileSdkVersion 19
-
minSdkVersion 14
-
targetSdkVersion 19
- fábrica
-
compileSdkVersion 19
-
minSdkVersion 14
-
targetSdkVersion 19
-
- V14
-
compileSdkVersion 17
-
minSdkVersion 14
-
targetSdkVersion 17
-
- V18
-
compileSdkVersion 18
-
minSdkVersion 18
-
targetSdkVersion 18
-
A medida que se lanzan nuevas versiones de Android, los módulos de base y de fábrica pueden tener sus niveles compileSdkVersion
y targetSdkVersion
. Sin embargo, v14 y v18 ambos absolutamente no pueden seguir el juego con esto.
Mis módulos dependen unos de otros de maneras muy específicas:
- base
- No depende de ningún otro módulo
- fábrica
- Depende de la base, v14 y v18
- V14
- Depende de la base
- V18
- Depende de la base
Así que cuando voy a construir mi proyecto, recibo este error:
Error:Gradle: Execution failed for task ':v14:processReleaseManifest'. > Manifest merging failed. See console for more info.
Cuando construyo vía el terminal usando ./gradlew build --stacktrace
, consigo un poco más información:
:v14:processReleaseManifest [/blahblah/project/v14/build/exploded-aar/blahblah/base/unspecified/AndroidManifest.xml:2] Main manifest has <uses-sdk android:targetSdkVersion='17'> but library uses targetSdkVersion='19' :v14:processReleaseManifest FAILED
Y aquí está mi archivo v14 AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?> <manifest package="com.example.v14"> <application /> </manifest>
(Mi archivo base AndroidManifest.xml
es casi exactamente idéntico)
<?xml version="1.0" encoding="utf-8"?> <manifest package="com.example"> <application /> </manifest>
Este error no tiene mucho sentido para mí. En primer lugar, no especifico los niveles de versión en ninguno de mis cuatro archivos diferentes de AndroidManifest.xml
(y en su lugar, dejo que esos valores se hereden a través de mis cuatro archivos build.gradle
diferentes).
En segundo lugar, no tengo un "manifiesto principal". El módulo base es probablemente lo más parecido que tengo a eso, y así exactamente cómo terminó el módulo v14 como el "manifiesto principal" que encuentro bastante confuso.
Por último, si este proyecto de configuración no es posible, entonces estoy sorprendido. Esta configuración de módulo es absolutamente trivial para configurar en un proyecto de estilo Eclipse. Es como he estado construyendo la biblioteca por meses.
Por cierto, mi meta final es que todo esto se compile en un único archivo .jar
, que mi proyecto actual de Eclipse puede hacer. Es sólo que estoy tratando de migrar por completo a gradle y no quedar atrás en un barco que se hunde …
¿Algunas ideas? Si es necesario, puedo publicar mis varios archivos build.gradle
( build.gradle
, settings.gradle
…). Sólo tratando de evitar sobrecargar completamente este post.
Editar (27 de mayo de 2014)
Se ha añadido una captura de pantalla de la configuración de mi módulo al principio de esta publicación.
- Set applicationApk y instrumentationApk para la cuchara Gradle Plugin
- Módulo de Android Studio que depende de las pruebas de otro módulo
- No deje de generar gradle si una prueba falla con el gradle-android-test-plugin
- Módulo de importación de Android Studio Error de generación de Gradle
- Actualización del proyecto a Android Studio 1.0 (problemas de Gradle)
- Errores de Gradle en Android Studio
- Importar proyecto de biblioteca varias veces en Android Studio 1.3.1 hace que la biblioteca desaparezca
- Gradle Error: No se ha especificado ningún valor para la propiedad 'buildConfigPackageName'
Si está utilizando sabores según la guía del usuario del complemento Gradle :
defaultConfig
proporciona la configuración base para todos los sabores y cada sabor puede anular cualquier valor.
Por ejemplo, puede tener la siguiente configuración en su archivo build.gradle:
android { ... defaultConfig { ... compileSdkVersion 19 minSdkVersion 14 targetSdkVersion 19 } productFlavors { base { compileSdkVersion 19 minSdkVersion 14 targetSdkVersion 19 } factory { compileSdkVersion 19 minSdkVersion 14 targetSdkVersion 19 } v14 { compileSdkVersion 17 minSdkVersion 14 targetSdkVersion 17 } v18 { compileSdkVersion 18 minSdkVersion 18 targetSdkVersion 18 } } }
Además, tampoco es necesario establecer el nombre del paquete en el manifiesto. Puede configurarlas como las siguientes:
android { ... productFlavors { base { packageName "com.example" ... } v14 { packageName "com.example.v14" ... } ... } }