Jak zaimportować projekt Android jako bibliotekę i NIE kompilować go jako APK (Android Studio 1.0)

120

Próbowałem zaimportować projekt (projLib) jako zależność dla innego projektu (projAPK).

projAPK gradle ma to:

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

ale kiedy zsynchronizuję gradle, pojawia się ten błąd:

Błąd: Zależność Android_2015: projLib: nieokreślona w projekcie projAPK jest rozwiązywana do archiwum APK, które nie jest obsługiwane jako zależność kompilacji. Plik: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

więc myślę, że są dwa rozwiązania tego problemu:

  1. w jakiś sposób sprawia, że ​​gradle myśli, że projLib jest biblioteką, której nie należy kompilować do apk
  2. w jakiś sposób powoduje, że gradle NIE kompiluje jawnie projLib

Problem w tym, że nie mogłem znaleźć, jak to zrobić. Byłoby wspaniale, gdybyście mogli pomóc :)

Vic Zhou
źródło

Odpowiedzi:

330

W pliku build.gradle projLib zobaczysz takie oświadczenie:

apply plugin: 'com.android.application'

który mówi Gradle, aby skompilował go jako aplikację, generując plik APK. Jeśli zmienisz to na to:

apply plugin: 'com.android.library'

będzie budować jako bibliotekę, generując AAR i powinno działać.

Jeśli potrzebujesz również projLib do wygenerowania oddzielnego pliku APK, będziesz musiał przeprowadzić refaktoryzację, aby pobrać wspólny kod, którego potrzebujesz, do trzeciego modułu biblioteki i uzależnić od niego oba pakiety APK.

Biblioteki nie mogą ustawiać znaku applicationId, więc jeśli zostanie wyświetlony odpowiedni komunikat o błędzie, usuń go ze skryptu kompilacji biblioteki.

Scott Barta
źródło
Dziękuję panu, to zadziałało. Czy jest jakaś lektura / dokumentacja, którą możesz mi polecić na temat tych wtyczek?
Vic Zhou
13
Próbowałem tego i otrzymałem nowy błąd: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo to pakiet w bibliotece, który próbowałem zaimportować jako moduł.
Azurespot
13
Właśnie usunąłem linię Id aplikacji z defaultConfig {} i zadziałało.
ericharlow
również będziesz musiał dodać 'tools: replace = "android: icon" w <application ...> ... aby nadpisać główną ikonę
Ric17101
24

W pliku oceny modułu -

wymienić apply plugin: 'com.android.application' zapply plugin: 'com.android.library'

Następnie usuń applicationId "xxx.xxx.xxxx"

Oczyść i zbuduj

san88
źródło
wszystko dzieje się w pliku gradle modułu
Vlad
1

po prostu dodaj te linie do gradlepliku biblioteki i usuń inne sekcje

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
źródło