NDK之HelloWord!
使用工具:Android Studio 2.2.2
1. 配置local.properties添加NDK路径。

效果:当然,你也可以手输写进去。

2. 项目gradle.properties追加
android.useDeprecatedNdk=true

3. 创建jni文件夹

效果:

OK,开始写代码咯
4. 编写Java层引用native的代码

5. 生成与之对应的.h头文件
5.1 进入java的文件夹下

5.2 javah命令生成.h文件,记得带上完整的包名。

5.3 将.h文件剪切到jni文件夹下

5.4 编写与之对应的C文件

#include <jni.h>
#include <com_example_lanhe_android_jnistringdemo_jni_HelloWorld.h> JNIEXPORT jstring JNICALL Java_com_example_lanhe_1android_jnistringdemo_jni_HelloWorld_getHelloWorld
(JNIEnv *env, jobject thiz){ return (*env)->NewStringUTF(env, "Hello Jni");
}
5.5 cpp文件夹下添加Android.mk 文件

Android.mk: 直接复制,再此基础上改就好了。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := HelloWorldLib
LOCAL_SRC_FILES := com_example_lanhe_android_jnistringdemo_jni_HelloWorld.c include $(BUILD_SHARED_LIBRARY)
6. build.gradle 配置ndk
ndk {
//这里的模块名称要对应之前的名称
moduleName "HelloWorldLib"
//生成对应硬件平台的so
abiFilters "armeabi","arm64-v8a","armeabi-v7a", "x86"
}

7.测试使用

效果:

题外话:
1.发生了如下错误:
http://tools.android.com/tech-docs/new-build-system/gradle-experimental.Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\AndroidDevelopmentTools\android-ndk-r10b\ndk-build.cmd'' finished with non-zero exit value 2
解决方法:在cpp文件夹下追加一个empty.c

2.发生了如下错误:
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: Error while executing 'D:\AndroidDevelopmentTools\android-ndk-r10b\ndk-build.cmd' with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\workspace\workspace_AndroidStudio\JNIHelloWorldDemo\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-24 NDK_OUT=D:\workspace\workspace_AndroidStudio\JNIHelloWorldDemo\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=D:\workspace\workspace_AndroidStudio\JNIHelloWorldDemo\app\build\intermediates\ndk\debug\lib APP_ABI=armeabi-v7a,armeabi,arm64-v8a,x86}
解决方法:把项目的build.gradle的版本改低一点。(不怎么推荐)

3.错误描述如下:
Error:(7, 3) opening dependency file D:\workspace\workspace_AndroidStudio\JNIHelloWorldDemo\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/hello/D_\workspace\workspace_AndroidStudio\JNIHelloWorldDemo\app\src\main\jni\com_example_lanhe_android_jnihelloworlddemo_helloworld_HelloWorld.o.d: No such file or directory
解决办法:.h的文件名称太长了,把它放到外层目录,剪短它的长度。重新设置.h文件。
原来是工程结构的目录太深,android stuido 无法找到并创建so 文件build时的临时目录。只要将工程目录深度减少一 两级时就可以正常编译。
参考资料:
http://blog.csdn.net/qq_30379689/article/details/52590189
http://www.aichengxu.com/view/79290
NDK之HelloWord!的更多相关文章
- Android(java)学习笔记257:JNI之helloword案例(利用NDK工具)
1.逻辑思路过程图: 2.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们要 ...
- Android(java)学习笔记201:JNI之helloword案例(利用NDK工具)
1. 逻辑思路过程图: 2.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们 ...
- Android NDK开发初识
神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...
- Android NDK开发初步
在配置好NDK开发之后就能够使用C/C++开发android了.以下以一个HelloWorld项目来说明 1.新建一个Androidproject 新建一个HelloWorldproject 代码例如 ...
- linux下ndk编译命令行程序及配置
1.在http://developer.android.com/tools/sdk/ndk/index.html下载Android-ndk-r8e-linux-x86.tar.bz2,解压后把andr ...
- 安卓JNI精细化讲解,让你彻底了解JNI(一):环境搭建与HelloWord
目录 1.基础概念 ├──1.1.JNI ├──1.2.NDK ├──1.3.CMake与ndk-build 2.环境搭建 3.Native C++ 项目(HelloWord案例) ├── 3.1.项 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- NDK开发_笔记0
自谷歌搜索退出中国以来,谷歌对全球第二大市场中国的态度一直保持冷淡.可是北京时间12月8日,谷歌2016开发者大会在北京召开,同时专门针对中国的谷歌开发者网站已经上线:https://develope ...
- Android NDK debug 方法
最近又频繁遇到 NDK 的错误,记录一下debug调试的一些经验,以备后续查看 一般来说,在Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 "DEBUG& ...
随机推荐
- Windows下安装Mycat
Mycat 首先在安装Mycat之前,需要安装JDK1.7以上,可以在cmd环境下输入 java -version 查看本地安装的java版本 如果未安装或者版本在1.7以下,请重新安装. 安装JDK ...
- 精通javascript笔记(智能社)——简易tab选项卡及应用面向对象方法实现
javascript代码(常规方式/面向过程): <script type="text/javascript"> window.onload=function(){ v ...
- 转:极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
转自:极小极大搜索方法.负值最大算法和Alpha-Beta搜索方法 1. 极小极大搜索方法 一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通 ...
- Spring - IoC(3): Bean 实例的创建方式
创建一个 Bean 实例对象的方法通常有如下方式: 调用构造器创建 Bean 实例 调用静态工厂方法创建 Bean 实例 调用实例工厂方法创建 Bean 实例 使用构造器创建 Bean 实例 XML ...
- 【BZOJ2049】【SDOI2008】洞穴勘测 [LCT]
洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 辉辉热衷于洞穴勘测.某天,他按照地 ...
- guake 3.4发布,支持切分窗口
guake是一款下拉式终端,美观实用. 近日发布了3.4版本,在3.4版本中支持了切分窗口功能.如图所示,还是比较实用的一个功能. 目前ubuntu仓库中还未更新,需要使用pip安装,或者自行从源码编 ...
- HTML5-坦克大战一画出敌人坦克并让自己的坦克可以发子弹的功能(二)
上一篇博客只画出了,一个坦克,并让其可以上下左右移动,这篇博客将画出敌人的坦克,并让自己的坦克可以发子弹,但是还不是尽善尽美,还有一些问题,将会在下篇博客说明: html代码: <!DOCTYP ...
- java 定时器的三种方式
原地址:http://blog.csdn.net/haorengoodman/article/details/23281343/ /** * 普通thread * 这是最常见的,创建一个thread, ...
- hdu 5178(二分-lower_bound,upper_bound)
pairs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- python2.7.12自带pip吗?
是的,在安装python2.7.12时自带pip安装包,可以在python安装包Scripts下面可以看到.