JNI 应用:使用ndk 编译 生成 so

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/

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/133028651