Як імпортувати андроїд-проект як бібліотеку, а НЕ компілювати його як apk (Android studio 1.0)


120

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

projAPK gradle має таке:

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

але коли я синхронізую gradle, вона дає цю помилку:

Помилка: залежність 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
Щойно я видалив рядок Id програми з defaultConfig {} і він працював.
ericharlow

також вам потрібно буде додати "інструменти: заміна =" android: icon "у програмі <додаток ...> ..., щоб змінити головну піктограму
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.