Android_JNI实例

来源:互联网 发布:网络渠道销售授权书 编辑:程序博客网 时间:2024/05/01 01:56

实现Android 与C的交互

这里写图片描述

1.创建NDK环境搭建

这里写图片描述

2.配置环境变量

这里写图片描述
这里写图片描述

3.创建本地native方法

//创建本地方法,我直接在Activity中创建的  public native String getStringFromC();

这里如果使用系统给的AppCompatActivity,会出现异常找不到类AppCompatActivity,所以为了我继承的是Activity

Activity中完整代码

package com.oblivion.jni_text;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implements View.OnClickListener {    static {        System.loadLibrary("jni_text");    }//javah -d jni -classpath <SDK_android.jar>;<APP_classes> lab.sodino.jnitest.MainActivity    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(this);    }    public native String getStringFromC();    @Override    public void onClick(View v) {        Toast.makeText(MainActivity.this, getStringFromC(), Toast.LENGTH_SHORT).show();    }}
  1. Make一下,如果是project就MakeProject,如果是Module,就Make Module,如下图
    4.

4.到这一步需要构建com_oblivion_jni_text_MainActivity.h
实现方法有两个
第一个方式:直接书写,不过挺麻烦的,不推荐也不写了
第二个方式:Alt+F12,进入到Terminal控制台
通过cd指令进入到如下位置cd D:\AndroidStudioProjects\Demo\jni_text\src\main\java

在该位置下输入指令javah -jni com.oblivion.jni_text.MainActivity

//如下完整指令D:\AndroidStudioProjects\Demo\jni_text\src\main\java>javah -jni com.oblivion.jni_text.MainActivity

5.创建Android.mk文件

 #指定编译的文件夹  指定当前文件目录 LOCAL_PATH := $(call my-dir) #编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。 include $(CLEAR_VARS) #编译出来模块的名称 LOCAL_MODULE    := JniText # 编译的源代码的名称 LOCAL_SRC_FILES := JniText.c #编译一个动态库,静态库 #静态库 文件名.a   包含所有的函数并且函数运行的依赖,体积大,包含所有的API #动态库 文件名.so  包含函数,不包含函数运行的依赖,体积小,运行的时候,去操作系统寻找需要的API include $(BUILD_SHARED_LIBRARY)

6.根据创建出来的.h文件创建.c文件

#include "jni.h"jstring  Java_com_oblivion_jni_1text_MainActivity_getStringFromC  (JNIEnv * env, jobject obj){  return (*env)->NewStringUTF(env, "Hello from JNI !");  }

6.重新Make 一下,生成so文件
这里写图片描述

到这一步就进行完了,运行尝试一下吧,效果图在本章最上方

github源码地址

1 0