在Android下進行jni的開發首先下載ndk是必須的,使用as工具只需要到在系統設置里下勾選下載即可,如圖
步驟
1.在main下新建 jni 目錄,如圖:
2.再新建一個 c 或者 c++ 文件,如圖:
3.在Java里面聲明個 native 方法:
private native String jniTellMeWhy(String hiJni);
如圖
4.去我們在jni目錄下建立的hi_jni.cpp文件里書寫代碼
如圖
5.在jni目錄下新建兩個文件一個叫 Android.mk ,一個叫 Application.mk
6.編寫Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hi_jni
LOCAL_SRC_FILES := hi_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
#LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
說明
LOCAL_PATH :是得最先配置的,它用于在開發tree中查找源文件。
include $(CLEAR_VARS) : CLEAR_VARS 變量指向特殊 GNU Makefile ,可為您清除許多 LOCAL_XXX 變量,例如LOCAL_MODULE 、 LOCAL_SRC_FILES 和 LOCAL_STATIC_LIBRARIES 。 請注意,它不會清除 LOCAL_PATH
LOCAL_PATH :此變量必須保留其值,因為系統在單一 GNU Make 執行環境(其中所有變量都是全局的)中解析所有構建控制文件。 在描述每個模塊之前,必須聲明(重新聲明)此變量。
LOCAL_MODULE :存儲您要構建的模塊的名稱,并指定想生成的 so 叫什么名字。當然生成產物的時候前面會自動拼接上 lib,后面會自動拼接上 .so 。
LOCAL_SRC_FILES :要編譯的源文件,多個文件以空格分開即可。當導入 .a 或者 .so 文件的時候一個模塊只能添加一個文件,后面將演示。
LOCAL_C_INCLUDES :可以使用此可選變量指定相對于 NDK root 目錄的路徑列表,以便在編譯所有源文件(C、C++ 和 Assembly)時添加到 include 搜索路徑,通常是原文件地址、頭文件地址等。
LOCAL_LDLIBS :這里是添加一個本地依賴庫,比如可以添加一個 log 庫,當然我沒用到就注釋了。include $(BUILD_SHARED_LIBRARY) :這一行幫助系統將所有內容連接到一起, BUILD_SHARED_LIBRARY 變量指向GNU Makefile 腳本,用于收集您自最近 include 后在 LOCAL_XXX 變量中定義的所有信息。 此腳本確定要構建的內容及其操作方法。 BUILD_SHARED_LIBRARY 代表動態庫, BUILD_STATIC_LIBRARY 代表靜態庫 。
7.編寫 Application.mk
# 指定生成哪些cpu架構的庫
APP_ABI := armeabi-v7a
# 此變量包含目標 Android 平臺的名稱
APP_PLATFORM := android-22
8.在 jni 目錄下面打開命令行工具,然后執行 ndk-build ,即可在 libs 目錄下得到產物:
/Users/wangqingbang/Library/Android/sdk/ndk-bundle/ndk-build
9.把libs包下產物放到 jniLibs 下面
10.運行程序,結果如圖