Android native方法的动态注册

本文详细介绍了Android中JNI的动态注册方法,包括JNINativeMethod结构体、方法签名的生成,以及动态注册的步骤和优缺点。通过示例源码展示了如何在Android Studio中实现动态注册,并对比了静态注册的差异,强调动态注册在运行效率和灵活性上的优势。
摘要由CSDN通过智能技术生成

Android native方法的动态注册

目录

Android JNI简介

java的JNI(java native interface)是用于java调用底层C/C++代码的,在Android中,同样也有JNI的调用方法

在以前,使用的是Ndk来编译

而现在Android的标准开发工具由eclipse转向Android Studio后,Android Studio不仅支持NDK,而且增加了Cmake编译的支持

至于Ndk和Cmake,在此篇中不多作介绍

Android JNI的一般注册方法

以Android Studio自带模板为例子

新建项目时勾选include C++ support生成一个Empty Activity

在Android Studio会在MainActivityJava中的一个类里声明一个native方法

public native String stringFromJNI();

这声明很像接口或者说是抽象类的方式.

app下的build.gradle也会生成Cmake的配置


android {
    compileSdkVersion 27
    defaultConfig {
        //........................
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    //............................
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

app目录下也会生成一个CmakeLists.txt的文件,这个文件中定义了源文件路径,依赖的库,生成库的名称等信息.

默认的CmakeLists.txt指定了app/src/main/cpp/native-lib.cpp作为源代码文件

打开这个文件如下

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring

JNICALL
Java_com_yxf_dynamicnative_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

Java_com_yxf_dynamicnative_MainActivity_stringFromJNI()这个方法便是在MainActivity中native方法stringFromJNI()方法的实现

这个方法很长,因为java层调用就是依据这个这个函数名称来寻找到这个native方法的,方法的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值