1 创建项目
依次选择路径 File-> New -> Other -> Android -> Android Application Project
点击"Next",填写基本的项目信息
若是其它数据不需要修改的,一直Next到底,最后点击Finish,此时项目创建成功!
2 运行项目
右击项目,选择Run As -> Android Application,此时我的项目这里报错
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
此时项目就可以跑起来了
3 生成.h文件
首先在MainActivity中创建公开方法
public static native String getStringFromJNI();
其次在项目的第一层创建“jni”文件夹
最后执行语句
javah -classpath bin/classes -d jni com.example.testjnidemo.MainActivity
此时该步骤报错->无法访问android.app.Activity
具体原因可以参考javah生成报错
最终输入的指令为
javah -classpath bin/classes;C:\tgcity\android-sdk-windows\platforms\android-26\android.jar -d jni com.example.testjnidemo.MainActivity
刷新项目即可出现生成的.h文件
4 配置jni中文件
先看一下jni结构
首先是.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
使用指令进行生成so文件
ndk-build
刷新项目即可看到生成的so文件
5 使用
导入so文件
static{
System.loadLibrary("tgcity");
}
...
Log.e(getLocalClassName(), getStringFromJNI());
查看输出结果