一、配置NDK包路径
- 下载NDK开发包
NDK开发包地址
101.png我这里下载的最新的r20 ,因为有一个包r18之后移除了,为了兼容将r17下载 将缺少的包拷贝进去
001.png
二、增加本地方法类
package com.rrcc.ndkdemo;
public class Hello {
static {
System.loadLibrary("hello");
}
public static native String sayHello();
}
三、通过命令生成头文件
-
javah -d ../jni com.rrcc.ndkdemo.Hello
110.png
112233.png
四、创建native方法文件
头文件#include "com_rrcc_ndkdemo_Hello.h" 为步骤三生成的
#include "com_rrcc_ndkdemo_Hello.h"
JNIEXPORT jstring JNICALL Java_com_rrcc_ndkdemo_Hello_sayHello
(JNIEnv * env, jclass jclass1){
return env->NewStringUTF("from C");
}
五、build.gradle 文件配置
002.png六、通过ndk-build 自动生成so文件
1. module 处右键 选择 Link C++ Project with Gradle
ndk-build对应的 Android.mk文件却有现成的 而CMake 对应的 CMakeLists.txt 文件需要重新写
004.png 006.png 007.png2. 生成so文件、然后拷贝到app的libs文件目录下
008.png
009.png
七、方法调用
package com.rrcc.ndkdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btn = null;
TextView textView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
textView = findViewById(R.id.text);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(Hello.sayHello());
}
});
}
}
网友评论