Android JNI开发

Android JNI开发

一、下载配置环境
1、首先下载配置android studio ndk,然后在android studio中配置ndk环境,如下图所示(setting-Android SDK-SDK Tools)
在这里插入图片描述配置ndk路径二、新建项目
1、新建一个名为MyNDKDemo的android项目
在这里插入图片描述在这里插入图片描述2、首先在app底下配置gradle
在这里插入图片描述

sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDirs = ['src/main/jniLibs']//设置目标的so存放路径
    }
    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
        commandLine "D:\\Android\\sdk\\ndk-bundle\\ndk-build.cmd",

                //配置ndk的路径
                'NDK_PROJECT_PATH=build/intermediates/ndk',
                //ndk默认的生成so的文件
                'NDK_LIBS_OUT=src/main/jniLibs',
                //配置的我们想要生成的so文件所在的位置
                'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
                //指定项目以这个mk的方式
                'NDK_APPLOCATION_MK=src/main/jni/Application.mk'
    }
    //指定项目以这个mk的方式
    tasks.withType(JavaCompile) {
            //使用ndkBuild
        compileTask -> compileTask.dependsOn ndkBuild
    }

3、新建JNI类,在JNI类中随便定义一个本地方法

package com.ljs.jnidemo;

/**
 * author : Ben
 * e-mail : ben-lau@auratech.hk
 * time   : 2019/12/9
 * desc   :
 * version: 1.0
 */
public class JNI {
    static {
        System.loadLibrary("jni_demo");
    }

    public native int getInt();
}

4、生成头文件
当然可以通过命令行的方式,javah -jni 之类的,但是android studio已经简化这个工作了,配置一下,只需要右键生成.h文件即可。配置工作本质上也是调用javah命令。打开android studio的设置窗口,选择External Tools -> 新建(那个绿色+号)
在这里插入图片描述在这里插入图片描述配置好我们自定义的工具之后,找到对应的java类,右击,选择External Tools下的javah -jni后,将生成.h的头文件,头文件在我们项目main目录下的jni文件夹中。
在这里插入图片描述在这里插入图片描述5、我们在jni文件夹下新建.c文件,用来实现对应的本地方法,c文件的名称为jni

#include <stdio.h>
#include <com_ljs_jnidemo_JNI.h>

java_com_ljs_jnidemo_JNI_getInt(JNIEnv *env,jobject jobj){

return 23;
}

6、在jni文件夹下新建两个mk文件,分别为Application.mk和Android.mk
Application.mk

APP_ABI:=all

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := jni_demo

LOCAL_SRC_FILES := jni.c

include $(BUILD_SHARED_LIBRARY)

7、到这里基本上我们已经完成了jni的开发,然后我们rebuild一下整个工程,so文件就会生成,生成的so文件如下图所示
在这里插入图片描述
8、最后我们在MainActivity中调用JNI里面的方法,然后将获取到的值显示在TextView控件上

package com.ljs.jnidemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView tv_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_text = findViewById(R.id.tv_text);
        JNI jni = new JNI();
        tv_text.setText("" + jni.getInt());
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值