android jni sample,NDK Samples [1] - hello-jni

该项目演示如何从Java调用C代码,使用cmake插件编译。

最低要求:

Android Studio 版本大于 2.2

该项目演示了如何从Java代码调用C方法,并获取返回值。

HelloJni :: stringFromJNI();

演示了如何从java层调用C层对应stringFromJNI的方法。

HelloJni

/*

该方法在hello-jni实现。

可以通过ctrl+鼠标左键跳转到c方法。

*/

public native String stringFromJNI();

/*

该方法并没有任何的实现,纯粹展示了可以在同一个文件定义多个native方法。

在IDE上显示为红色,提示没有找到该方法的c实现方法。

调用会抛出UnsatisfiedLinkError

*/

public native String unimplementedStringFromJNI();

/*

要使用上述的native方法,需要先加载对应的动态库,本例为加载hello-jni库。

包中的动态库会被pm解压到 /data/data/[ packagename ]/lib 中。

*/

static {

System.loadLibrary("hello-jni");

}

hello-jni.c

/*

导入jni.h

java和c之间的交互基本由此实现,包括数据转换,方法调用等。

*/

#include

/*

stringFromJNI()的实现,返回一个包含平台类型信息的字符串

*/

JNIEXPORT jstring JNICALL

Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz)

{

// 根据平台定义一个ABI宏

...

return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");

}

CMakeLists.txt

# 配置cmake最低版本要求 3.4.1

cmake_minimum_required(VERSION 3.4.1)

# 使用指定的源文件,生成链接文件,并加入工程

# 此处则是:

# 指定使用 hello-jni.c (同目录下),

# 生成 hello-jni 链接文件,

# 通过 SHARED 指定链接文件为动态链接库。

add_library(hello-jni

SHARED

hello-jni.c)

# target_link_libraries要写在add_library之后

# 为目标文件链接其所需要的库

# 注意,库文件的顺序符合gcc链接顺序的规则,即被依赖的库放在依赖它的库的后面

target_link_libraries(hello-jni

android

log)

相对简单的项目,NDK开发的Hello World,只是编译工具换成了Cmake。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值