一肉康、簡單了解
NDK全名:Native Development Kit
由Google提供,幫助開發(fā)C/C++動態(tài)共享庫诫钓,在Android上運行
二赋咽、下載配置
下載地址:
https://developer.android.com/ndk/downloads/index.html環(huán)境配置(Linux環(huán)境)
- 下載的linux下的壓縮包解壓后的目錄:
/home/jiana/Android/android-ndk-r12b
- vim打開環(huán)境配置文件
$sudo vim /etc/profile
當前配置:
ANT_HOME=/home/jiana/app/apache-ant-1.9.7
JAVA_HOME=/usr/java/jdk1.8.0_91
PATH=$JAVA_HOME/bin:$PATH:$ANT_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/home/jiana/文檔/javaStudy:/home/jiana/workspace
export JAVA_HOME PATH CLASSPATH ANT_HOME
添加NDK配置后:
NDK_HOME=/home/jiana/Android/android-ndk-r12b
ANT_HOME=/home/jiana/app/apache-ant-1.9.7
JAVA_HOME=/usr/java/jdk1.8.0_91
PATH=$JAVA_HOME/bin:$PATH:$ANT_HOME/bin:$NDK_HOME
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/home/jiana/文檔/javaStudy:/home/jiana/workspace
export JAVA_HOME PATH CLASSPATH ANT_HOME NDK_HOME
- 重啟電腦
- 測試是否配置成功
$ ndk-build
三眯漩、編寫JNI程序
簡介:JNI全名Java Native Interface芹扭,java代碼調(diào)用其他語言代碼的接口。
- 簡單案例實現(xiàn)赦抖,步驟:(Android studio項目中)
- 功能:返回傳入的參數(shù)
- activity_main.xml添加一個按鈕
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:onClick="btnClick" />
</RelativeLayout>
- MainActivity中添加Button點擊事件舱卡,和
native
聲明的方法
public void btnClick(View view) {
Button btn = (Button) view;
btn.setText(say("hello world"));
}
public native String say(String value);
- 生成
.h
頭文件:1.到項目的java目錄。2.命令:javah -jni 包名+類名
選區(qū)_021.png - 創(chuàng)建放C/C++代碼的目錄:項目/app目錄右擊 > New > Folder > JNI Folder > Finish
出現(xiàn)jni目錄:項目名/app/src/main/jni
將頭文件io_xujiaji_nativetest_MainActivity.h
放進jni目錄 - jni目錄下創(chuàng)建一個C文件
say.c
#include "io_xujiaji_nativetest_MainActivity.h"
JNIEXPORT jstring JNICALL Java_io_xujiaji_nativetest_MainActivity_say
(JNIEnv * env, jobject obj, jstring say){
return say;
}
- 生成動態(tài)鏈接庫
- 在jni目錄添加動態(tài)鏈接庫配置文件
Android.mk
- 在jni目錄添加動態(tài)鏈接庫配置文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := say
LOCAL_SRC_FILES := say.c
include $(BUILD_SHARED_LIBRARY)
```
意義:
LOCAL_PATH:編譯的路徑
include $(CLEAR_VARS):清除一些LOCAL_XXX樣式的模塊
LOCAL_MODULE:定義模塊的名稱
include $(BUILD_SHARED_LIBRARY):編譯的是動態(tài)鏈接庫
- 編譯
命令進入jni目錄下編譯:ndk-build
選區(qū)_023.png
Android studio項目配置
- 在
local.properties
添加ndk目錄:
ndk.dir=/home/jiana/Android/android-ndk-r12b
- 在gradle.properties添加:
android.useDeprecatedNdk=true
- 在app/build.gradle的defaultConfig{}中添加:
ndk{
moduleName "say"http://mk中定義的模塊名
}
- 在MainActivity中加載動態(tài)鏈接庫
static {
System.loadLibrary("say");
}
運行
點擊按鈕前.png
↓↓↓
↓↓↓
點擊按鈕后.png