1、先下载并安装ndk
菜单 Tools -》SDK Manager :
如果没有选中 说明没有安装,选中 它 ,并点击按钮 “Apply”
就会下载,自动安装了
2、新创建一个工程 JniDemoByNDK ,并选择 Empty Activity。
3、在com.example.jnidemobyndk 下 创建一个新的 Java 类 :NDKTools:
其类的代码为:
package com.example.jnidemobyndk;
public class NDKTools {
public static native String getStringFromNDK();
}
4 、点击 菜单 : Build -> Make Project , 来编译 NDKTools.java 文件。
5、找到 NDKTools.class 文件:
其所在的目录为:
D:\AndroidTest\JniDemoByNDK\app\build\intermediates\javac\debug\classes\com\example\jnidemobyndk
6、进入 Android Studio 的 终端界面(Terminal),进入到指定的目录下:
D:\AndroidTest\JniDemoByNDK\app\build\intermediates\javac\debug\classes>
注意 :只能到 classes 这一层.
然后敲入命令:
javah -jni com.example.jnidemobyndk.NDKTools
回车键:
如果没有任何错误的话,会在classes 这一层 生成 一个 头文件:com_example_jnidemobyndk_NDKTools.h
7、在 main 目录下创建一个子目录 jni:
8、将com_example_jnidemobyndk_NDKTools.h 文件剪切到 jni 目录下
9、在 jni 下 新建一个cpp 文件:NDKTools.cpp(不知道为什么 创建 c 文件 总是编译不过,提示不是 utf-8格式,但明明是utf-8格式的文件,所以此处一定要创建 cpp 文件)
10、在NDKTools.cpp中加入以下代码
#include <string>
#include "com_example_jnidemobyndk_NDKTools.h"
JNIEXPORT jstring JNICALL
Java_com_example_jnidemobyndk_NDKTools_getStringFromNDK
(JNIEnv *env, jclass){
//std::string hello = "Hello from C++";
//return env->NewStringUTF(hello.c_str());
return env->NewStringUTF("Hellow World,这是隔壁老李头的NDK的第一行代码");
}
11、在 activity_main.xml 中的 TextView控件中加入 一行代码
android:id="@+id/tv"
12、在 MainActivity.java 代码中加入以下代码:
String text = NDKTools.getStringFromNDK();
Log.i("gebilaolitou","text="+text);
((TextView)findViewById(R.id.tv)).setText(text);
13、在 build.gradle 中加入:
在 defaultConfig 下 :
ndk{
moduleName "ndkdemotest-jni"
abiFilters "armeabi-v7a", "x86"
}
在buildTypes 下:
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']
}
14、添加 在 src/main/jni/ 目录下 添加 Android.mk 文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkdemotest-jni
LOCAL_SRC_FILES := NDKTools.cpp
include $(BUILD_SHARED_LIBRARY)
15、在 NDKTools.java 中加入下面代码
static {
System.loadLibrary("ndkdemotest-jni");
}
16、开始 编译,一气呵成。so存放位置
D:\AndroidTest\JniDemoByNDK\app\build\intermediates\merged_native_libs\debug\out\lib\armeabi-v7a
一般 都有好几处。
————————————————
转载于:https://blog.csdn.net/yaotianhao1005/article/details/106523049/