部署ndk环境(废弃)

1.从网上获取android-ndk-r20,首先肯定是要有NDK的包,去http://developers.google.cn谷歌的中国官方网站上面去下.然后配置好环境变量

在配置ndk系统环境变量,添加一个变量名“NDK_ROOT”,值为NDK的路径。

在path中新建%NDK_ROOT%

2.在File---Project Structure中配置好ndk的路径

3.在项目名所在的目录下创建一个jni的文件夹,在这个目录里,添加c/c++文件

4.在创建好的jni目录下创建一个Android.mk文件,(就是jni所在路径的makefile)

5.在Android.mk中写如下代码

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

#libtestjni.so  //生成so的名字
LOCAL_MODULE := testjni   //生成模块的规则,生成的so的名字testjni
LOCAL_SRC_FILES := test.cpp   //生成模块的规则,so依赖的cpp文件可以有多个
LOCAL_LDLIBS := -llog    //生成模块的规则,当前so依赖的so

include $(BUILD_SHARED_LIBRARY)   //生成尾缀是so的文件

6 修改 项目名app/build.gradle
在这个文件中的 android{}作用域中添加如下代码

sourceSets {
        main.jniLibs {
            //表示生产的so文件所在路径在什么位置
            source {
                srcDirs = ['../libs']
            }
        }
    }

    externalNativeBuild {
        ndkBuild {
            //表示构件androidJNI的Android.mk的所在路径
            path '../jni/Android.mk'
        }
    }

7.在jni路径下创建一个test.cpp,并随便填充点代码,使用Android studio 中的Terminal命令行进入到jni目录下输入ndk-build.cmd,如果能生产so文件说明cpp编译环境成功。

test.cpp代码

void testJni_Hello()
{
    return;
}

8.在目录下面创建一个HelloJNI.java的文件夹,创建相关的函数

使用JNI函数的方式

//调用jni函数的方法
HelloJNI.getInstance().hello_jni();

HlloeJNI.java

package com.ldw.hello;

/**
 * author: ldw
 * created on: 2019/10/11 3:06
 * description:
 */
//专门调用jni C++接口的类
public class HelloJNI {

    private static HelloJNI instance = null;
    //设置一个单例
    public static HelloJNI getInstance() {
        if (instance == null) {
            instance = new HelloJNI();
        }

        return instance;
    }

    //提供一个调用JNI接口的成员方法
    public native void hello_jni();

    //加载cpp给提供的 动态库
    static {
        System.loadLibrary("testjni"); //libtestjni.so
    }
}

9.在命令窗口下输入命令javah -jni com.ldw.hello.HelloJNI

执行命令以后java目录下生成com_ldw_hello_HelloJNI.h文件

这样java中的方法hello_jni()对应到c语言中的方法是Java_com_ldw_hello_HelloJNI_hello_1jni

com_ldw_hello_HelloJNI.h文件内容如下,这个文件都是函数的声明,需要在实现函数test.cpp中实现

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ldw_hello_HelloJNI */

#ifndef _Included_com_ldw_hello_HelloJNI
#define _Included_com_ldw_hello_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ldw_hello_HelloJNI
 * Method:    hello_jni
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_ldw_hello_HelloJNI_hello_1jni
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

10.在test.cpp中实现java中hello_jni()的方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值