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:
- Modüle bir ad verin. Bu adın önceden oluşturulmuş adla aynı olması gerekmez. kitaplığının kendisidir.
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.Şuna bağlı olarak
PREBUILT_SHARED_LIBRARY
veyaPREBUILT_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.