Bir Android Studio projesinden .jar nasıl yapılır


98

AndroidStudio kullanıyorum ve şu projeye sahibim:

görüntü açıklamasını buraya girin

Mavi dairenin içindeki şey myLib'dir. myLib ayrıca kırmızı çemberin içinde bulunan harici bir kitaplık ve bir apache paketi (yeşil daire) kullanmalıdır.

Bu yüzden tüm bunları tek bir .jar haline getirmek istiyorum, böylece onu başka bir projede kullanabilirim.

Adım adım bir kılavuz gerçekten takdir edilecektir, geliştirici dünyasında yeni başlayanlardanım.

Teşekkürler!


1
Bence istediğiniz, bağımlılık kadar basit bir şekilde bağlanabilen bir aar dosyası (Android arşivi). Temel olarak bir Android kitaplık projesi oluşturmanız gerekir. Ama zihnimden kesin adımları yazamıyorum.
2014

2
Herhangi bir java projesinde kullanabilmem için bir .jar dosyasına ihtiyacım var. Sadece androidler değil.
dum4ll3

1
Hemen hemen aynı olmalı - bir kütüphane projesi yapın ve dışa aktarın.
Thrash Bean

Bu hata Android gradle eklentisinde, bir jar hedefi eklemek için gradle
derleme dosyasını

Yanıtlar:


136
  • Kitaplık projesi için build.gradle'ı açın görüntü açıklamasını buraya girin

  • Build.gradle'da iki görev yazın - deleteJar ve createJar ve createJar.dependsOn (deleteJar, build) kuralı ekleyin görüntü açıklamasını buraya girin

Yukarıdaki kod:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • Sağdan gradle panelini genişletin ve kitaplığınızın altındaki tüm görevleri açın-> diğerleri. Orada iki yeni görev göreceksiniz - createJar ve deleteJar görüntü açıklamasını buraya girin

  • CreateJar'a çift tıklayın görüntü açıklamasını buraya girin

  • Görev başarıyla çalıştırıldıktan sonra, oluşturduğunuz jar dosyasını createJar görevinde (ör. Libs / xxxx.jar) belirtilen yoldan alın görüntü açıklamasını buraya girin

  • yeni oluşturulan jar dosyasını gerekli projenizin lib klasörüne kopyalayın -> sağ tıklayın -> "kitaplık olarak ekle" yi seçin


4
Bazen insanlar okumak yerine izleyerek anlarlar. Gördüğünüz iyi bir kullanıcı deneyimi ☺
Abhinav Tyagi

5
Öyleyse sana bundan emin olmadığımı söylemeliyim release. Bende debugve defaultfakat hiçbir releaseklasörü. Eklentinin hangi sürümünü kullanıyorsunuz? Bunun herhangi bir yerde belgelenip belgelenmediğini biliyor musunuz?
Cameron Lowell Palmer

3
Bende olmayan releaseklasörü.
Kamran Bigdely

4
Neyi kopyalamaya çalışıyorsun? APK dosyasını içeren klasörleri hedeflememiz mi gerekiyor? ('Build / intermediates / bundles / default') satırında bu dizinin sizin için ne tuttuğunu kastediyorum. Android stüdyomda adı paketlere sahip bir klasör yok ve createJar görevinde KAYNAK YOK
Bawender Yandra

12
Android Studio 3.1.3 ve Gradle sürüm 4.4 için ('build / intermediates / bundles / release /') yerine ('build / intermediates / packaged-classes / release /') olarak değişiklik
Vaishakh

60

Kodu Gradle'da düz bir Java modülü olarak ayarlarsanız, Gradle'ın size içeriği olan bir jar dosyası vermesi gerçekten çok kolaydır. Bu jar dosyasında, bağlı olduğu diğer Apache kitaplıkları değil, yalnızca sizin kodunuz olacaktır. Bu şekilde dağıtmanızı tavsiye ederim; Bağımlılıkları kitaplığınızın içinde toplamak biraz garip ve bu kitaplıkların kullanıcılarının bu bağımlılıkları kendi başlarına dahil etmeleri daha normaldir (çünkü aksi takdirde bu projelerin çakışmaları zaten kitaplığın kopyalarını, belki de farklı sürümleri birbirine bağlamaktadır. ). Dahası, kitaplığınızı yayınlayacak olursanız, başkalarının kodunu yeniden dağıtmaya ilişkin olası lisans sorunlarından kaçınırsınız.

Ayrıca bir kavanozda derlenmesi gereken kodu alın ve Android Studio'da ayrı bir düz Java modülüne taşıyın:

  1. Dosya menüsü> Yeni Modül ... > Java Kitaplığı
  2. Sihirbazda kitaplığı, Java paket adını ve sınıf adlarını ayarlayın. (Sizin için bir sınıf oluşturmasını istemiyorsanız, modül oluşturulduktan sonra silebilirsiniz)
  3. Android kodunuzda, yeni kitaplığınızdaki kodu kullanabilmesi için yeni modüle bir bağımlılık oluşturun:
  4. Dosya > Proje Yapısı > Modüller > (Android Modülünüz) > Bağımlılıklar > + > Modül bağımlılığı . Aşağıdaki ekran görüntüsüne bakın: görüntü açıklamasını buraya girin
  5. Açılan iletişim kutusundaki listeden modülünüzü seçin: görüntü açıklamasını buraya girin

Umarım projeniz şu anda normal şekilde inşa edilmelidir. Bir derleme yaptıktan sonra, Java kitaplığınız için bir jar dosyası modülünüzün dizinindeki build / libs dizinine yerleştirilecektir . Elle kavanoz dosyası oluşturmak istiyorsanız, onun çalıştırabilirsiniz kavanoz Gradle penceresinden inşa dosya görevi: görüntü açıklamasını buraya girin


Çok teşekkür ederim! Cevabınız gerçekten yardımcı oldu, çoğu Gradle görevlerini gösteren son ekran görüntüsünde. Bunu bilmiyordum. Adımlarınızı takip edebilirim, ancak hala org.apache.http.Header eksik. Bunu kütüphaneme nasıl aktarabilirim?
dum4ll3

Özlediğini söylediğinde ne demek istiyorsun?
Scott Barta

1
Aynı Proje Yapısı> bağımlılıklar akışından geçin, ancak projeniz yerine kitaplık modülünüzü seçin ve bağımlılığı aynı şekilde ekleyin. Cevabımda jar dosyasını modül dizinindeki build / libs dizinine koyduğunu söylüyorum.
Scott Barta

1
Aldım: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. Bu benim dış kütüphanemle derlediğim benimki
dum4ll3

2
Yalnızca java kitaplığıyla çalışır ve android kitaplığındaki jar görevi mevcut değildir
cuasodayleo

28

Android Studio IDE'de, " Her Şeyi Çalıştır çubuğuna " şu şekilde erişin :

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

Bundan sonra eserinizi projenizdeki bu klasörde bulacaksınız.
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


VEYA


Gradle, klasörün Taskaltındaki gradle yan menüsünde bunun için zaten bir tane var other.

gradle araç çubuğu

Ardından aşağı kaydırın createFullJarReleaseve tıklayın.

Gradle Görevleri

Bundan sonra eserinizi projenizdeki bu klasörde bulacaksınız.

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
Bu seçeneği göremiyorum. Bu yeni bir Studio sürümüne eklendi mi?
Dibzmania

1
Ben oluşturuyorum ve * .jar'ı bulduğumda adı: full.jar. 30dk lol buldum etmek
nobjta_9x_tq

1
Benim durumumda onu buldumbuild\intermediates\intermediate-jars\release
Yusril Maulidan Raji

Bir sorum var. Benim durumumda 3 jar dosyası oluşturuyor. classes.jar, full.jarve res.jar. Kullanmak istediğim her zaman tüm jar dosyalarını içe aktarmalı mıyım?
Yusril Maulidan Raji

Sadece full.jar'ı kullanın
Haroun Hajem

11

Bunu java modülünüzün build.gradle dosyasına ekleyin. Bağımlı kütüphaneleri arşive dahil edecektir.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Bu, [modül_adı] / build / libs / [modül_adı] .jar dosyasıyla sonuçlanacaktır.


Ancak bir .jar kitaplığının bir Ana sınıfı olur mu? OP, "başka bir projede kullanabilmem için" bir .jar dosyası oluşturduklarını söylüyor (sic). Bu bir kitaplık gibi geliyor.
Steve White

Sadece bu adam bunu gerçekten anladı, kavanoz yaratmak probu çözmez. Ya onu yürütmemiz gerekirse. Yukarıdaki kod, "jar dosyası yürütülemiyor:" ana bildirim özelliği yok "hatasını önler.
MobileEvangelist

1

.jar dosyası, uygulamanızı derlediğinizde / çalıştırdığınızda otomatik olarak oluşturulacaktır.

Class.jar dosyanızı root_folder / app / build / intermediates / bundles / debug konumunda bulabilirsiniz.

jar dosyası konumu


1
  1. Android Studio'da Gradle sekmesine gidin, ardından kitaplık projesini seçin.

  2. Ardından Görevler'e gidin

  3. Sonra Diğer'e git

  4. Pakete çift tıklayın

.aarDosyalarınızı altında bulabilirsinizyour_module/build/outputs/aar/your-release.aar

İşte görüntü


Hiçbir yerde "Gradle Tab" görmüyorum. Sonunda Yardım aramasına "Gradle" yazdım ve Gradle görünümünüze benzer bir şey elde ettim. Ama içerideki liste sizinkinden çok farklı, çok daha kısa. Tasks-> Other altında bundleReleaseaar yoktur. Bir "createJar" var, ancak buna tıkladığımda, "Görev 'createJar' kök projede bulunamadı ..." mesajı alıyorum. Ve ... neden .aar dosyalarını istiyoruz? OP bir .jar dosyası istedi. Bu aynı şey mi>
Steve White

Ama soru nasıl .jaryapılmayacağı.aar
Aleksey Timoshchenko

0

bulduğum yol proje derleyici çıktısını bulmaktı (proje yapısı> proje). daha sonra bir akü haline getirmek istediğiniz modülün derlenmiş klasörünü bulun, zip ile sıkıştırın ve çıktının uzantısını zip'ten kavanoz'a değiştirin.


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

AndroidStudio'dan bir aşamalı görev çalıştırırsanız [Diğer]

assembleRelease 
//or
bundleReleaseAar

veya terminal aracılığıyla

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

o zaman mümkün bulmak için olacak .aariçinde

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aar(Android Kitaplığı) dosyası, .jar(Java Kitaplığı) dosyası ve ek Android kaynaklarından oluşur. .aardosyası aar uzantılı bir zip dosyasıdır, bu yüzden .aarile değiştirebilir .zipveya çalıştırabilirsiniz

unzip "<path_to/module_name>.aar"
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.