Comment importer un projet Android en tant que bibliothèque et ne PAS le compiler en tant qu'apk (Android Studio 1.0)

120

J'ai essayé d'importer un projet (projLib) en tant que dépendance pour un autre projet (projAPK).

projAPK gradle a ceci:

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

mais quand je synchronise le gradle, cela donne cette erreur:

Erreur: Dépendance Android_2015: projLib: non spécifié sur le projet projAPK se résout en une archive APK qui n'est pas prise en charge en tant que dépendance de compilation. Fichier: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

donc je suppose qu'il y a deux solutions à cela:

  1. faire en quelque sorte penser à gradle que projLib est une bibliothèque qui ne devrait pas être compilée en apk
  2. faire en quelque sorte que gradle ne compile PAS explicitement le projLib

Le problème est que je n'ai pas trouvé comment faire quoi que ce soit. Ce serait génial si vous pouviez aider :)

Vic Zhou
la source

Réponses:

330

Dans projLib fichier build.gradle de, vous verrez une déclaration comme celle - ci:

apply plugin: 'com.android.application'

qui dit à Gradle de le construire en tant qu'application, générant un APK. Si vous le remplacez par ceci:

apply plugin: 'com.android.library'

il se construira comme une bibliothèque, générant un AAR, et cela devrait fonctionner.

Si vous avez également besoin de projLib pour générer un APK séparé, vous devrez effectuer une refactorisation pour extraire le code commun dont vous avez besoin dans un troisième module de bibliothèque, et faire en sorte que les deux APK en dépendent.

Les bibliothèques ne sont pas autorisées à définir un applicationId, donc si vous voyez un message d'erreur à cet effet, supprimez-le du script de construction de la bibliothèque.

Scott Barta
la source
Merci monsieur, cela a fonctionné. Y a-t-il une lecture / documentation que vous pouvez me recommander sur ces plugins?
Vic Zhou
13
J'ai essayé cela et j'ai eu une nouvelle erreur: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.le StaggeredGridViewDemo est un package dans la bibliothèque que j'ai essayé d'importer en tant que module.
Azurespot
13
Je viens de supprimer la ligne d'identification de l'application de defaultConfig {} et cela a fonctionné.
ericharlow
vous devrez également ajouter 'tools: replace = "android: icon" sur <application ...> ... pour remplacer l'icône principale
Ric17101
24

Dans le fichier gradle du module -

Remplacer apply plugin: 'com.android.application' parapply plugin: 'com.android.library'

Puis retirez applicationId "xxx.xxx.xxxx"

Nettoyer et construire

san88
la source
tout se passe dans le fichier gradle du module
Vlad
1

ajoutez simplement ces lignes au gradlefichier de bibliothèque et supprimez les autres sections

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
la source