2012-02-01 32 views
8

Bir JNI android uygulaması uyguladım. Bu uygulama, APK'nın bir parçası olarak paketlenecek birkaç ek 'Paylaşılan LibS' gerektirir. Ecplise kullanarak, bu lib'leri projenin '/ libs/armeabi' klasörüne ekledim. Bununla birlikte, uygulamayı başlatırken (tümleşik hata ayıklayıcı aracılığıyla), eklenmiş olan 'Paylaşılan Lib'ler', 'armeabi' klasöründen kaldırılmıştır.Android JNI APK Paketleme

  • Bu ek kitaplıkların kaldırılmasını nasıl önleyebilirim?
  • Gerekli ek SO'ların APK'da paketlendiğinden nasıl emin olabilirim?

cevap

9

Bu kitaplıkları kendiniz libs klasörüne kopyalamanız gerekmez. Bu iş ndk-build tarafından yapılmalıdır.

Bu iki adım yeterli olacaktır:

  1. mylibs projenizin kök düzeyinde klasörü (Başka bir ad yerine kullanabilirsiniz) oluşturun. Ve kütüphanelerinizi bu klasöre koyun. Her kütüphane için

  2. kütüphane adıyla mylib değiştirilmesi include $(CLEAR_VARS) deyimi önce aşağıdaki satırları ekleyin:

    include $(CLEAR_VARS) 
    LOCAL_MODULE:=mylib 
    LOCAL_SRC_FILES:=../mylibs/libmylib.so 
    include $(PREBUILT_SHARED_LIBRARY) 
    

(Sen LOCAL_SRC_FILES için biraz farklı bir yol gerekebilir Bu sizin Eclipse yapılandırmasına bağlıdır..)

+1

Yukarıdaki başarmış, bu ben oluşturma işlemi sırasında elde ediyoruz: ndroid NDK: jni/Android.mk: swscale: HATA: jni/Android.mk: swscale: LOCAL_SRC_FILES dosya uzantıları Android NDK içermemelidir LOCAL_MODULE_FILENAME ".a" – NadavRub

+1

Sabit ile biten bir dosyaya işaret etmelidir. "PREBUILT_STATIC_LIBRARY" yerine "PREBUILT_SHARED_LIBRARY" olmalıdır. –

1

Bu bağlamda eklenecek bir not, harici SharedLib'in yolunun, jni dizinine göre (veya LOCAL_PATH öğesinin ne olursa olsun), yani "LOC" OLMASI GEREKİR. AL_SRC_FILES: = ../../../Android/ffmpeg/libavcodec/libavcodec.so "mutlak yolun olmayacağı yerde çalışacaktır.