Android Studio'da bir kütüphane projesi ve kütüphane projesini kullanan bir uygulama projesi nasıl oluşturulur


164

Gradle build sisteminde ve IntelliJ'de yeniyim.

Peki bir Android Kütüphane Projesi'ni (örn. Com.myapp.lib1) ve uygulama projesini (örn. Com.myapp.app) nasıl oluşturabilirim ve derleme sisteminin uygulama projesinde com.myapp.lib1 içermesini nasıl sağlayabilirim?

Proje Yapısı -> Modüller -> Uygulamam projesine gittim ve lib projesine bir bağımlılık ekledim. IntelliJ artık uygulama projesinde kullanıldığında lib projesindeki sınıfları tanıyabilir, ancak uygulama projesini çalıştırdığımda aşağıdaki gibi hatalar var:

Gradle: error: package com.myapp.lib1 does not exist

1
Uygulamamın Ücretsiz / Ücretli sürümlerini oluşturmak için Android Kütüphaneleri kullanıyordum. Yeni Gradle oluşturma sistemi, bu yaklaşımı Yapı Varyantları konseptiyle kullanılmaz hale getirir. Artık otomatik olarak aynı koddan farklı imzalı APK'ler oluşturabilirsiniz. Keşke bunu daha önce bilseydim.
theczechsensation

1
@ theczechsensation - detaylandırabilir misiniz? APK'yı tam sürüm için yükledikten sonra, APK'yı ücretsiz sürüm için yüklemeye çalıştım, ancak aynı paket adını kullanarak. Google Play Store (GPS) bana bu paket adını zaten kullandığımı belirten bir mesaj verdi. Gradle hakkında söyledikleriniz, iki ayrı pakette iki ayrı uygulamaya ihtiyacım olmadığı anlamına mı geliyor?
DSlomer64

İşte mükemmel cevap stackoverflow.com/a/31366602/1118772 . Aqib Mumtaz cevaplarda bahsetti, ama sonunda. Başka yollarla zaman harcamak yerine, bununla gidebilirsiniz. philosophicalhacker.com/2014/10/02/...
Noundla Sandeep

Resimsel açıklama ile kütüphaneler ilginç ilginç ekleme .
Harish

Yanıtlar:


111

Kütüphane oluşturmak için:

Dosya> Yeni Modül

Android Kütüphanesi'ni seçin

lib

Kütüphaneyi kullanmak için kütüphaneyi bağımlılık olarak ekleyin:

Dosya> Proje Yapısı> Modüller> Bağımlılıklar

dep

Ardından modülü (android kütüphanesi) modül bağımlılığı olarak ekleyin.

modül ekle

Projenizi çalıştırın. O olacaktır çalışır.


194
Bu, modülün proje içindeki dosyalarını oluşturur. Modülün başka bir uygulama ile kullanılabilmesi için projenin dışında olmasını isterseniz ne olur?
rrbrambley

2
@rrbrambley: Bir modülü birden fazla projede yeniden kullanmanın bir yolunu buldum. Windows için winbolic link adlı bir uygulama kullanarak (NTFS Junction) klasör bağlantıları oluşturdum. Birden fazla projede yeniden kullanmak istediğim bir modülüm olduğunda, kullanılacak her projenin dizini içinde yeniden kullanılacak projeye bir klasör bağlantısı oluşturuyorum. Bundan sonra modül bağımlılığını ekledim (Andr Studio'da). Şimdi her senkronizasyonda iken her projedeki modülü kullanabilir / düzenleyebilirim. Gitmenin doğru yolu olup olmadığından emin değilim, ancak şimdilik oldukça iyi çalışıyor gibi görünüyor! Bu yerel bir maven deposundan daha iyi çalışır.
Peter

1
Ne yazık ki, Temmuz 2014 itibariyle, artık ekran görüntüsünde gösterilen gibi bir Proje ayarı yoktur. Aşağıdaki GrkEngineer yanıtında olduğu gibi .grade dosyalarını düzenlemeye gitmem gerekiyordu.
Tim Bray

24
Mevcut bir projeden bir modül oluşturduğundan, bu oylama aşağıya çekilmelidir
Jonathan

2
Diğer projelerde aynı lib'i kullanmak istiyorsanız, kütüphane modülünü bu projeye kopyalamanız ve settings.gradle ve main module's build.gradle öğelerini manuel olarak yapılandırmanız gerekir.
hanoo

114

Merak ediyorum neden tek başına kavanoz projesi örneği yok.

Tutulmada, proje ayarı iletişim kutusundaki "Kitaplık mı" kutusunu işaretliyoruz.
Android stüdyosunda bu adımları izledim ve bir kavanoz dosyası aldım.

  1. Bir proje oluşturun.

  2. dosyayı sol proje menüsünde açın. (app / build.gradle): Gradle Scripts> build.gradle (Modül: XXX)

  3. bir satırı değiştir: apply plugin: 'com.android.application' ->'apply plugin: com.android.library'

  4. dosyadaki applicationId öğesini kaldır: applicationId "com.mycompany.testproject"

  5. inşa projesi: Yapı> Projeyi Yeniden Oluştur

  6. o zaman aar dosyası alabilirsiniz: app> build> outputs> aar folder

  7. değişiklik aardosya uzantısı adınızip

  8. sıkıştırmayı açın ve görebilirsiniz classes.jar klasörde . yeniden adlandırın ve kullanın!

Her neyse, google'ın neden kavanoz oluşturma işlemini android stüdyosunda bu kadar zahmetli hale getirdiğini bilmiyorum.


1
Android Studio 2.2.2 dec'de benim için çalışıyor. 2016.
Herman

95

Google'ın Gradle Eklentisi, birden fazla proje oluşturmak için gradle dosyalarınızı yapılandırmanın önerilen yolu bazı eksikliklere sahiptir Bir kütüphane projesine bağlı olarak birden fazla projeniz varsa, bu yazı Google'ın önerilen yapılandırmasını, eksikliklerini kısaca açıklar ve gradle dosyalarınızı yapılandırmak için farklı bir yol önerir Android Studio'da çoklu proje kurulumlarını destekleyin:

Android Studio için alternatif bir çoklu proje kurulumu

Farklı Bir Yol:

Android Studio'da birden fazla projeyi yönetmenin daha iyi bir yolu var. İşin püf noktası, kitaplıklarınız için ayrı Android Studio projeleri oluşturmak ve gradle'a uygulamanızın bağlı olduğu kitaplık modülünün kitaplığın proje dizininde bulunduğunu söylemektir. Bu yöntemi yukarıda açıkladığım proje yapısıyla kullanmak isterseniz, aşağıdakileri yaparsınız:

  1. StickyListHeaders kütüphanesi için bir Android Studio projesi oluşturma
  2. App2 için bir Android Studio projesi oluşturma
  3. Uygulama1 için bir Android Studio projesi oluşturma
  4. StickyListHeaders projesinde modülleri oluşturmak için App1 ve App2'yi yapılandırın.

4. adım zor kısımdır, bu yüzden ayrıntılı olarak açıklayacağım tek adım budur. Settings.gradle dosyanıza bir proje ifadesi ekleyerek ve bu proje ifadesi tarafından döndürülen ProjectDescriptor nesnesindeki projectDir özelliğini ayarlayarak projenizin dizinine harici olan modüllere başvurabilirsiniz:

resim açıklamasını buraya girin

Girilmesi gereken kod settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

Bunu doğru bir şekilde yaptıysanız, bu modüller proje dizininin dışında olsa bile, projeniz tarafından başvurulan modüllerin proje gezgininde görüneceğini göreceksiniz:

resim açıklamasını buraya girin

Bu, aynı anda kütüphane kodu ve uygulama kodu üzerinde çalışmanıza olanak tanır. Sürüm kontrol entegrasyonu, modülleri harici olarak bu şekilde referans aldığınızda da iyi çalışır. Değişiklikleri uygulama kodunuzda uygulayabileceğiniz ve uygulayabileceğiniz gibi, değişikliklerinizi kitaplık koduna aktarabilir ve iletebilirsiniz.

Bu şekilde birden fazla proje oluşturmanın yolu, Google'ın önerilen yapılandırmasını rahatsız eden zorluklardan kaçınır. Proje dizininin dışındaki bir modüle atıfta bulunduğumuz için, ona bağlı olan her uygulama için kütüphane modülünün fazladan kopyalarını almamız gerekmiyor ve kütüphanelerimizi herhangi bir git alt modül saçmalık olmadan versiyonlayabiliyoruz.

Ne yazık ki, birden fazla proje oluşturmanın bu başka yolunu bulmak çok zordur. Açıkçası, bu, Google'ın rehberine bakarak anlayacağınız bir şey değil ve bu noktada, Android Studio'nun kullanıcı arayüzünü kullanarak projelerinizi bu şekilde yapılandırmanın bir yolu yok.


4
Bu mükemmel bir cevap. Teşekkürler.
Noundla Sandeep

1
İyi yanıt, ancak bağlantının kopması durumunda ilgili bitleri gönderiden yanıtınıza kopyalamalısınız.
Greyson Parrelli

2
NOT: gradle dize değerlendirme için çift tırnak ( ") kullanmanız gerekir benim için bir gün 'save Bağlı Bu.'. Bu
Solata

1
Uygulama kodundan kütüphane koduna nasıl başvurmalıyız? Kurulum talimatlarınızı uyguladıktan sonra, uygulama kodu yine de kütüphane kodundaki bir pakete başvuramaz. Yapılması gereken ekstra bir adım var mı?
CEGRD

2
@CEGRD Dosya> Proje Yapısı bölümüne gitmeniz ve üzerinde çalıştığınız modülün adını tıklamanız gerekir. Ardından bağımlılıklar sekmesine gidin> açılır menüden '+' ve ardından 'Modül bağımlılığı'nı tıklayın. Daha sonra geçerli projenize library1 modülünü ekleyebilmeniz gerekir.
OliasailO

45

Çoklu proje kurulumları hakkında bu bağlantıya göz atın .

Dikkat çeken bazı şeyler, ayarlarınızın olduğundan emin olun. Hem uygulama hem de kütüphane modüllerine referans vermek için güncellenmiştir.

settings.gradle: include ':app', ':libraries:lib1', ':libraries:lib2'

Ayrıca uygulamanın build.gradle aşağıdakilere sahip olduğundan emin olun:

dependencies {
     compile project(':libraries:lib1')
}

Aşağıdaki yapıya sahip olmalısınız:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

com.android.applicationHerhangi bir kütüphanenin build.gradle eklentisini kullanırken uygulamanın build.gradle eklentisini kullanmalıdır com.android.library.

Bu kurulumla komut satırından oluşturabiliyorsanız Android Studio IDE güncellenmelidir.


Build.gradle'da tanımlanan eklenti tek fark mıdır? Yani bir satırı değiştirerek mevcut bir modülü Android kütüphanesine dönüştürebilir misiniz?
Enrico

22
Bir gün, bir içe aktarma düğmesine tıklayacağız ve kütüphane çalışacak, sonra editörde kod yazmaya başlayacağız.
Steve M

6
Bu yaklaşım kütüphaneleri gerçek projeye dahil ediyor gibi görünmektedir. OP'nin istediği, kendi projesinde / alanında yaşayan ve sadece ana uygulama projesine bir lib olarak dahil olan ayrı bir Android kütüphane projesinin nasıl oluşturulacağını bilmekti
Jonathan

@SteveM Bu, kariyerim boyunca benim sorunumdu. Herhangi bir tasarım olmadan kodlamaya başladım. Ve sonra hata ayıklama ve yeniden düzenleme için saatler geçirin.
Rajkiran

13

Intellij IDEA (ve Android Studio) için her kütüphane bir Modüldür. Android Studio'daki bir Modülü Eclipse'deki projeye eşdeğer olarak düşünün. Android Studio'daki proje bir modül koleksiyonudur. Modüller çalıştırılabilir uygulamalar veya kütüphane modülleri olabilir.

Yani, yeni bir android kütüphane projesi eklemek için "Android kütüphanesi" türünde bir modül oluşturmanız gerekir. Ardından bu kütüphane modülünü ana modülünüzün (Uygulama modülü) bağımlılık listesine ekleyin.


12

Bir kütüphane projesi oluşturmanın ve yeniden kullanmanın en basit yolu :

  1. Açılmış bir projede file > new > new module(ve kullanıcı arayüzü sorularını cevaplayın)

resim açıklamasını buraya girin

  1. kontrol / veya dosya içinde eğer eklemek settings.gradle :include ':myLibrary'
  2. build.gradle dosyasında olup olmadığını kontrol edin / ekleyin :

    dependencies { ... compile project(':myLibrary') }

  3. Bu kütüphane modülünü başka bir projede yeniden kullanmak için, bu klasörü 1. adım yerine projeye kopyalayın ve 2. ve 3. adımları uygulayın.

Yeni bir stüdyo uygulama projesi de oluşturabilirsiniz build.gradle dosyasındaki eklenti atamasını com.android.library olarak değiştirerek mevcut bir uygulama modülünü bir kütüphane modülüne kolayca değiştirebilirsiniz.

apply plugin: 'com.android.application'

android {...}

için

apply plugin: 'com.android.library'

android {...}

daha fazlası burada


Eklenti atamasını değiştirerek varolan bir uygulama modülünü bir kütüphane modülüne değiştirirseniz, gradle dosyasından `applicationId" com .... "satırını da kaldırmanız gerekir.
TDG

"UYARI: 'Derleme' yapılandırması kullanılmıyor ve yerine" uygulama "ve" api "getirildi."
slhck

9

Sen olabilir yeni bir modül eklemek gibi herhangi bir uygulamaya Blundell onun cevabını yazıyor ve sonra başka bir uygulamadan başvuru.

Modülü bilgisayarınızdaki herhangi bir yere taşımak istiyorsanız, modül klasörünü taşıyın (modüller tamamen bağımsızdır), o zaman modüle başvurmanız gerekir.

Bu modüle referans vermek için:

  • Uygulamanızın build.gradle dosyasına ekleyin:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • Settings.gradle dosyasına aşağıdakileri ekleyin:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

örneğin , android projesinin klasörüne paralel olarak klasör adı project(':library').projectDir = new File('../library')nerede library?
Bir Yerde

5

Kullanmayı unutmayın apply plugin: 'com.android.library'Gözlerinde farklı build.gradleyerine eklenti uygulanır:'com.android.application'


4

Dokümantasyon Yolu

Bu, Android Studio belgelerinde verilen önerilere göre önerilen yoldur.

Kütüphane modülü oluşturma

Kitaplığınızı oluşturmak için yeni bir proje oluşturun. Dosya> Yeni> Yeni Modül> Android Kitaplığı> Sonraki> (ad seçin)> Son'u tıklayın . Sonra istediğiniz sınıfları ve kaynakları kütüphanenize ekleyin.

Modülü oluşturduğunuzda bir AAR dosyası oluşturulur. İçinde bulabilirsiniz project-name/module-name/build/outputs/aar/.

Kitaplığınızı bağımlılık olarak ekleyin

Kütüphanenizi aşağıdaki gibi başka bir projeye bağımlı olarak ekleyebilirsiniz:

  1. Dosya> Yeni Modül> .JAR / .AAR Paketini İçe Aktar> İleri> (dosya konumunu seçin)> Son'u kullanarak kitaplık AAR dosyanızı içe aktarın . (Kodu içe aktarmayın, aksi takdirde çok fazla yerde düzenlenebilir.)
  2. Settings.gradle dosyasında kitaplık adınızın orada olduğundan emin olun.

    include ':app', ':my-library-module'
    
  3. Uygulamanın build.gradle dosyasında, derleme satırını bağımlılıklar bölümüne ekleyin:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Projenizi notlarla senkronize etmeniz istenir. Yap.

Bu kadar. Kitaplığınızı şimdi kullanabilmeniz gerekir.

notlar

Kitaplığınızı daha geniş bir kitleye kolayca sunmak istiyorsanız, JitPac veya JCenter kullanmayı düşünün .


3

Aynı soru vardı ve aşağıdaki şekilde çözdü:

Başlangıç ​​durumu :

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Hedef : adlı bir modül eklemek istiyorumdataformats

  1. (Örn: yeni bir modül ekleyin Java Library)
  2. settings.gradleGörünüşünüzden emin olun (normalde otomatik olarak):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. Emin (Make manuel ) o build.gradleihtiyacı için kütüphane aşağıdaki bağımlılığı kullanmak için o modüllerin dosyaları:

    dependencies { ... compile project(':dataformats') }



2

Yukarıdaki teknik yorum olarak Gradle Build Varians hakkında arama yapmaya çalışıyorum ve bu bağlantıyı buldum: http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 Bu çok basit bir çözüm. Ben de bunu yaptım: - build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

Sonra benim app 2 sürümü daha var: pro ve her iki Google Play yükleyebilirsiniz böylece yukarıdaki application 2 uygulamaId 2 farklı paketName ile deneme. Hala sadece "ana" bölümünde kod ve sürüm arasında geçiş yapmak için getpackageName kullanın. Sadece detay için verdiğim bağlantıya git.


1

Biri işe yaramazsa, lütfen diğerini deneyin.

  1. Kullanarak kütüphanenin build.gradle dosyası içindeki bağımlılığın içine kütüphanenin bağımlılığını ekleyin ve ur kütüphanesini Harici Kütüphanelere yapıştırın.

VEYA

  1. Sadece uygulama klasörü içindeki libs klasörünüze gidin ve tüm .jar örneğin Kütüphane dosyalarını yapıştırın Şimdi burada hile şimdi settings.gradle dosyası şimdi bu satırı ekleyin "include ': app: libs'" after "include ': app '"Kesinlikle işe yarayacaktır ........... :)

1

Benim durumumda, MAC OS X 10.11 ve Android 2.0'ı kullanarak ve Aqib Mumtaz'ın açıkladığını tam olarak yaparak.

Ancak, her seferinde şu iletiyi aldım: " Projeyi yapılandırırken bir sorun oluştu: app '.> Xxx modülü değerlendirilemiyor:' default 'adıyla yapılandırma bulunamadı ."

Bu mesajın nedeninin Android 2.0'ın doğrudan bir kütüphane oluşturmasına izin vermemesi olduğunu buldum. Bu yüzden, önce bir uygulama projeti oluşturmaya ve sonra bir kütüphane olarak dönüştürmek için build.gradle dosyasını değiştirmeye karar verdim.

Bir Kütüphane projesi bir uygulama projesinden çok farklı olduğu için bu çözüm işe yaramıyor.

Yani, sorunumu şu şekilde çözdüm:

  • İlk önce standart bir uygulama oluşturun (gerekirse);
  • Ardından 'Dosya / Modül Oluştur'u seçin
  • Bulucuya gidin ve çerçeve dizininizde yeni oluşturulan modülün klasörünü taşıyın

Sonra Aqib Mumtaz'ın önerdiği çözüm ile devam edin.

Sonuç olarak, her seferinde kaynak dosyaları çoğaltmaya gerek kalmadan kütüphane kaynağınız paylaşılacaktır (bu benim için bir sapkınlıktı!)

Umarım bu sana yardımcı olur.

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.