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 :)

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.


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


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'
  ,...
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.