Dağıtım için bir Android Jar kütüphanesi oluşturma


160

Android Uygulamalarına gerektiğinde çekilebilen paylaşılan bir kaynak projesi oluşturmanıza izin veren Android Kütüphanesi projelerini biliyorum. Ancak, bu kaynağın kullanılabilir olmasını gerektirir.

Geleneksel bir JAR gibi diğer Android projelerinde kullanılabilecek kapalı kaynaklı bir kitaplık oluşturmanın ve dağıtmanın bir yolunu arıyorum. Bu, Android derleyicisinin kullanılmasını gerektirir, bu nedenle vanilya-Java JAR dosyası değildir. FWIW, JAR'a kaynak / yerleşim yerleştirmem gerekmiyor.

Http://andparcel.com/ adresini gördüm, ancak geçici bir çözüm gibi geliyor ve Google tarafından 'resmi olarak desteklenen' bir şey kullanmayı tercih ediyorum. Ayrıca, oluşturduğum JAR'ın Android SDK'nın eski / yeni sürümüyle uyumlu olduğundan emin olmalıyım (yani, hedef platform sürümünü vb. Ayarlamak için bir yola ihtiyacım var).

En yeni Android araç setleri JAR ikili dosyalarının oluşturulmasına / tüketilmesine izin veriyor mu? Bunu nasıl yapabileceğime dair bazı belgelere işaret edebilir misiniz?


sorunuzun cevabı var mı? Benzer bir gereksinimim var. Jar dosyaları oluşturmaya nasıl başladınız?
Krishnabhadra

Android için bir .jar dağıtmak için Android dx derleyicisine ihtiyacınız yoktur, normal Java complier çalışır. Bir kavanoz dağıtırsanız, uygulama oluşturulduğunda dx bayt koduna dönüştürülür.
ThomasW

Yanıtlar:


49

Herhangi bir kaynağa sahip olmadan bir Android Library projesi oluşturursanız, ADT (ilk olarak r16'da fark edilir), 'bin' klasöründeki proje ile aynı ada sahip bir .jar oluşturur.



1
Bu bana kavanoz getiriyor, ama yine de kaynaklar klasörünü dağıtmak gerekir? Actionbar sherlock'u oluşturmaya çalışmak ve projelerim, actionbar kaynaklarını bulamadıkları için derlenmeyecek.
Nathan Schwermann

1
@schwiz bu sadece kaynak dışı projeler için çalışır (cevabımda belirttiğim gibi). Aksi takdirde, standart bir Android Kütüphanesi projesi olarak içe aktarmanız gerekir.
Freddroid

1
Bu hala doğru mu? Ben görmüyorum myapp.jariçinde /binklasöründe. Var classes.jar, ama bu değil, değil mi?
çöp toplayıcı

En son ADT çalıştırıyorum ve hala / bin klasöründe <proje adı> .jar olsun. Ancak projeniz kaynaklara bağlıysa bu iyi değildir ve projenin bir kütüphane projesi olarak dahil edilmesi gerekir (yine de bir .jar alırsınız.
Freddroid

23

Android, özel bir Android-JAR türü sağlamaz. Ancak projenize bir build.xml eklemek ve JAR'ı karınca ile oluşturmak.

Benim build.xml şöyle görünür:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

ant jarProje ana klasöründe çalışarak JAR oluşturun .


Bunu denedim ve bir JAR dosyası oluşturabildi, ancak bir kütüphaneyi JAR'a dışa aktarırken karşılaştırıldığında garipti (sadece 343 bayt). Hangi bayrakların eksik olduğu hakkında bir fikrin var mı?
Shane Oliver

JAR'ın içeriğini bir arşiv programıyla kontrol edebilir (JAR ZIP'tir) ve nelerin eksik olduğunu görebilir ve ekleyebilirsiniz. Daha fazla bilgiyi burada bulabilirsiniz: ant.apache.org/manual/Tasks/jar.html
white_gecko

5
En yeni Android SDK'ları ile, Java dosyaları derlenir bin/classes, öyle <jar destfile="MyAndroidLib.jar" basedir="bin/">olmalı<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
Theo

17

"Normal" bir Java projesi oluşturabilir ve buradan Android.jar dosyasını içe aktarabilirsiniz. Ardından, SDK'daki her bileşene erişiminiz olur. Ardından, projenizi kavanoz olarak dışa aktarabilir ve Android uygulamanızdan yükleyebilirsiniz. Bu harika çalışıyor ve bunu yapmanın kolay bir yolu gibi görünüyor.


1
Bu durumda kütüphanenin hizmetler, etkinlikler, yayın alıcıları, niyet filtreleri gibi bileşenlerinin nasıl bildirileceği. İstemci uygulamasının tüm bu bildirimleri açıkça tutması gerekiyor mu?
Ron

@ferostar android.jar'ı java projesine nasıl aktarabilirim?
Krishnabhadra

Kütüphanenin kaynaklara sahip olması durumunda, bir R.java nasıl oluşturulur ve JAR'a nasıl eklenir

15

sadece jar yapmak istediğiniz projenin özelliklerine gidin. Android sekmesine tıklayın. ve Is kütüphanesinde işaretleyin. şimdi bin klasöründe .jar dosyasını görebilirsiniz. kullanmak istediğiniz yerde kullanın.


2
LibraryProject'in kaynakları yoksa bu işe yarar. Kaynaklarla çalışmak için nasıl bir fikrin var mı?
Nathan Schwermann

Kütüphane projeniz diğer projelere bağlıysa, bu kötü bir cevaptır. Bu referanslar alınmayacaktır.
stevebot

10

Google tarafından 'resmi olarak desteklenen' tek çözüm Kütüphane projesidir ve kaynak kodun dağıtılmasını gerektirir. Normal bir şekilde bir JAR oluşturabilirsiniz, ancak içine kaynak ekleyemez veya referans veremezsiniz.

Ne yazık ki, kaynak kod gereksinimini aşmanın bir yolu olarak, bir Kütüphane projesi içine paketlenmiş bir JAR eklemek mümkün olmadığını düşünüyorum.


"Normal bir şekilde bir JAR oluşturabilirsiniz, ancak içine kaynak ekleyemez veya referans veremezsiniz." <- Android sınıflarına başvurursam veya Android derleyicisini kullanırsam Eclipse'de düzgün çalışmıyor gibi görünüyor. Bunu nasıl çalıştıracağınıza dair ipuçları?
psychotik

5
Eclipse'de normal bir Java projesi oluşturuyorum, android.jar dosyasını derleme yoluna ekledikten sonra Dışa Aktar - Java - Jar Dosyası'nı seçiyorum.
Jeff Gilfelt

@JeffGilfelt ve örneğin android-13 sdk dizini için android.jar dosyasını eklerseniz, kavanoz kitaplığınızı daha yüksek API düzeyi için projelerde kullanmaya devam edebilecek misiniz?
Fran Marzoa

10

Android Studio 1.2'nin son yapısında, JAR kitaplığının oluşturulması nokta ve tıklatmak kadar basit hale getirildi.

Takip edilecek adımlar :

  • Dosyaya Git -> Yeni -> Yeni Modül resim açıklamasını buraya girin
  • Seçenekler listesinin sonunda "Java Kütüphanesi" ni seçin resim açıklamasını buraya girin
  • Jar lib'in adını ve sınıfın adını girin ve bitir düğmesine basın resim açıklamasını buraya girin
  • Bu kadar !

Sonraki adım, Jar Kitaplığınızı uygulamanıza bağımlılık olarak eklemektir. Bu kadar basit

  • Dosyaya Git -> Proje Yapısı -> 'Uygulama'yı seçin ->' Bağımlılık'ı seçin
  • Alt kısımdaki '+' işaretini seçin -> 'Modül Bağımlılığı'nı seçin resim açıklamasını buraya girin
  • Yukarıda oluşturduğunuz jar lib modülünüzü seçin resim açıklamasını buraya girin resim açıklamasını buraya girin
  • Tamam'ı seçin ve işte bu!

.... Ya da aşağıdaki satırı App gradle dosyanıza ekleyebilirsiniz

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

Google, JAR destekli android stüdyosuna geri getirilse bile Android Arşivi'ni (AAR) tanıtıyor. AAR ve JAR arasındaki farkı öğrenmek için bu bağlantıya bakın


Bunun nasıl yeni bir jar dosyası oluşturduğunu anlamıyorum. Görünüşe göre Android projenizde kütüphane olarak kullanılacak yeni bir modül oluşturuyorsunuz
Jejefcgb

Ne?! Hiçbir şeyden yeni kavanoz oluşturuyor musun?
Ewoks

@Ewoks: modülü oluşturduktan sonra sınıflara onu eklemelisiniz. Tamamlandığında, onu bağımlılık olarak eklersiniz
Nishant.

2
Soru şuydu: Kaynak kodlu bir implenented kütüphane var. Nasıl kavanoz yapmak için sadece kavanoz tüm kütüphane kaynak kodu yerine başka bir projede kullanılır .. Yoksa bir şey kaçırdım?
Ewoks

2
@Nishant. Benim için çalıştı! Teşekkürler!
ramires.cabral

6

Şunu deneyin: Bu işe yarar

1) IsLibrary bayrağının seçimini kaldırarak kütüphane projenizi normal bir proje haline getirin.

2) Projenizi Android Uygulaması olarak yürütün. (Herhangi bir hata göstermez)

3) bin klasöründe .apk ile birlikte bir .jar dosyası bulacaksınız.

4) Kitaplığınızı kullanmak isteyenlere .jar verin.

5) Onlara sadece harici kavanozu yapı yoluna aktarmalarını söyleyin.

bu, tüm kaynaklarla iyi çalışır. iyi şanslar.


1
Bu yazıyı düzeltmek zorunda: JAR dosyaları sadece kod, android kaynak içerebilir. Herhangi bir kaynak dahil edilmişse / gerekliyse, kütüphane projesini açık tutmalıyız ve sadece basit bir JAR dosyası kullanamayız.
cody

@cody: Jar dosyasını kaynaklarla birlikte nasıl üretiriz ve başka bir projede nasıl kullanabiliriz?
Mahantesh M Ambi

1

ADT, projenizdeki tüm eşleşen kaynak dosya ve dizinler için tüm sınıf dosyalarını içeren bir bin klasörü oluşturur, jar komutunu kullanabilir, bu sınıf dosyalarını ve dizinleri içeren bir jar arşivi oluşturabilir ve kitaplığınızı varsayabilirsiniz. sınıf dosyaları platform seviyesi sadece proje yapısının mevcut seviyesi için hedeflenir; her platform seviyesi için farklı bir jar dosyasına ihtiyacınız vardır; Ancak bununla ilgili en iyi şey, R.class dosyasının proje dizin ağacına dahil edilmesidir ve bu nedenle kaynaklarına erişebilirsiniz. Bu android şeyler yapmak için resmi bir yol olup olmadığını bilmiyorum, ama benim için çalıştı.


0

Projemizde, / system / framework içine kurulan ve bu apk'yi varsayılan sınıf yoluna ekleyen apk (apkbuilder kullanarak) oluşturuyoruz. Kavanozu kullanarak uygulamaların derlenmesi için bir kavanoz dosyası oluşturuyoruz (kavanoz c'yi kullanarak).

Not: Kütüphanede kaynak yok.


0

.jar sadece .class dosyasını içeren bir .zip dosyasıdır (herhangi bir .jar dosyasının uzantısını .zip olarak değiştirmeyi deneyebilir ve sonucu görebilirsiniz). Kolayca, .class dosyasını sıkıştırarak herhangi bir amaç için herhangi bir .jar kütüphanesi oluşturabilirsiniz.


Kesinlikle doğru değil, ince farklar için en.wikipedia.org/wiki/JAR_(file_format) 'a bakın (esas olarak ZIP içindeki girişlerin sıralanması)
iddo

0

Adımlar:

1) Açık dosya project.properties

2) Değer katın android.library=true

3) Dosyayı kaydet

4) Proje için tutulma menüsünden, inşa otomatik ardından seçmek temiz

Sonuç: Çöp kutusu altında yepyeni bir kavanoz oluşturulur .

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.