NDK 配置及简单项目
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50998720 文章出自:薛瑄的博客
你也能够查看我的其它同类文章,也会让你有一定的收货!
NDK 下载与配置:
Android Studio 从 1.3 版本号開始加入了 NDK 支持(见 Android NDK Preview),所以须要使用 NDK 的话,需更新到 >=1.3 的版本号。本文中使用的是 2.1 版(写此文时最新版)。
两种方法:
第一种:
Android Studio 自带的 SDK 管理器下载 NDK ,如今尽管 谷歌被墙,可是感觉更新下载这些开发工具还算流畅。
图一
安装NDK,才会在下图中显示install,并在有更新时提示:
图二
另外一种:
1、能够单独下载(可在 这里 下载或者在官网下载,这里下载历史版本号),然后解压就能够了
2、在以下的位置填入NDK的路径:
图三
配置完后。会在local.properties出现例如以下代码:
ndk.dir=D\:\\Android\\android-ndk-r10
手动下载的时候。NDK有zip和exe两种。我觉得它们的差别是。下载zip,直接解压后使用,是没有在图二中显示install,而且不能提示更新。
第一个NDK项目
參考:
http://yanbober.github.io/2015/02/14/android_studio_jni_1/
http://blog.csdn.net/qiujuer/article/details/42040963
1、建立新项目 NDKDemo并新建2个类
由于仅仅有一个类。生成好jni文件,编译总是会出现以下的报错。不知为何(详情參见NDK在Windows的一个bug),两个类,生成号jni文件,就能够正常执行!
make.exe: *** No rule to make target `F:\StudioProjects\NDKTest2\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/JniDemo/F_\StudioProjects\NDKTest2\app\src\main\jni', needed by `F:\StudioProjects\NDKTest2\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/JniDemo/F_\StudioProjects\NDKTest2\app\src\main\jni\com_example_xue_ndktest2_MathKit.o'. Stop.
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Android\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2
在 MathKit 中我们实现计算 INT 值的平方数。
public class MathKit {
public static native int square(int num);
}
StringKit 这个类什么功能也没有,充数的:
public class StringKit {
public static native void setNull(String str);
}
2、准备 .h 文件
有两种方式。建议掌握第一种就可以:
第一种:
- 进入NDKDemo项目的Java目录。
- CMD 进入该目录进行 javah 操作(可按住shift点击鼠标右键->在此处打开命令窗体):
注意。一定要在项目project的java目录。后面输入的完整包名net.qiujuer.ndkdemo.jni.MathKit(不一定要和这个包名一模一样)
有的朋友可能知道,java在编译文件时。会将包名转为路径。以为这里仅仅要掌握好执行输入javah命令的路径和输入的包名就可以。事实上不然,请看下图(我自己又一次建立项目,所以包名和上图不一样)
另外一种:
1、build ->make modules得到中间文件,我们关注的是.class文件。
2、编译OK以后生成的class文件在ASproject的例如以下目录: \app\build\intermediates\classes\debug。
3、然后接下来的步骤就是依据生成的class文件。利用javah 生成相应的 .h头文件。
4、点开AS的Terminal标签,默认进入到该项目的app目录下。我在windows平台下输入例如以下命令跳转到class中间文件生成路径:
xxxxx\app> cd build\intermediates\classes\debug
5、然后执行例如以下javah命令生成h文件。
xxxxx\debug> javah -jni net.qiujuer.ndkdemo.jni.MathKit
6、执行完之后你能够在目录\app\build\intermediates\classes\debug下看见生成的 .h头文件为:
net_qiujuer_ndkdemo_jni_MathKit.h
3、建立jni目录:
也可手动建立new->Directory,目录命名为jni就可以。
4、拷贝.h文件到jni目录并建立.cpp文件
1、拷贝第二步生成的.h文件到jni目录
2、新建.cpp文件,操作例如以下图:
分别实现:
net_qiujuer_ndkdemo_jni_MathKit.cpp
#include <net_qiujuer_ndkdemo_jni_MathKit.h>
JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square
(JNIEnv *env, jclass cls, jint num)
{
return num*num;
}
net_qiujuer_ndkdemo_jni_StringKit.cpp
#include <net_qiujuer_ndkdemo_jni_StringKit.h>
JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull
(JNIEnv *env, jclass obj, jstring str)
{
}
5、设置 APP 项目 build.gradle
设置生成的Jni名称为:JniDemo
在 MathKit 类中加入载入so库的代码
public class MathKit {
public static native int square(int num);
static {
//载入JniDemo库
System.loadLibrary("JniDemo");
}
}
在StringKit 类中加入载入so库的代码
public class StringKit {
public static native void setNull(String str);
static {
//载入JniDemo库
System.loadLibrary("JniDemo");
}
}
6、主文件调用:
到此完美结束。能够看看执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWl1anVlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
很多其它
在平时的那些操作中我们不可避免的要建立:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := genius
LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp
LOCAL_LDLIBS := -lm -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
APP_PLATFORM:= android-19
APP_OPTIM := release
而这里这两个文件都没有建立,那么是怎么决定的呢?
我们能够在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:
这些就是所有能够设置的參数。分别相应:
ndk{
moduleName "JniDemo" // 设置生成的文件名称
cFlags "-DANDROID_NDK -D_RELEASE" //这个相应的是生成模式
ldLibs "m", "log", "jnigraphics" //这个相应 LOCAL_LDLIBS 可是须要去掉前面的 “l”
abiFilters "all" //这个是相应的 APP_ABI
stl "stlport_shared" //这个相应的是 APP_STL
}
本项目原作者的下载地址。
參考:
http://blog.csdn.net/sbsujjbcy/article/details/48469569
http://www.androiddevtools.cn/
NDK 配置及简单项目的更多相关文章
- eclipse ndk 配置和简单开发demo
记录下以备忘: android开发的各种资源国内镜像 http://www.androiddevtools.cn/ 前端时间尝鲜用android stuido1.5开发了个android的小项目,发现 ...
- nodejs备忘总结(一) -- node和express安装与配置,新建简单项目(附安装配置过程中遇到问题的解决方法)
安装node 本文以安装node_v8.9.0为例(win10环境),下载node-v8.9.0-x64.msi插件 下载后,安装,安装目录默认为C:\Program Files\nodejs 配置环 ...
- NDK配置
NDK 配置 Android SDK中下载NDK, LLDB Android.mk 和 Application.mk 简单来说 Android.mk 用来描述需要生成哪些模块的 .so 文件 Appl ...
- Eclipse NDK 配置,无需安装Cygwin
Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一.关于 ...
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- log4net日志的配置及简单应用
在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工 ...
- Intellij IDEA 安装和配置jrebel进行项目的热部署
Jrebel 先介绍一下jrebel,jrebel是可以热部署项目的一个工具,更改代码自动部署并不需要重启项目(在spring中的controller中,增加.修改方法都是可以进行热部署而不需要重启的 ...
- asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程
最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...
- asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...
随机推荐
- 28.Node.js 函数和匿名函数
转自:http://www.runoob.com/nodejs/nodejs-module-system.html 在JavaScript中,一个函数可以作为另一个函数的参数.我们可以先定义一个函数, ...
- 让我们彻底看清MVC、MVP
这里開始记录下来自己对MVC.MVP.MVVM这三种框架模式的理解,本文从以下几个方面来梳理. 架构的目的 框架模式.设计模式 MVC设计的介绍 MVC在Android中的应用 MVC该怎样设计 MV ...
- D3.js中对array的使用
由于D3类库和array密切相关,我们有必要讨论一下D3中的数据绑定以及在数组内部运算的方法. 1.D3中的数组 和其他编程语言一样,D3的数组元素可以是数字或者字符等类型,例如: someData= ...
- Delphi部份函数,命令,属性中文说明
Abort 函数 引起放弃的意外处理 Abs 函数 绝对值函数 AddExitProc 函数 将一过程添加到运行时库的结束过程表中 Addr 函数 返回指定对象的地址 AdjustLineBreaks ...
- 囧 appspot.com/
囧 appspot.com/ 我负责公司人事,最近车间招了一批外来打工妹,让她们填写个人资料表格,早上在看表格登记,发现其中一张政治面貌一栏赫然写着"瓜子脸",当时笑得眼泪直流,没 ...
- arukas 的 Endpoint
arukas 的 Endpoint 什么是端点 What is Endpoint arukas.io 的实例几乎每周都自动重新启动,当实例重新启动时,其端口会更改.IP地址和端口的平均寿命是一周,有时 ...
- Android网络框架OkHttp之get请求(源码初识)
概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天 ...
- axios封装http请求
import axios from 'axios' const HTTP_TIMEOUT = 15000; export function httpPost(url, params = {},head ...
- Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)
搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...
- 1.4 Python基础知识 - 代码书写格式及条件判断"if ... else ..."
一.代码的书写规则 在所有的开发语言中,代码之间都是有关联的关系,有的是包含关系,有的是上下级关系,有的是代表语句的结束.在python中也是有相应的规则的: 1.在没有上下级关系的代码中,代码要顶行 ...