Android Studio JNI 初体验

来源:互联网 发布:酒吧烟花在淘宝怎么买 编辑:程序博客网 时间:2024/06/02 07:20

环境准备

  1. ndk 环境设置
    这里写图片描述
    我选择了lldb ndk 然后next 直接就行了
  2. java 要正确设置

概念

  1. 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.由于工作需要,不足之处还请谅解