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 :)

Vic Zhou
fuente

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.

Scott Barta
fuente
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

san88
fuente
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'
  ,...
}
Hamidreza Sadegh
fuente