Android NDK之FirstJNI

Android  2018年9月15日 pm4:41发布3个月前更新 城堡大人
107 0 0

工欲善其事必先利其器

本文设计软件信息如下:

一、工具简介

操作系统     :Windows 7

Eclipse 版本:Luna Service Release 2 (4.4.2)

NDK   版本:android-ndk-r12b-windows-x86_64 (Native Development Kit)

ADT 版本  :Version: 23.0.4.1468518 (Android Development Toolkit)

二、NDK配置

注意,本文是基于Eclipse+ADT环境配置好了之后的教程哈,如果没有配置号ADT,请移步到http://www.biumall.com/android.html 中找到“android-studio中文”网站,里面有对应软件下载。

哈哈 插播一则广告:<125啦·读书导航 - 为每个阅读者创造舞台>是我在维护的读书导航网站,欢迎使用。

如果你没有下载NDK,可以看看这篇文章《Android NDK 部分版本下载

原归正传,我们继续。

0、新建Android 工程

我这创建一个FirstJNI项目(略)

1、NDK的配置系统环境

PS:这一步可以忽略,不过后续我们需要使用,现在有空可以花点时间先配置。

点击计算机右键属性-->高级系统设置-->环境变量,如图
Android NDK之FirstJNI
然后在用户变量path和系统变量中增加如下内容:
系统变量:我们新定义一个变量NDK_ROOT,值:D:\android\android-ndk-r12b-windows-x86_64 (这个是你NDK目录路径)
用户变量:我们只需要修改path的值,在其最后新增:%NDK_ROOT% (记住,各个值直接是使用英文输入的";"进行分割的)

PS:红色字体是新增或需要注意的部分。

2、配置Eclipse的NDK环境

点击Eclipse的Window-->Preferences,进入如图界面,然后导入NDK路径:D:\android\android-ndk-r12b-windows-x86_64\build

Android NDK之FirstJNI
3、添加NDK支持

选中Android工程“FirstJNI”右键属性-->Android Tools-->Add Native Support-->在lib输入行中输入“FirstJNI”(这个你可以随便定义),点击“Finish”键后,会自动在“FirstJNI”项目中新增如下目录:

jni、obj等,重点是jni目录,其中新增了两个文件:Android.mkFirstJNI.cpp

如果在Add Android Native Support界面中无法按“Finish”键,并有“NDK location not valid in preferences.”提示时,这说明是上一步(2、配置Eclipse的NDK环境)没有配置好,因此要重新按照上面步骤配置一下即可。

4、创建native 方法

在MainActivity.java中新增如下代码

	private native String sayHello(); //定义native方法

	static{
		System.loadLibrary("FirstJNI");//加载FirstJNI.so库
	}
5、编辑FirstJNI.cpp文件

在编辑FirstJNI.cpp前,我们先把后缀“cpp”改为“c”。

为什么呢?我尝试过不改,但发现有些函数解析不了,因此按照网上很多教程方法,就是把“cpp”改为“c”。(这个后续研究一下)

除了要把“FirstJNI.cpp”改为“FirstJNI.c”之外,还需要把Android.mk文件的内容改为如下(红色字体):

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := FirstJNI
LOCAL_SRC_FILES := FirstJNI.c

include $(BUILD_SHARED_LIBRARY)

上面改好了我们就修改“FirstJNI.c”的内容,添加内容(红色字体)如下:

#include <jni.h>

jstring Java_com_la_firstjni_MainActivity_sayHello(JNIEnv* env, jobject thiz) {

	return (*env)->NewStringUTF(env, "您好啊,笔友城堡");
}

恩恩,这是个简单的方法。不过,聪明的你会发现此时Eclipse提示有错误“Method 'NewStringUTF' could not be resolved”、“Unresolved inclusion: <jni.h>”、“Type 'JNIEnv' could not be resolved”

不急,因为jni等相关的库文件没有导入,我们继续。

6、导入NDK中的库文件

在导入库前,我们先要看看我们创建的项目版本信息。在“FirstJNI”工程中找到“project.properties”文件并打开,有如下内容:

# Project target.
target=android-17

注意看红色字体的内容,此信息告诉我们“FirstJNI”工程的target版本是:android-17

因此我们要在“FirstJNI”工程中导入对应的头文件。

选择“FirstJNI”工程右键属性后显示如图(C/C++ General-->Paths and Synbols-->Add-->File system),最后找到NDK中的include文件,点击确认保存即可。

比如我们的是:D:\android\android-ndk-r12b-windows-x86_64\platforms\android-17\arch-arm\usr\include

顺利导入后上面错误提示就全部消失啦。

Android NDK之FirstJNI
7、编译apk运行即可

经过上面步骤,我这里可以正常运行啦。

 历史上的今天

  1. 2023: 图片圆角+倒影+缩放(0条评论)
  2. 2022: C语言中的malloc、calloc和free函数的使用(0条评论)
  3. 2021: 林语堂:人生就像一首诗(0条评论)
  4. 2020: ListView的使用简介(0条评论)
  5. 2019: 纪伯伦:岸边一捧沙(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

AIDL个人理解总结

前言之前也简单的使用过Android的AIDL,但也都是局限于使用,至于启动的原理等都没去了解。记录一下个人对AIDL的理解,方便自己查阅。正文之前AIDL的简单Demo:《Android aidl简单使用》和《Android aidl简单使用2》。回归正题。AIDL是Android ...

Internet时间同步服务器地址

阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址ntp1.aliyun.comntp2.aliyun.comntp3.aliyun.comntp4.aliyun.comntp5.aliyun.comntp6.aliyun.comntp7.aliyun.c...

Windows 文本大文件查看工具glogg

前言工作中,测试部偶尔要煲机测试,然后会提供一大堆巨大的日志。工作中比较常用的是notepad++(个人偏爱),经常打开大份日志时就卡顿,如果要整体搜索那就更快,偶尔甚至直接崩溃。同事有推荐pycharm看,但我不太喜欢,最后遇到glogg,看打日志就好多了。正文对于打日志,还有一种方式就...

C语言之指针数组和数组指针

前言简单记录一下指针数组和数组指针之间的区别。正文由于很容易搞混,因此这里做一下记录。指针数组指针数组是指具有若干个相同存储类型和数据类型的[指针变量]构成的组合。指针数组的一般形式:存储类型 数据类型 * 指针数组名 [大小]//指针数组,类型是int * 所以叫int型指...

朱自清 :绿

我第二次到仙岩的时候,我惊诧于梅雨潭的绿了。梅雨潭是一个瀑布潭。仙岩有三个瀑布,梅雨瀑最低。走到山边,便听见哗哗哗哗的声音;抬起头,镶在两条湿湿的黑边儿里的,一带白而发亮的水便呈现于眼前了。我们先到梅雨亭。梅雨亭正对着那条瀑布;坐在亭边,不必仰头,便可见它的全体了。亭下深深的便是梅雨潭。这个亭踞...

王小波:如何诚实地生活?

人忠于已知事实叫做诚实,不忠于事实就叫做虚伪。还有些人只忠于经过选择的事实,这既不叫诚实,也不叫虚伪,我把它叫做浮嚣。这是个含蓄的说法,乍看起来不够贴切,实际上还是合乎道理的:人选择事实,总是出于浮嚣的心境。过去我有过这样的人生观:人应该为别人而活着,致力于他人的幸福,不考虑自己的幸福。这是因为人...