Android之JNI:Android Studio使用Android.mk編譯C/C++源碼


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文件
若要指定架構,可以使用如下命令:
 
   
   
   
           
  1. 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 error
collect2: error: ld returned 1 exit status
解決辦法:在虛擬機和window的共享文件中編譯會出現這種問題,copy項目至linux目錄即可。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM