Como importar projeto android como biblioteca e NÃO compilá-lo como apk (Android studio 1.0)

120

Tentei importar um projeto (projLib) como dependência para outro projeto (projAPK).

O projAPK gradle tem o seguinte:

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

mas quando eu sincronizar o gradle ele dá esse erro:

Erro: Dependência Android_2015: projLib: não especificado no projeto O projAPK resolve para um arquivo APK que não é suportado como dependência de compilação. Arquivo: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

então eu acho que existem duas soluções para isso:

  1. de alguma forma, faça Gradle pensar que o projLib é uma biblioteca que não deve ser compilada para apk
  2. de alguma forma fazer gradle NÃO compilar o projLib explicitamente

O problema é que não consegui descobrir como fazer nada disso. Seria incrível se vocês puderem ajudar :)

Vic Zhou
fonte

Respostas:

330

Em projLib arquivo build.gradle 's, você verá uma declaração como esta:

apply plugin: 'com.android.application'

que instrui o Gradle a construí-lo como um aplicativo, gerando um APK. Se você mudar para isso:

apply plugin: 'com.android.library'

ele será construído como uma biblioteca, gerando um AAR e deve funcionar.

Se você também precisar do projLib para gerar um APK separado, precisará refatorar para obter o código comum necessário para um terceiro módulo da biblioteca e os dois APKs dependerão disso.

As bibliotecas não podem definir um applicationId, portanto, se você vir uma mensagem de erro nesse sentido, remova-a do script de construção da biblioteca.

Scott Barta
fonte
Obrigado senhor, isso funcionou. Existe alguma leitura / documentação que você possa me recomendar sobre essas coisas do plugin?
Vic Zhou
13
Eu tentei isso e recebi um novo erro: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.O StaggeredGridViewDemo é um pacote na biblioteca que tentei importar como um módulo.
Azurespot
13
Acabei de remover a linha de identificação do aplicativo do defaultConfig {} e funcionou.
Ericharlow
você também precisará adicionar 'tools: replace = "android: icon" no <aplicativo ...> ... para substituir o ícone principal #
Ric17101
24

No arquivo gradle do módulo -

Substitua apply plugin: 'com.android.application' porapply plugin: 'com.android.library'

Então remova applicationId "xxx.xxx.xxxx"

Limpar e construir

san88
fonte
tudo está a fazer no arquivo Gradle módulo
Vlad
1

basta adicionar essas linhas ao gradlearquivo da biblioteca e remover outras seções

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
fonte