JIN學習一、Android使用已有C/C++代碼、第三方SO庫的方法

1.配置好NDk編譯環境(這個Google一下,:))

2.將已有C/C++代碼,編譯成SO文件

3.Eclipse中新建Android工程,創建一個jni目錄。如下所示


4.在jni目錄創建C/C++文件,裏面調用步驟2函數,或者第三方SO的函數

5.創建Android.mk文件,內容爲:

LOCAL_PATH := $(call my-dir)
# Link libXXX.so
include $(CLEAR_VARS)  
LOCAL_MODULE :=XXX  
LOCAL_SRC_FILES := libXXX.so  
#LOCAL_SRC_FILES := /jni/libXXX.so  
include $(PREBUILT_SHARED_LIBRARY)  

include $(CLEAR_VARS)
LOCAL_MODULE    := XXXAgent
LOCAL_SRC_FILES := XXXAgent.cpp
LOCAL_SHARED_LIBRARIES := XXX
LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY)

將XXX替換爲編譯出的SO或者第三方SO的名字

6.將jni目錄下的C/C++編譯成Android通過JNI調用的SO文件,這裏名字爲  libXXXAgent.so

7.Android工程中使用時,首先加載一下用到的SO庫,即可正常使用了。

System.loadLibrary("XXX");
System.loadLibrary("XXXAgent");

說明:這裏的重點是如何調用第三方SO庫,所有部分細節沒有表述。比如Javah生成相關頭文件,jni調用等。


補充:上面步驟可能比較多,這裏舉一個例子加以說明。某天,你得到一個第三SO庫,名字就叫XXX。你發現裏面的功能正好是你Android項目裏需要的,可以拿來就用。這個消息令你高興萬分啊那是。但是,如何在Android裏使用呢,XXX庫裏的調用約定不符合JNI規定,是不能直接來用的。哈哈,想到了,創建一個XXXAgent.so。它的調用採用JNI,然後在實現裏調用第三方SO就可以了。以上就是大概的思路。


SO文件是如何自動安裝到虛擬機或者手機上呢,NDK生成的SO文件會自動放到libs/armeabi目錄下。而此目錄下的SO文件都會自動打包到APK,安裝後釋放到/data/data/項目名字/lib/下。這裏XXXAgent.SO文件生成libs/armeab,XXXAgent.SO依賴XXX文件,XXX文件自動拷貝到libs/armeab下。(XXX文件放在jni下,和Android.mk同級,這個是和Android.mk裏的設置配合使用的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章