Как импортировать проект 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"

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


все делается в файле модуля 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'
  ,...
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.