? ? ? ? ? ? ? ? ? ? ?window 下 AndroidStudio JNI開發(fā)環(huán)境搭建以及Test Project
開發(fā)環(huán)境:
windows 7
AS2.1.2
1. NDK下載和環(huán)境配置
1.1 ? 點(diǎn)解studio 工具File --》ProjectStructure--》SDK Location
1.2 配置NDK
2.ndk環(huán)境搭建好,新建Test 測(cè)試工程
2.1 新建好的項(xiàng)目如下:
2.2檢測(cè)local.properties 文件里面是否有ndk的路徑正驻,沒有加上蹲蒲。
2.3 ?然后在app\build.gradle?
加上這段代碼:
ndk{
moduleName “MyLibrary”
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir “src/main/libs”
}
別加錯(cuò)位置了谦屑。具體見下圖:
2.4 在gradle.properties中添加
2.5 然后新建JNI文件夾
2.6下面開始配置工具三個(gè)工具流妻,分別用來編譯java類文件痘拆,C文件。clean JNI工程
File--->settings-->external Tools ?,分別配置javah喊废,ndk-build ,ndk-build clean?
javah配置:
ndk-build 配置:
ndk-build clean 配置:
3. 添加對(duì)應(yīng)JNI 代碼:
3.1 ? // 1 定義一個(gè)c方法的接口? 相當(dāng)于在java代碼中定義了一個(gè)接口 接口的實(shí)現(xiàn)方法是C語(yǔ)言實(shí)現(xiàn)的
public native String helloWorldFromC();
Activity 中調(diào)用JNI祝高,如圖:
3.2 點(diǎn)擊 external Tools javah? 編譯myndk
下圖結(jié)果表示編譯通過,同時(shí)生成了com_example_test_myjnitest_myndk.h
3.3 ?將com_example_test_myjnitest_myndk.h 剪切到JjniI文件目錄下污筷,并且將內(nèi)容全部拷貝到新建test.c中
注意 Java_com_example_test_myjnitest_myndk_sayHello 方法參數(shù)修改工闺,具體實(shí)現(xiàn)在該方法內(nèi)
3.4jni文件目錄下,新增andrond.mk
/ andrond.mk? 告訴編譯器 如何把c代碼打包成函數(shù)庫(kù)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE? ? := TestHello (庫(kù)函數(shù)名字)
LOCAL_SRC_FILES := test.c (接口C語(yǔ)言實(shí)現(xiàn)的文件名)
include $(BUILD_SHARED_LIBRARY)
3.5? 把c代碼 打包成函數(shù)庫(kù) ,右擊test.c文件 瓣蛀,external Tools --》ndk-build
編譯成功陆蟆,無錯(cuò)誤,如下圖
生成lib文件如圖:
3.5 在myndk? java代碼中 引入庫(kù)函數(shù) // 注意事項(xiàng) 去掉前面的lib 后面的.so 用于加載lib文件
3.6 在Activity代碼中調(diào)用myndk JNI 接口
最后運(yùn)行app 查看效果惋增!