Android_JNI实例

实现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源码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值