2013-03-03 13 views
6

İki adet 3. parti yerel kitaplığım var, libfoo.so ve libbar.so. Bu kütüphanelerin her ikisini de zor zamanlar geçiriyorum. Ben Proje Yapısı altında doğru CPU kemerin (armeabi, mips ve x86) yanı sıra set Yerli libs dizin altında libs klasöre kopyaladıktan> Modüller> Android> Yapı bu libs klasöre işaret edecek. Sadece bir kütüphane yükleyebilirim ama diğerini değil. Her seferinde bir tane yüklemeye çalışırsam (diğer kütüphaneleri silerek), iyi çalışır. Ben alıyorum istisnadır:IntelliJ içinde birden çok yerel kitaplık (.so) dosyası nasıl eklenir

java.lang.UnsatisfiedLinkError: Couldn't load foo from loader dalvik.system.PathClassLoader 

Ne IntelliJ veya Android çalışma zamanı bu yerel kütüphaneleri hem bulmalıyız için ne yapmalıdır?

+2

Bunları nasıl yüklediniz? – bricklore

+0

Neyin ortaya çıktığını görmek için sonuçta .APK dosyasına baktınız mı? Bu sadece bir zip dosyası - 7-Zip veya herhangi bir zip dosyası yöneticisi ile açın ve orada tüm .so dosyaları görmelisiniz. – SomeCallMeTim

+0

@SomeCallMeTime: Bana bir apk içindeki lib'leri nasıl yönlendireceğimi öğrettiğin için teşekkürler. ile ilgili bir sorunla karşılaştım java.lang.UnsatisfiedLinkError: nativeNewInstance android autonavi haritası için hiçbir uygulama bulunamadı. Koduma iki adet üçüncü parti jni kütüphanesi ekliyorum. ve bir lib'in birden fazla cpu mimarisini desteklediğini ve birinin yalnızca armutu desteklediğini, bu yüzden diğer mimarileri birden fazla cpu destekleyen ve projemde yalnızca armeabi dosyalarını barındıran diğer mimarilerden kaldırdım ve şimdi gayet iyi çalışıyor. –

cevap

0

Birden çok yerel kitaplık yüklemesi tamamen bulunur. Sadece/libs/CPU_ARCH/dizinine kopyalayın. Ancak tüm kütüphanelerin aynı mimaride olması gerekiyor. Libfoo.so'nun armeabi olduğunu ancak libbar.so'nun x86 olduğunu söylese, o zaman sadece bir tanesi kopyalanacaktır (bir süre önce duruşmamdan dolayı).

O zaman yükleyebilirsiniz: System.loadLibrary() başarısız olursa

static { 
    //the following 3 are identical 
    //System.load(context.getApplicationInfo().dataDir + "/lib/libfoo.so"); 
    //Runtime.getRuntime().load(context.getApplicationInfo().dataDir + "/lib/libfoo.so"); 
    System.loadLibrary("foo"); 

    System.loadLibrary("bar"); 
} 

, o zaman System.load() veya Runtime.getRuntime() kullanarak tam yol ile yük deneyebilirsiniz yükü()

.