Önceden oluşturulmuş kitaplıkları kullanma

NDK, hem statik hem de paylaşılan önceden oluşturulmuş kitaplıkların kullanımını destekler. Orada iki temel kullanım alanı vardır:

  • Kendi kitaplıklarınızı, üçüncü taraf NDK geliştiricilerine dağıtmadan kaynaklarınızı dağıtabilirsiniz.
  • Derlemenizi hızlandırmak için kendi kitaplıklarınızın önceden oluşturulmuş sürümünü kullanma.

Bu sayfada, önceden oluşturulmuş kitaplıkların nasıl kullanılacağı açıklanmaktadır.

Önceden oluşturulmuş bir kitaplık bildirme

Kullandığınız her önceden oluşturulmuş kitaplığı bağımsız modül olarak tanımlamanız gerekir. Yapılacaklar Bu nedenle, aşağıdaki adımları uygulayın:

  1. Modüle bir ad verin. Bu adın önceden oluşturulmuş adla aynı olması gerekmez. kitaplığının kendisidir.
  2. Modülün Android.mk dosyasında, LOCAL_SRC_FILES uygulamasına sağladığınız önceden oluşturulmuş kitaplıktır. LOCAL_PATH değişkeninizin değeri.

  3. Şuna bağlı olarak PREBUILT_SHARED_LIBRARY veya PREBUILT_STATIC_LIBRARY dahil edilsin: Paylaşılan (.so) veya statik (.a) kitaplık kullanıp kullanmadığınıza bakalım.

Burada, libfoo.so adlı önceden oluşturulmuş kitaplığın bulunduğu varsayılan basit bir örneği bulabilirsiniz dosyasını tanımlayan Android.mk dosyasıyla aynı dizinde yer alır.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

Bu örnekte, modülün adı önceden oluşturulmuş kitaplığını açar.

Derleme sistemi, önceden oluşturulmuş paylaşılan kitaplığınızın bir kopyasını $PROJECT/obj/local ve hata ayıklama bilgilerinden arındırılmış başka bir kopya $PROJECT/libs/<abi>. Burada $PROJECT, projenizin kök dizinidir.

Diğer modüllerden önceden oluşturulmuş kitaplığa göz atın

Diğer modüllerden önceden oluşturulmuş bir kitaplığa referans vermek için adını LOCAL_STATIC_LIBRARIES veya LOCAL_SHARED_LIBRARIES değişkeninin değeri söz konusu diğer modüllerle ilişkili Android.mk dosyaları.

Örneğin, libfoo.so kullanan bir modülün açıklaması aşağıdaki gibi olabilir:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)

Burada, LOCAL_MODULE, önceden oluşturulmuş modülü ifade eden modülün adıdır. LOCAL_SHARED_LIBRARIES ise önceden oluşturulmuş birimin adıdır.

Önceden oluşturulmuş kitaplıklar için başlıkları dışa aktarın

foo-user.c içindeki kod, normalde depolanan belirli bildirimlere bağlıdır. önceden oluşturulmuş kitaplıkla dağıtılan foo.h gibi bir başlık dosyasında bulunur. Örneğin, örnek, foo-user.c aşağıdaki gibi bir satıra sahip olabilir:

#include <foo.h>

Böyle bir durumda, üstbilgiyi ve derleyici ile ilgili daha fazla bilgiyi foo-user bölümünde bulabilirsiniz. Bunu yapmanın basit bir yolu önceden oluşturulmuş modül tanımında dışa aktarmaları kullanmaktır. Örneğin, foo.h üstbilgisi,include modülünü aşağıdaki şekilde tanımlayabilirsiniz:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

Buradaki LOCAL_EXPORT_C_INCLUDES tanımı, derleme sisteminin yolu, önceden oluşturulmuş kitaplığın include dizinine ( yolunun LOCAL_C_INCLUDES değerine ayarlanması gerekir.

Bu işlem, derleme sisteminin gerekli üstbilgileri bulmasını sağlar.

Önceden oluşturulmuş kitaplıklarda hata ayıklayın

Hata ayıklama içeren önceden oluşturulmuş paylaşılan kitaplıklar sağlamanızı öneririz anlamına gelir. NDK derleme sistemi her zaman $PROJECT/libs/<abi>/ kitaplığına yükler ancak hata ayıklamayı sürümü (ndk-gdb ile hata ayıklama için)

Önceden oluşturulmuş kitaplıklar için ABI'ler seçin

Önceden oluşturulmuş paylaşılan kitaplığınızın doğru sürümünü seçtiğinizden emin olmalısınız görüntüleme sayısını artırır. TARGET_ARCH_ABI değişkeni, derleme sistemini uygun sürümünü yükleyin.

Örneğin, projenizde kitaplığın iki sürümü bulunduğunu varsayalım libfoo.so:

armeabi/libfoo.so
x86/libfoo.so

Aşağıdaki snippet, derlemenin tek bir kod yerine TARGET_ARCH_ABI sistemi kitaplığın uygun sürümünü seçer:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

TARGET_ARCH_ABI değeri olarak armeabi değerini belirttiyseniz derleme sistem, armeabi dizininde bulunan libfoo.so sürümünü kullanır. Eğer TARGET_ARCH_ABI değeri olarak x86 değerini belirttiyseniz derleme sistemi x86 dizinindeki sürüm.