Android NDK之FirstJNI

Android  2018年9月15日 pm4:41发布3个月前更新 91es.com站长
95 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.91es.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, "您好啊,91易搜");
}

恩恩,这是个简单的方法。不过,聪明的你会发现此时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、 本站名称: 91易搜
2、 本站网址: 91es.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

ijkplayer 初始化参数 IJKFFOptions

前言之前调试时有配置过,这是网上大牛整理的,今天有空就摘抄于此,方便自己查阅。好记性不如烂笔头正文开启硬解或软件硬解是由GPU解析软解是又CPU解析 0 使用软解 1 使用硬解ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATE...

修改Android系统时间设置到2099

前言修改Android支持的时间大于2037。系统时间限制默认是Int(有符号32位,最大0X7FFFFFFF)最大值即为: Integer.MAX_VALUE = 0X7FFFFFFF=2147483647 = 2038-01-19 11:14:07。个人流水账而已。正文将RTC时间限...

Android focus获取状态简介

前言简单记录一下Android中View的focus状态获取。正文隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读参考文章《Android中走马灯(或跑马灯)以及相关问题总结》

ACTION_USER_UNLOCKED发送分析

前言记录一下Android开机时ACTION_USER_UNLOCKED和ACTION_BOOT_COMPLETED啥时候发送的过程记录,主要是方便自己回顾。Android P分析为例。正文本文跟《Android开机动画关闭源码分析》存在大量重复,这就简单过一下。ResumeActi...

普希金:我曾经爱过你

我曾经爱过你:爱情,也许在我的心灵里还没有完全消亡,但愿它不会再打扰你,我也不想再使你难过悲伤。我曾经默默无语、毫无指望地爱过你,我既忍受着羞怯,又忍受着嫉妒的折磨,我曾经那样真诚、那样温柔地爱过你,但愿上帝保佑你找到的另一个人如我一样地爱你。...

DisplayMetrics获取宽高不对

前言Android P项目开发时,获取的屏幕高度存在误差,之前项目中获取的高度都是固定的,后面为了适配各种项目,改为了动态获取屏幕高宽。记录于此,方便自己查阅。好记性不如烂笔头正文Android 版本 : Android P获取的屏幕高度错误adb shell wm size#打...