Tamam, şimdi düzenlemenizi görüyorum ve bu, belirli bir soruyu yanıtlamayı mümkün kılıyor. Eğer yerli kütüphane/ler oluşturmak için Android NDK kullanmak istiyorsanız
Sen zorunluluk uygulamanız için en az bir Android.mk
dosya var. Gerçi bu bir şart değil. Cmake, ya da "geleneksel" makefiles ile "bağımsız bir toolchain" veya bir MS Visual Studio eklentisi veya başka bir şekilde inşa etmek tamamdır. Önemli olan sonucudur. Sonuç, biyonik çalışma zamanı için uyumlu bir derleyici ile oluşturulmuş bir paylaşılan nesnedir.
O ${project_root}/libs/armeabi/
dizinde kütüphane koymak Goode mantıklı (ARM v6 uyumlu cihazlara, x86 diğer alt dizinleri için, MIPS, kol v7a) APK oluşturucu uygulama yükleyici doğru sürümü açmak için izin vermek, doğru şekilde paketleyin izin (cihaz işlemcisi ile uyumlu) cihazda /data/data/${package_name}/lib
dizinine ve son olarak da Java'dan kullanmak için System.loadLibrary(short_name)
'u kullanabilir. Ama aynı zamanda so
dosyasını farklı şekilde paketlemek, elle paketini açmak ve cihaz dosya sistemindeki herhangi bir yerden yüklemek (uygulamanızın bu dosyayı yazma ve okuma izninin olması koşuluyla) oldukça mümkündür.
Ancak, egzotik durumları filtrelersek, ${project_root}/jni
dizininde bir Android.mk olması çok daha rahattır. ndk-build
komutu bakımından, her kitaplık ayrı bir MODÜLdür, ancak üçü de bir Android.mk dosyasında tanımlanabilir. Öte yandan, kütüphaneleriniz izole edilmişse (örneğin, ayrı 3. şahıslardan geliyorsa), muhtemelen üç Android.mk dosyası oluşturmayı tercih edersiniz. Neyse ki, ndk-build
gnu make etrafında bir sarmalayıcıdan başka bir şey değildir ve Android.mk'deki basit include
ifadesi diğer maketlerde olduğu gibi çalışır.
Özetle, senin durumun muhtemelen basit Applications/MyApplication/ [Application]/jni/Android.mk
dosyası kapsamındadır:
include ../../Libraries/libOne/Android.mk
include ../../Libraries/libTwo/Android.mk
include ../../Libraries/libThree/Android.mk
Sana libOne ve libTwo arasında var bağımlılık ne bilmiyorum ama libOne için dosya Libraries/libOne/Android.mk
benzeyecek
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
ve Libraries/libThree/Android.mk
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
ndk-build
'u Applications/MyApplication/ [Application]
dizininden - komut isteminden veya Eclipse ADT eklentisinden çalıştırmalısınız.
aynı
jni
dizinde bir
Android.mk
dosyası tarafından ifade edilebilir
güncelleme:
LOCAL_PATH = ../../Libraries/libOne
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
LOCAL_PATH = ../../Libraries/libThree
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
size Android.mk paylaşır mısınız? Projelerini nasıl kurduğun belli değil. –
@AlexCohn Henüz bir Android.mk işletim sistemim yok, sorun bu. Her üç kütüphanenin nasıl oluşturulacağını ve bunları ana uygulamadan nasıl birbirine bağlayacaklarını açıklayan bir cevap arıyorum. –
Henüz bir Android.mk sürümü çalıştırmamış olduğunuzu anlıyorum, ancak henüz çalışmadığınız bir tane var, değil mi? –