Как импортировать проект Android как библиотеку и НЕ компилировать его как apk (Android studio 1.0)

120

Я попытался импортировать проект (projLib) как зависимость для другого проекта (projAPK).

projAPK gradle имеет это:

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

но когда я синхронизирую градиент, он дает эту ошибку:

Ошибка: зависимость Android_2015: projLib: в проекте не указана projAPK разрешается в архив APK, который не поддерживается как зависимость компиляции. Файл: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

поэтому я думаю, есть два решения этого:

  1. как-то заставить gradle думать, что projLib - это библиотека, которую не следует компилировать в apk
  2. как-то заставить gradle НЕ компилировать projLib явно

Проблема в том, что я не мог найти, как это сделать. Было бы здорово, если бы вы могли помочь :)

Вик Чжоу
источник

Ответы:

330

В файле build.gradle projLib вы увидите такую ​​инструкцию:

apply plugin: 'com.android.application'

который сообщает Gradle создать его как приложение, генерирующее APK. Если вы измените его на это:

apply plugin: 'com.android.library'

он будет построен как библиотека, генерирующая AAR, и она должна работать.

Если вам также понадобится projLib для создания отдельного APK, вам придется провести некоторый рефакторинг, чтобы вывести общий код, который вам нужен, в третий модуль библиотеки, и чтобы оба APK зависели от него.

Библиотекам не разрешено устанавливать объект applicationId, поэтому, если вы видите сообщение об ошибке, удалите его из сценария сборки библиотеки.

Скотт Барта
источник
Спасибо, сэр, это сработало. Можно ли порекомендовать мне какую-нибудь литературу / документацию по этим плагинам?
Вик Чжоу
13
Я попробовал это и получил новую ошибку: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo - это пакет в библиотеке, который я пытался импортировать как модуль.
Azurespot
13
Я просто удалил строку идентификатора приложения из defaultConfig {}, и она сработала.
ericharlow 05
также вам нужно будет добавить 'tools: replace = "android: icon" в <application ...> ..., чтобы переопределить основной значок
Ric17101
24

В файле модуля gradle -

Заменить apply plugin: 'com.android.application' наapply plugin: 'com.android.library'

Затем удалите applicationId "xxx.xxx.xxxx"

Очистить и построить

san88
источник
все делается в файле модуля gradle
Влад
1

просто добавьте эти строки в gradleфайл библиотеки и удалите другие разделы

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'
  ,...
}
Хамидреза Садех
источник