Come importare un progetto Android come libreria e NON compilarlo come apk (Android studio 1.0)


120

Ho provato a importare un progetto (projLib) come dipendenza per un altro progetto (projAPK).

projAPK gradle ha questo:

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

ma quando sincronizzo il gradle dà questo errore:

Errore: dipendenza Android_2015: projLib: non specificato nel progetto projAPK si risolve in un archivio APK che non è supportato come dipendenza di compilazione. File: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

quindi immagino che ci siano due soluzioni a questo:

  1. in qualche modo fa pensare a gradle che projLib è una libreria che non dovrebbe essere compilata in apk
  2. in qualche modo fare in modo che gradle NON compili esplicitamente projLib

Il problema è che non sono riuscito a trovare come fare nulla di tutto ciò. Sarebbe fantastico se voi ragazzi poteste aiutare :)

Risposte:


330

In projLib file di build.gradle s', vedrete una dichiarazione come questa:

apply plugin: 'com.android.application'

che dice a Gradle di costruirlo come applicazione, generando un APK. Se lo cambi in questo:

apply plugin: 'com.android.library'

verrà costruito come una libreria, generando una AAR, e dovrebbe funzionare.

Se hai anche bisogno di projLib per generare un APK separato, dovrai fare un po 'di refactoring per estrarre il codice comune di cui hai bisogno in un terzo modulo di libreria, e entrambi gli APK dipendono da esso.

Le librerie non sono autorizzate a impostare un applicationId, quindi se vedi un messaggio di errore in tal senso, rimuovilo dallo script di compilazione della libreria.


Grazie signore, ha funzionato. C'è qualche lettura / documentazione che puoi consigliarmi su queste cose sui plugin?
Vic Zhou

13
L'ho provato e ho ricevuto un nuovo errore: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo è un pacchetto nella libreria che ho provato a importare come modulo.
Azurespot

13
Ho appena rimosso la riga dell'ID dell'applicazione da defaultConfig {} e ha funzionato.
ericharlow

inoltre dovrai aggiungere "tools: replace =" android: icon "su <application ...> ... per sovrascrivere l'icona principale
Ric17101

24

Nel file gradle del modulo -

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

Poi rimuovere applicationId "xxx.xxx.xxxx"

Pulisci e costruisci


tutto sta facendo nel file gradle del modulo
Vlad

1

basta aggiungere queste righe al gradlefile della libreria e rimuovere altre sezioni

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'
  ,...
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.