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& ...
随机推荐
- Linux Top 命令参数解析
转载自:http://www.jb51.net/LINUXjishu/34604.html TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...
- 在Maven中怎么配置外部Jar
转摘自:http://liugang594.iteye.com/blog/1677712 假设我们有一个Maven的project,其中有些Jar包不是来自Maven库的,是存在本地的某些Jar文件, ...
- Centos7下redis设置密码、开放远程访问权限
redis的安装与启动可参考前一篇文章:http://www.cnblogs.com/zuidongfeng/p/8032505.html redis安装成功后,默认是没有设置密码的启动redis-c ...
- 动态规划:高维DP
例子当然是王八棋这道题,这道题以前是写烂了 先来一个大暴力,zlw教的暴力~~ #include<iostream> using namespace std; ,maxm=; ]; int ...
- 【BZOJ1901】Dynamic Rankings [整体二分]
Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个含 ...
- windows支持applocker的版本
Operating system requirements The following table show the on which operating systems AppLocker fe ...
- [Leetcode Week6]Linked List Cycle II
Linked List Cycle II 题解 题目来源:https://leetcode.com/problems/linked-list-cycle-ii/description/ Descrip ...
- 错误”ORA-12560: TNS: 协议适配器错误“解决方法
错误”ORA-12560: TNS: 协议适配器错误“解决方法 原本是可以通过sqlplus连接数据库的,命令如下: C:\Users\xuwei>sqlplus /nolog SQL*Plus ...
- solr requestHandler
使用哪一个handler: 1. 可以通过在url中追加有名字的handler(以 ' / ' 开头命名)的名称来指定使用哪一个handler. 如: <requestHandler name= ...
- 阿里云linux下修改mysql默认密码(xampp环境)- 原创
1.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/my ...