NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)

栏目: 编程工具 · Android · 发布时间: 5年前

内容简介:3.执行完后生成了jni目录及头文件这个就是java与native方法进行交互的接口在AndroidStudio3.2.1版本以下,是其他处理方式,见下文
  1. java 类里写个native方法

    public class Java2CJNI {
            public  native String java2C();
        }
    复制代码
  2. javah 生成jni样式的标准头文件

    切换到 src/main/java 目录下执行

    javah -d ../jni ndkold.study.com.ndkolddemo.Java2CJNI
    复制代码

    -d ../jni 指定输出路径为:当前目录的父目录下的jni目录 ndkold.study.com.ndkolddemo.Java2CJNI这是包含native方法的那个类

3.执行完后生成了jni目录及头文件

NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)

这个就是java与native方法进行交互的接口

  1. 创建实现头文件的.C源文件 接下来要写个c代码,实现这个jni接口
//引入刚才生成的头文件
#include "ndkold_study_com_ndkolddemo_Java2CJNI.h"

//复制头文件里的要实现的方法名及其参数
JNIEXPORT jstring JNICALL
Java_ndkold_study_com_ndkolddemo_Java2CJNI_java2C(JNIEnv *env, jobject instance) {
//    实现这个方法,返回一个字符串
    return env->NewStringUTF("Hello from C++");
}
复制代码
  1. rebuild project 报错
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugNdk'.
> Error: Your project contains C++ files but it is not using a supported native build system.
  Consider using CMake or ndk-build integration. For more information, go to:
   https://d.android.com/r/studio-ui/add-native-code.html
  Alternatively, you can use the experimental plugin:
   https://developer.android.com/r/tools/experimental-plugin.html

复制代码

在AndroidStudio3.2.1版本以下,是其他处理方式,见下文 如何解决Your project contains C++ files but it is not using a supported native build system , 但是我用的是3.2.1版本,按照上述处理还是不行的,要参考这篇文章 android Studio(3.2.1) NDK配置

  1. rebuild报错后,复制Android.mk文件

找到Android.mk文件,在build/intermediates/ndk/目录里

NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)

复制到这里,jni/

NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  1. moudle.gralde文件配置
defaultConfig {
        ...
        ndk {
            moduleName "Java2C"
            //so文件名,如果这里配置了so文件名字,
            //记得更改Android.mk里的LOCAL_MODULE :字段为 LOCAL_MODULE := Java2C
            abiFilters "armeabi", "armeabi-v7a", "x86" //指定so文件所支持的CPU类型,如果不写的话,会生成所有的CPU类型的so文件
        }
    }
复制代码
android {
    ...
     externalNativeBuild {
            ndkBuild {
                path "src/main/jni/Android.mk"//指定Android.mk路径
            }
        }
    }
复制代码
  1. 再次rebuild
NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)

至此生成了libJava2C.so文件

9.调用native方法

public class Java2CJNI {
//    先加载so文件,注意这里的libname是Java2C,不是 libJava2C.so
//    这个libname是Android.mk里的 LOCAL_MODULE := Java2C 字段控制的,注意一定要一致的
    static {
        System.loadLibrary("Java2C");
    }

    public native String java2C();
}
复制代码

至此,java通过jni调用C++ 成功了

  1. 注意

如果你没成功,很可能是这几处不一致

NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)

github demo下载

参考

  1. Android NDK开发之从环境搭建到Demo级十步流

    这篇文章在AndroidStudio版本3.2.1上不适用,适用于更早期的版本

  2. android Studio(3.2.1) NDK配置

    这篇文章适用于AndroidStudio版本3.2.1以上

  3. 官方文档

  4. 慕课网视频-Android-NDK入门(Eclipse)

  5. 慕课网视频-Android-NDK进阶(AndroidStudio)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

电子商务:管理与社交网络视角(原书第7版)

电子商务:管理与社交网络视角(原书第7版)

(美)埃弗雷姆·特班(Efraim Turban)、戴维.金(David King)、李在奎、梁定澎、德博拉·特班(Deborrah Turban) / 时启亮、陈育君、占丽 / 机械工业出版社 / 2014-1-1 / 79.00元

本书对电子学习、电子政务、基于web的供应链、协同商务等专题进行了详细的介绍,全书涵盖丰富的资料以及个案,讨论了Web 2.0环境内的产业结构、竞争变化以及对当今社会的影响。另外,本书在消费者行为、协同商务、网络安全、网络交易及客户管理管理、电子商务策略等内容上都有最新的改编,提供读者最新颖的内容,贴近当代电子商务的现实。 本书适合高等院校电子商务及相关专业的本科生、研究生及MBA学员,也可......一起来看看 《电子商务:管理与社交网络视角(原书第7版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器