Harici JAR'ları bir Android projesinde nasıl kullanabilirim?


326

Bir Android projesi oluşturdum ve projeme harici bir JAR (hessian-4.0.1.jar) ekledim. Daha sonra JAR'ı oluşturma yoluna ekledim ve Order and Export'ta kontrol ettim.

Sipariş ve İhracat göz ardı gibi görünüyor ve harici JAR tüm sınıfları çalışma zamanında eksik.

Eclipse eklentisini kullanarak bir Android uygulaması oluştururken harici bir JAR'dan gerekli sınıfları düzgün bir şekilde dahil etmek için bir hile var mı? Karınca veya Maven kullanmak istemiyorum.


1
Daha önce de bildiğiniz gibi: bunun nedeni hessian-4.0.1.jar içindeki bağımlılıklardır. Hessian'ı Android ile kullanmak istiyorsanız Hessdroid ( code.google.com/p/hessdroid ) kullanın . Çok aktif değil, ancak Android 4.0'da bile benim için iyi çalışıyor.
Buz09

1
Harici kavanoz kullanırken sık karşılaşılan bir sorun için ayrıca bkz. "Android'deki Java kitaplığındaki kod için NoClassDefFoundError" . Basit çözüm .
Akış

Yanıtlar:


443

Eclipse için

Android projenize veya herhangi bir Java projesine harici JAR'lar eklemenin iyi bir yolu:

  1. libsProjenizin kök klasöründe adlı bir klasör oluşturun
  2. Senin Kopya JAR dosyalarılibs klasöründe
  3. şimdi Jar dosyasına sağ tıklayın ve ardından Projenizde 'Referanslı Kütüphaneler' adlı bir klasör oluşturacak olan Oluşturma Yolu> Oluşturma Yoluna Ekle'yi seçin

    Bunu yaptığınızda, projenizi başka bir bilgisayara aktardığınızda sabit sürücünüzde başvurulan kitaplıklarınızı kaybetmezsiniz .

Android Studio için

  1. Eğer varsa Android projesi explorer View, bunu değiştirmek Proje görünümünün altında olduğu

Eksik Resim

  1. Harici kitaplığı eklemek istediğiniz modülü sağ tıklayın, ardından Yeni> Directroy'u seçin ve ' libs ' olarak adlandırın
  2. Şimdi blah_blah.jar dosyasını ' libs ' klasörüne kopyalayın
  3. Blah_blah.jar'a sağ tıklayın, ardından ' Kütüphane Olarak Ekle ... ' yi seçin. Bu işlem derleme dosyaları olarak build.gradle dosyasına otomatik olarak eklenir ve girilir ('libs / blah_blah.jar') ve gradle senkron. Ve işin bitti

Lütfen Dikkat: 3. taraf kütüphaneler kullanıyorsanız, Gradle betiğinin gradle betiği çalıştırıldığında JAR'ı ve JAR bağımlılığını otomatik olarak indirdiği geçişli bağımlılıkları .

Örn: 'com.google.android.gms: play-services-ads: 9.4.0' derleyin

Gradle Dependency Mangement hakkında devamını oku


49
Son Eclipse / ADT sürümlerini kullanırken dış kavanozların libs(yerine lib) adlı bir klasörde olması gerektiğini
unutmayın

4
@THelper - Teşekkürler! Doğru, klasör "lib" değil "libs" olarak adlandırılmalıdır. Bu sorunun üstesinden gelmek üzereydim.
Camille Sévigny

7
SDK'nın son sürümlerinde, 3. adım (JAR'ı Derleme Yoluna el ile ekleme) gerekli değildir. Ancak dosyayı bıraktığınız sırada Eclipse gibi açık olan bir IDE'niz varsa, bir proje yenilemesi (Paket Gezgini'nde F5 ve / veya bağlam menüsü Yenile) yapmanız gerekir.
Jon Adams

4
Komut satırından nasıl yapılır? Hangi yapılandırma dosyasını düzenlemeliyim ve nasıl?
Kristian Spangsege

13
Bu yaklaşım 2012 başından beri güncelliğini yitirmiştir. JAR'ı eklemeniz yeterlidir libs/. Derleme yolunu el ile değiştirmeyin.
CommonsWare

127

Evet, kullanabilirsiniz. İşte nasıl:

  1. Projeniz -> sağ tıklayın -> İçe Aktar -> Dosya Sistemi -> yourjar.jar
  2. Projeniz -> sağ tıklayın -> Özellikler -> Java Derleme Yolu -> Kütüphaneler -> Kavanoz Ekle -> yourjar.jar

Bu video , bazı sorunlarınız olması durumunda faydalı olabilir.


5
Bu yaklaşım 2012 başından beri güncelliğini yitirmiştir. JAR'ı libs / 'e eklemeniz yeterlidir. Derleme yolunu el ile değiştirmeyin.
CommonsWare

Yapı yolu eklemenin çeşitli yollarını denedim. Sadece bu şekilde bir projeyi başka bir bilgisayara taşıdıktan sonra Sınıf bulunamadı istisnasını düzeltebilirim
Mickey

İLK çözüm modası geçmiş ve AS WELL işe yaramaz.
Yousha Aleayoub

5

Şu anda SDK 20.0.3 kullanıyorum ve önceki çözümlerin hiçbiri benim için çalışmadı.

Hessdroid'in hess'in başarısız olduğu yerde çalışmasının nedeni, iki jar dosyasının farklı sanal makineler için derlenmiş java içermesidir. Java derleyicisi tarafından oluşturulan bayt kodunun Dalvik sanal makinede çalışması garanti edilmez. Android derleyicisi tarafından oluşturulan bayt kodunun Java sanal makinesinde çalışması garanti edilmez.

Benim durumumda, kaynak koduna erişebildim ve burada tarif ettiğim yöntemi kullanarak bir Android jar dosyası oluşturabildim: https://stackoverflow.com/a/13144382/545064


5

OP'nin sorusunu Eclipse eklentisine atıfla bitirdiğini biliyorum, ama buraya Eclipse belirtmeyen bir arama ile geldim. İşte Android Studio için:

  1. jarLibs dizinine dosya ekle (kopyala / yapıştır gibi)
  2. jarDosyayı sağ tıklayın ve "Kitaplık Olarak Ekle ..." yi seçin
  3. bir sonraki iletişim kutusunda "Tamam" ı tıklayın veya isterseniz yeniden adlandırın.

Bu kadar!


4

Yığın izime yeterince iyi bakmadım, sorun harici JAR'ın dahil olmaması değil.

Sorun şu ki, Android platformunda javax.naming. * Ve harici JAR'ın bağımlılıkları olan birçok paket eksik.

Harici JAR dosyaları ekleme ve Eclipse'de Order and Export ayarlama, Android projelerinde beklendiği gibi çalışır.


3

Mevcut Projeye Git

RightClick-> Özellikler-> Java Derleme Yolu-> Jar Dosyalarını Kitaplıklara Ekle -> Tamam'ı tıklatın

Ardından, Geçerli Projenizdeki Başvurulan Kütüphaneler Dosyasına eklenir.


1

Android'in Java API'sı javax.naming. * Ve diğer birçok javax. * Öğesini desteklemez. Bağımlılıkları ayrı kavanozlar olarak eklemeniz gerekir.


1

Android Studio kullanıyorsanız aşağıdakileri yapın (@Vinayak Bs yanıtını kopyaladım ve değiştirdim):

  1. Proje yan tarafında Proje görünümünü seçin (Paketler veya Android yerine)
  2. Projenizin kök klasöründe libs adlı bir klasör oluşturun
  3. JAR dosyalarınızı libs klasörüne kopyalayın
  4. Yan görünüm güncellenecek ve projenizde JAR dosyaları görünecek
  5. Şimdi içe aktarmak istediğiniz her JAR dosyasına sağ tıklayın ve ardından projenize ekleyecek olan "Kütüphane Olarak Ekle ..." seçeneğini seçin.
  6. Bundan sonra, yapmanız gereken tek şey kodunuzdaki yeni sınıflara referans vermektir, örn. import javax.mail.*

1

Android Studio'da Gradle kullanıyorsanız

Bunu build.gradle'a ekle

compile fileTree(dir: 'libs', include: ['*.jar'])

ve jar dosyasını libs klasörüne ekleyin


1

Gradle build sistemi kullanıyorsanız , aşağıdaki adımları izleyin:

  1. android uygulamanızın jarilgili libsklasörün içine dosya koyun . Genellikle de bulacaksınız Project> app> libs. Eğer libsklasörü yok, bir tane oluşturun.

  2. bunu build.gradledosyanıza ekleyin app. (Sizin için Project's build.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    Bu klasörde bulunan tüm jardosyalarınızı içerecektir libs.

Tüm jardosyaları dahil etmek istemiyorsanız , ayrı ayrı ekleyebilirsiniz.

compile fileTree(dir: 'libs', include: 'file.jar')


0

projenizde bir klasör (lib gibi) oluşturun , kavanozunuzu o klasöre kopyalayın . Şimdi projeye sağ tıklamayla derleme yolunu yapılandırmaya gidin , derleme yolunda seçiminde

'kavanoz eklemek' oluşturduğunuz klasöre göz atmaya ve almak kavanoz.


0

.Jar dosyasını Android projesinin klasörüne kopyalamak her zaman mümkün değildir.
Özellikle çalışma alanınızdaki başka bir projenin çıktısıysa ve sürekli güncelleniyorsa.

Bunu çözmek için kavanozu içe aktarmak yerine projenize bağlantılı bir dosya olarak eklemeniz gerekir (bu dosyayı yerel olarak kopyalar).

Kullanıcı arayüzünde şunları seçin:

Proje -> İçe Aktar -> Dosya Sistemi -> yourjar.jar -> (Seçenekler alanı) Gelişmiş -> Çalışma alanında bağlantı oluştur.

Bağlantı .project dosyasına kaydedilir:

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC proje dosyasına göre 5 dizin yukarı (../../../../../) anlamına gelir.

Daha sonra kütüphanelere ekleyin:
Project -> Properties -> Java Build Path -> Kütüphaneler -> Jar Ekle -> yourjar.jar

Aynı pencerede Sipariş ve Dışa Aktar sekmesini seçin ve kavanozunuzu apk'ye eklenecek şekilde işaretleyin.

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.