Cómo importar un proyecto de Android como biblioteca y NO compilarlo como apk (Android studio 1.0)


120

Traté de importar un proyecto (projLib) como dependencia para otro proyecto (projAPK).

projAPK gradle tiene esto:

dependencies {
    compile project(':libs:NewsAPI')
    compile project(':projLib')
}

pero cuando sincronizo el gradle me da este error:

Error: dependencia Android_2015: projLib: no especificado en el proyecto, projAPK se resuelve en un archivo APK que no es compatible como una dependencia de compilación. Archivo: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

así que supongo que hay dos soluciones para esto:

  1. de alguna manera hace que Gradle piense que projLib es una biblioteca que no debe compilarse para apk
  2. de alguna manera hacer que gradle NO compile projLib explícitamente

El problema es que no pude encontrar cómo hacer nada de eso. Sería genial si ustedes pueden ayudar :)

Respuestas:


330

En projLib archivo build.gradle 's, verá una declaración como esta:

apply plugin: 'com.android.application'

que le dice a Gradle que lo construya como una aplicación, generando un APK. Si lo cambia a esto:

apply plugin: 'com.android.library'

se construirá como una biblioteca, generando un AAR, y debería funcionar.

Si también necesita projLib para generar un APK por separado, tendrá que refactorizar para extraer el código común que necesita en un tercer módulo de biblioteca, y ambos APK dependerán de él.

Las bibliotecas no pueden establecer un applicationId, así que si ve un mensaje de error en ese sentido, elimínelo del script de compilación de la biblioteca.


Gracias señor, esto funcionó. ¿Hay alguna lectura / documentación que pueda recomendarme sobre estos complementos?
Vic Zhou

13
Lo intenté y obtuve un nuevo error: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo es un paquete en la biblioteca que intenté importar como módulo.
Azurespot

13
Acabo de eliminar la línea de Id de la aplicación de defaultConfig {} y funcionó.
ericharlow

también necesitará agregar 'tools: replace = "android: icon" en la <aplicación ...> ... para anular el icono principal
Ric17101

24

En el archivo gradle del módulo :

Reemplazar apply plugin: 'com.android.application' conapply plugin: 'com.android.library'

Luego quitar applicationId "xxx.xxx.xxxx"

Limpiar y construir


todo está haciendo en el archivo gradle del módulo
Vlad

1

simplemente agregue estas líneas al gradlearchivo de la biblioteca y elimine otras secciones

apply plugin: 'com.android.library'

android {
   compileSdkVersion 23
   buildToolsVersion '23.0.2'
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.squareup.picasso:picasso:2.4.0'
   compile 'com.google.code.gson:gson:2.2.4'
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile 'com.android.support:gridlayout-v7:23.1.1'
  ,...
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.