公司須要作一個sdk,裏面須要用到別人寫的c文件,第一次作,各類百度,各類學習,如今作一個小總結:java
借鑑:http://blog.csdn.net/u013210543/article/details/52103015android
1、新建一個project:例 ExampleDemo, 包名爲:com.demo.example;windows
2、爲項目配置ndk環境:app
一、下載android ndk,並解壓,個人存放目錄爲:D:\sl\android-develop\android-ndk-r14b;學習
二、點擊進入Project Structuregradle
三、在彈出框中選中 SDK Location 標籤,在 Android NDK Location中選中ndk路徑:ui
四、查看local.propertiesspa
五、gradle.properties項目的末尾添加這行代碼:android.useDeprecatedNdk=true.net
3、開始建立操做;命令行
一、新建一個class,添加native方法:
二、執行Build --》Make Project:
完成後能夠看到,咱們生成了他的class文件
4、命令行生成.h文件
一、打開Terminal
二、在命令行輸入,進入main文件: cd app/src/main
執行編譯命令: javah -d jni -classpath [你的sdk路徑]\platforms\android-22\android.jar;….\build\intermediates\classes\debug [你的包名+包含native方法的類]
個人是:
D:\sl\androidstudioproject\qrcodedemo\QRCodeDemo>javah -d jni -classpath D:\sl\android-develop\android-sdk-windows\platforms\android-25\android.jar;app\src\main\java com.cirein.qrcod e.QRCodeManager
完成後會在項目中生成一個jni文件夾,下面就是咱們生成的.h文件:
文件中的內容爲:
如今開始實現.h文件裏面的方法:將.h文件複製拷貝到jni,並重命名爲:cirein.c(本身隨便定義名稱)
注:將其餘的c文件也能夠拷貝到jni文件夾下,在打so庫的時候會一併打入;
對cirein.c文件進行編輯:個人項目中使用了其餘的c文件,因此就不貼詳細代碼了
打開app Module的build.gradle文件,在defaultConfig節點裏添加如下代碼,並執行同步操做
我認爲重要的是建Android.mk和Application.mk文件:
個人Android.mk文件:
LOCAL_PATH := $(call my-dir) //固定寫 include $(CLEAR_VARS) //固定寫 LOCAL_MODULE := CIRein //生成的so名稱 LOCAL_SRC_FILES := cirein.c \ CIRein_Base64.c \ CIRein_XXTea.c //用到的c文件 include $(BUILD_SHARED_LIBRARY) //生成動態庫
個人Applicationmk文件:
APP_ABI := all //也能夠指定格式
5、生成SO文件
執行:ndk-build
D:\sl\androidstudioproject\qrcodedemo\QRCodeDemo>ndk-nuild
完成後就能夠看見生成的so文件了:
如今就可使用.so文件了