標籤:
1.產生.h標頭檔,配置.c檔案(可查看Android之JNI:Android Studio使用Gradle編譯C/C++源碼)2.編寫Android.mk
//Android.mk簡介參考連結:http://blog.sina.com.cn/s/blog_602f8770010148ce.html
LOCAL_PATH:= $(call my-dir) //Android.mk 檔案首先必須定義LOCAL_PATH變數,以便用於在開發樹中尋找源檔案.宏函數‘my-dir‘由編譯系統提供,用於返回當前路徑(即包含Android.mk的目錄)
include $(CLEAR_VARS) //CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE清除許多LOCAL_XXX變數(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH.因為所有的編譯控制檔案都在同一個GNU MAKE執行環境中,所有的變數都是全域的,所以有必要.
LOCAL_MODULE := juziJni //表示編譯的動態庫名稱.名稱必須唯一,而且不包含任何空格且不要以lib開頭
LOCAL_SRC_FILES:= jni_use.c //表示原始碼檔案
include $(BUILD_SHARED_LIBRARY) //表示編譯產生共用庫,是編譯系統提供的變數,指向一個GNU Makefile指令碼,負責收集自從上次調用‘include $(CLEAR_VARS)‘以來,定義在LOCAL_XXX變數中的所有資訊,並且決定編譯什麼,如何正確地去做.(BUILD_STATIC_LIBRARY:編譯為靜態庫;BUILD_SHARED_LIBRARY :編譯為動態庫;BUILD_EXECUTABLE:編譯為Native C可執行程式)
3.linux環境下使用ndk-build命令編譯產生.so檔案
若要指定架構,可以使用如下命令:
ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"
4.使用產生的.so檔案【Android之Android Studio下使用JNI:Android Studio下使用.so檔案】
小Tips:1.Android.mk:2: *** missing separator. Stop.
LOCAL_PATH:= $(call my-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := juziJni
LOCAL_SRC_FILES:= jni_use.c
include$(BUILD_SHARED_LIBRARY)
解決辦法:$符號前面必須加一個空格
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := juziJni
LOCAL_SRC_FILES:= jni_use.c
include $(BUILD_SHARED_LIBRARY)
2./home/emily/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: ./obj/local/armeabi/PassWorld: Input/output errorcollect2: error: ld returned 1 exit status解決辦法:在虛擬機器和window的共用檔案中編譯會出現這種問題,copy項目至linux目錄即可。
來自為知筆記(Wiz)
Android之JNI:Android Studio使用Android.mk編譯C/C++源碼