环境准备
- ndk 环境设置
我选择了lldb ndk 然后next 直接就行了 - java 要正确设置
概念
- ndk是个啥?
ndk: Native Development Kit
NDK允许开发人员使用本地代码语言(例如C和C++)实现应用的部分功能。这样以代码重用的形式能够给某类应用提供方便,而且在某些情况下能提高运行速度…巴拉巴拉一堆
call c
- 新建工程 myNDK
一路点击,最后完成。
* 创建一个弹窗
在MainActive增加代码
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("标题")
.setMessage("内容")
.setPositiveButton("确定", null)
.show();
}
});
- 增加JNIdemo.java,内容如下:
public class JNIdemo{
static {
System.loadLibrary("JNIdemo");
//这里的"JNIdemo"要和build.gradle里面设置的名字,必须一致,其实这里用的是后来生成的so的名字,两者一致就好
}
public static native String callc();
}
- 目录结构如下
- 完成后,执行Build->reBuild Project 会生成class文件,目录结构如下
到classes/debug/文件夹下,Shift+鼠标右键,选择“此处打开命令窗口”输入javah命令,生成.h文件
javah -jni com.example.demo.myndk.JNIdemo
生成.h文件
在src/main下建立文件夹jni,把这个.h文件拷贝进去,并建立.c文件(注意,这里不是cpp文件)
代码如下
#include "com_example_demo_myndk_jnidemo.h"
JNIEXPORT jstring JNICALL Java_com_example_demo_myndk_JNIdemo_callc
(JNIEnv *env, jclass obj){
return (*env)->NewStringUTF(env,"this is Android call C ");
}
在grade.properties文件增加
android.useDeprecatedNdk=true
在app下的build.gradle的defaultConfig节点增加
ndk {
moduleName "JNIdemo" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86"
}
在MainActive里调用代码如下
...
import static com.example.demo.myndk.JNIdemo.callc;
...
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s = callc();
new AlertDialog.Builder(MainActivity.this).setTitle(s).setMessage("内容")
.setPositiveButton("确定", null).show();
}
});
Build->Rebuild Project看看是否报错
结语
本次是第一次使用java,第一次开发android.由于工作需要,不足之处还请谅解