1、创建一个android工程
2、配置Anroid Studio
打开File ->Settings -> Tools -> External Tools
找到 external tools 然后点击右边方框的“+”。
填写相应的内容
//添加javah 命令
Name:javah
Description:javah
Program:$JDKPath$\bin\javah.exe
Parameters:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
Working directory:$ModuleFileDir$\src\main\java
//添加ndk-build 命令
Name:ndk-build
Description:ndk-build
Program:D:\androidSDK_NDK\android-sdk\ndk-bundle\ndk-build.cmd
Parameters:
Working directory:$ProjectFileDir$\app\src\main
//添加ndk-build clean 命令
Name:ndk-build clean
Description:ndk-build clean
Program:D:\androidSDK_NDK\android-sdk\ndk-bundle\ndk-build.cmd
Parameters:clean
Working directory:$ProjectFileDir$\app\src\main
3.新建jni目录
单击app右键 ->New ->Folder ->JNI Folder ->Finish
4.修改app下的build.gradle文件
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.example.ndktest"
minSdkVersion 17
targetSdkVersion 24
versionCode 1
versionName "1.0"
ndk{
moduleName "jniTest"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
5.修改gradle.properties文件
//添加
android.useDeprecatedNdk=true
6.新建
JniTest.java
public class JniTest
{
static
{
System.loadLibrary("jniTest");
}
public native String getString();
}
7.选中JniTest类 右键 External Tools ->javah 生成头文件
8.在jni目录下新建 testjni.cpp文件 写入内容
#include "com_example_ndktest_JniTest.h"
JNIEXPORT jstring JNICALL Java_com_example_ndktest_JniTest_getString(JNIEnv * env, jobject obj)
{
return (*env).NewStringUTF("hello from jni!");
}
9.在jni目录下新建 Android.mk 文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testJni
LOCAL_SRC_FILES =: testJni.cpp
include $(BUILD_SHARED_LIBRARY)
10.选中jni目录 右键 External Tools ->ndk-build 生成so文件
11.在MainActivity 中调用 运行
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.testJni);
tv.setText(new JniTest().getString());
}
}