2014-12-17 15 views
117

Ho provato a importare un progetto (projLib) come dipendenza per un altro progetto (projAPK).Come importare il progetto Android come libreria e NON compilarlo come apk (Android studio 1.0)

projAPK Gradle ha questo:

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

ma quando la sincronizzazione del Gradle dà questo errore:

Error:Dependency Android_2015:projLib:unspecified on project projAPK resolves to an APK archive which is not supported as a compilation dependency. File: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

quindi credo che ci sono due soluzioni a questo:

  1. in qualche modo pensiamo che ProjLib sia una libreria che non dovrebbe essere compilata in apk
  2. in qualche modo fanno Gradle NON compilare il projLib esplicitamente

Il problema è, non riuscivo a trovare il modo di fare nulla di tutto ciò. sarebbe fantastico se voi ragazzi può aiutare :)

risposta

325

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

apply plugin: 'com.android.application' 

che racconta Gradle di costruire come un applicazione, generando un APK. Se lo modifichi in questo modo:

apply plugin: 'com.android.library' 

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

Se hai bisogno anche projLib per generare un APK separata, allora dovrete fare un po 'di refactoring per tirare il codice comune che è necessario uscire in un terzo modulo di libreria, e hanno entrambi APK dipendere da esso.

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

+0

Grazie signore, questo ha funzionato. C'è qualche lettura/documentazione che mi puoi consigliare su questi plugin? –

+0

http://tools.android.com/tech-docs/new-build-system –

+12

Ho provato e ho ricevuto un nuovo errore: 'Errore: i progetti di libreria non possono impostare applicationId. applicationId è impostato su 'com.bulletnoid.android.widget.StaggeredGridViewDemo' nella configurazione di default. Lo StaggeredGridViewDemo è un pacchetto nella libreria che ho provato ad importare come modulo. – Azurespot

23

Nel file di Gradle modulo -

Sostituireapply plugin: 'com.android.application' con apply plugin: 'com.android.library'

Poi rimuovereapplicationId "xxx.xxx.xxxx"

pulito e costruire

+0

tutto ciò che sta facendo nel file gradle modulo –

+1

Questo funziona –

1

solo aggiungi queste righe al file libreria gradle e rimuovi 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' 
    ,... 
} 
Problemi correlati