1 創(chuàng)建項(xiàng)目
依次選擇路徑 File-> New -> Other -> Android -> Android Application Project

點(diǎn)擊"Next",填寫基本的項(xiàng)目信息

若是其它數(shù)據(jù)不需要修改的,一直Next到底,最后點(diǎn)擊Finish,此時(shí)項(xiàng)目創(chuàng)建成功!

2 運(yùn)行項(xiàng)目
右擊項(xiàng)目,選擇Run As -> Android Application,此時(shí)我的項(xiàng)目這里報(bào)錯(cuò)
Failed to load C:\tgcity\android-sdk-windows\build-tools\26.0.0\lib\dx.jar
Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!
我的解決辦法是在project.properties中添加
sdk.buildtools=25.0.2
此時(shí)項(xiàng)目就可以跑起來了
3 生成.h文件
首先在MainActivity中創(chuàng)建公開方法
public static native String getStringFromJNI();
其次在項(xiàng)目的第一層創(chuàng)建“jni”文件夾
最后執(zhí)行語句
javah -classpath bin/classes -d jni com.example.testjnidemo.MainActivity
此時(shí)該步驟報(bào)錯(cuò)->無法訪問android.app.Activity
具體原因可以參考javah生成報(bào)錯(cuò)
最終輸入的指令為
javah -classpath bin/classes;C:\tgcity\android-sdk-windows\platforms\android-26\android.jar -d jni com.example.testjnidemo.MainActivity
刷新項(xiàng)目即可出現(xiàn)生成的.h文件

4 配置jni中文件
先看一下jni結(jié)構(gòu)

首先是.c文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_testjnidemo_MainActivity_getStringFromJNI (JNIEnv * env, jclass jclass){
return (*env)->NewStringUTF(env,"message back succeed");
}
接著是Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tgcity #生成的so文件名稱
LOCAL_SRC_FILES := tgcity.c #編譯的文件名稱
include $(BUILD_SHARED_LIBRARY)
最后是Application.mk文件
APP_ABI := all
使用指令進(jìn)行生成so文件
ndk-build

刷新項(xiàng)目即可看到生成的so文件

5 使用
導(dǎo)入so文件
static{????
????System.loadLibrary("tgcity");
}
...
Log.e(getLocalClassName(), getStringFromJNI());
查看輸出結(jié)果
