新聞中心
對(duì)于Android應(yīng)用開發(fā),大部分情況下我們使用Java就能完整地實(shí)現(xiàn)一個(gè)應(yīng)用。但是在某些情況下,我們需要借助C/C++來寫JNI本地代碼。比如,在使用跨平臺(tái)的第三方庫(kù)的時(shí)候;為了提升密集計(jì)算性能的時(shí)候(這種情況下往往還可能會(huì)直接使用匯編語言)。因此,這里我將為大家介紹如何給其它開發(fā)者創(chuàng)建可供使用的靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù)。而應(yīng)用開發(fā)者如何去連接這些生成的靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù)。由于現(xiàn)在Android Studio已經(jīng)比較成熟,因此以下描述將基于Android Studio的目錄布局。
在Android Studio的一個(gè)項(xiàng)目工程下,會(huì)有一個(gè)app文件夾,這個(gè)文件夾主要存放我們編寫應(yīng)用的所有代碼以及相關(guān)其它資源。如果我們需要寫JNI,那么就需要在這個(gè)目錄下創(chuàng)建jni文件夾。jni文件夾里必須包含Android.mk文件、Application.mk文件以及你所要編譯的源文件。下面我們先給出編譯生成提供給第三方開發(fā)者使用的靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的Android.mk文件內(nèi)容:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # 編譯后生成的模塊名,在Java端使用System.loadLibrary加載模塊的的時(shí)候直接用此名 LOCAL_MODULE := my_blocks # LOCAL_SRC_FILES用于添加源文件(可以是.c,.cpp,.s等) LOCAL_SRC_FILES := my_block_test.c LOCAL_SRC_FILES += my_blocks_data.c LOCAL_SRC_FILES += my_runtime.c # 條件預(yù)編譯,如果當(dāng)前架構(gòu)為ARMv7以下的架構(gòu),則定義MY_NO_CSWAP這個(gè)宏 ifeq ($(TARGET_ARCH_ABI),armeabi) LOCAL_CFLAGS := -DMY_NO_CSWAP=1 endif # 連接系統(tǒng)編譯出的靜態(tài)庫(kù) LOCAL_STATIC_LIBRARIES := cpufeatures LOCAL_STATIC_LIBRARIES += ld.gold LOCAL_LDLIBS := -llog # 用于生成動(dòng)態(tài)庫(kù) # include $(BUILD_SHARED_LIBRARY) # 用于生成靜態(tài)庫(kù) include $(BUILD_STATIC_LIBRARY) $(call import-module,cpufeatures)
文章題目:AndroidNDK生成及連接靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的方法-創(chuàng)新互聯(lián)
文章地址:http://www.dlmjj.cn/article/hpjgj.html