Android projesi kitaplık olarak nasıl içe aktarılır ve apk olarak derlenmez (Android studio 1.0)


120

Başka bir projeye (projAPK) bağımlılık olarak bir projeyi (projLib) içe aktarmaya çalıştım.

projAPK gradle şuna sahiptir:

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

ancak derecelendirmeyi senkronize ettiğimde şu hatayı veriyor:

Hata: Bağımlılık Android_2015: projLib: projede belirtilmemiş projAPK, derleme bağımlılığı olarak desteklenmeyen bir APK arşivine çözümleniyor. Dosya: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

sanırım bunun için iki çözüm var:

  1. bir şekilde gradle'ın projLib'in apk'ye derlenmemesi gereken bir kütüphane olduğunu düşünmesini sağlayın
  2. bir şekilde gradle'ı projLib'i açıkça derlemeyin

Sorun şu ki, bunların hiçbirini nasıl yapacağımı bulamadım. Yardım edebilirseniz harika olur :)

Yanıtlar:


330

In projLib 'ın build.gradle dosyasında, böyle bir açıklama göreceksiniz:

apply plugin: 'com.android.application'

Bu, Gradle'a bir APK oluşturarak onu bir uygulama olarak oluşturmasını söyler. Buna değiştirirseniz:

apply plugin: 'com.android.library'

bir AAR oluşturarak bir kütüphane olarak inşa edecek ve çalışmalıdır.

Ayrı bir APK oluşturmak için projLib'e de ihtiyacınız varsa , ihtiyacınız olan ortak kodu üçüncü bir kitaplık modülüne çekmek ve her iki APK'nin de buna bağlı olmasını sağlamak için biraz yeniden düzenleme yapmanız gerekir.

Kitaplıkların applicationIdbir hata mesajı ayarlamasına izin verilmez , bu nedenle bu etkiye yönelik bir hata mesajı görürseniz, onu kitaplığın oluşturma komut dosyasından kaldırın.


Teşekkür ederim efendim, bu işe yaradı. Bu eklenti şeyler hakkında bana önerebileceğiniz herhangi bir okuma / belge var mı?
Vic Zhou

13
Bunu denedim ve yeni bir hata aldım: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo, kütüphanede modül olarak içe aktarmaya çalıştığım bir paket.
Azurespot

13
Uygulama kimliği satırını defaultConfig {} 'den kaldırdım ve işe yaradı.
ericharlow

ayrıca ana simgeyi geçersiz kılmak için <application ...> ... üzerine 'tools: replace = "android: icon" eklemeniz gerekecek
Ric17101

24

Modül gradle dosyasında -

Değiştir apply plugin: 'com.android.application' ileapply plugin: 'com.android.library'

Sonra kaldır applicationId "xxx.xxx.xxxx"

Temizleyin ve Oluşturun


her şey modül gradle dosyasında yapıyor
Vlad

1

sadece bu satırları kitaplık gradledosyasına ekleyin ve diğer bölümleri kaldırın

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'
  ,...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.