Android中NDK的搭建及简单使用:

使用NDK,简述其重要步骤:
、搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk包,环境搭建步骤具体参看http://www.cnblogs.com/yejiurui/p/3476565.html
2、以eclipse为例,在com.test下创建Test2.java文件,会自动在项目的bin\classes\下生成相应的.class文件【若在项目中看不到,则可能当前在eclipse中
查看的是Package Explorer,切换到Navigator即可】如图

3、使用命令行切换目录至bin\classes\下,执行javah com_test_Test2,在该目录下生成对应的.h文件

4、在项目根目录下创建名为jni的文件夹(必须为jni),将上述3中生成的.h文件复制到该目录下
5、创建同名的.c文件com_test_Test.c,实现具体的在Test2.java中声明的native方法
6、在jni下创建文件Android.mk,配置具体生成so文件的信息,例如:名称、依赖的源文件(.c)
注意:若有同个.c文件则可以生成一个so文件或分别生成各自的so文件
(1)若生成一个so文件,以空格或Tab键隔开不同的源文件,换行使用 \ ,在Android.mk中信息格式为:
LOCAL_SRC_FILES := com_test_Test2.c com_test_TestNoNDK.c
换行: LOCAL_SRC_FILES := com_test_Test2.c \ com_test_TestNoNDK.c

如图:
(2)若生成不同的so文件,则需要以以下格式为模块:
include $(CLEAR_VARS)
LOCAL_MODULE := TestNDK #生成的so文件的名称
LOCAL_SRC_FILES := com_test_Test2.c #源文件
include $(BUILD_SHARED_LIBRARY)

如图:

7、上述完成后,会发现在项目的libs目录下有对应的so生成,整个结构如图:


8、在项目中使用时,需要先静态加载库文件
static{
System.loadLibrary("TestNDK");
}
9、加载完成之后,在项目中直接通过类名调用相应的方法即可(因都是静态方法)
上述仅是按照自己的理解简要总结的ndk使用的步骤,详细步骤可参看:http://www.cnblogs.com/yejiurui/p/3476565.html

补充:

Android.mk

关于mk语法讲解:http://www.cnblogs.com/wainiwann/p/3837936.html

Android.mk中常用的属性含义:http://www.cnblogs.com/welhzh/p/4532142.html

个别含义:
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。
Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
------
JNI的使用场景
简单的说:JNI是Java平台定义的用于和宿主平台上的本地代码进行交互的“Java标准”,它通常有两个使用场景:
1.使用(之前使用c/c++、delphi开发的)遗留代码;
2.为了更好、更直接地与硬件交互并获得更高性能。

Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用的更多相关文章

  1. Android中XML格式数据的简单使用

    源码: package com.wangzhu.demo; import java.io.IOException; import java.io.StringWriter; import javax. ...

  2. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  3. Android开发学习总结——搭建最新版本的Android开发环境

    原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...

  4. Android中隐藏顶部状态栏的那些坑——Android开发之路3

    Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...

  5. 在Android中Intent的概念及应用(二)——Intent过滤器相关选项

    一.如果多个Activity拥有同一个Intent Action,启动时用同一个Action启动会是什么情况? 如何指定某一个Activity启动? 在多个Activity拥有同一个Intent Ac ...

  6. Android中GridView拖拽的效果【android进化三十六】

      最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...

  7. Android笔记(二十九) Android中的异步更新(一) Android中的线程

    Java中的线程 1. 线程的两种实现方式 ①继承Thread类 ②实现Runnable接口 两者区别在于,Thread这个类的对象,代表的是一个线程,而Runnable的对象,代表的是线程体(也就是 ...

  8. Android中FTP服务器搭建入门

    http://www.2cto.com/kf/201501/374048.html http://blog.csdn.net/smile3670/article/details/44343617  有 ...

  9. Android 新版NDK环境搭建(免Cygwin)

    使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配 ...

随机推荐

  1. XML约束之DTD

    XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制.我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库) ...

  2. iOS错误总结(三)

    1.如果tableView设置为分组的样式(默认是有cell之间的分割线,可以设置颜色),默认有组以及组尾的高度 需要手动在组头组尾的代理方法中进行组高的设置(如果想设置为0,最好写0.01) 2.组 ...

  3. Fiddler抓包之IOS

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指cookie,html,j ...

  4. Javascript.Reactjs-5-prop-validation-and-proptypes

    Props & PropTypes 1. Props "Props are the mechanism React uses to let components communicat ...

  5. angular js 自定义js错误处理(Angularjs js error handler)

    使用AngularJS的时候,对JS错误如何自定义处理?(比如用Google Analytics记录angularjs使用中出现的js错误) AngularJS自带一个错误处理service:$exc ...

  6. c#datagirdview ,用DataSource 方式赋值,然后更新出问题问题

    先说一下程序 主窗体  ,两个子窗体A,B.嵌入主窗体的Panel里边 主窗体,启动类C里边的查找方法,查到的值,通过事件委托送到窗体A C类里同时修改查询表,把修改的查询表通过事件委托发送给窗体B, ...

  7. 一个login

    login 1.获取提交表单,保存到变量中.2.判断用户密码是否正确,利用Model类.3.验证用户是否激活.3.判断用户是否记住登录状态,是的话,将其用cookie和session分别保存.没有的话 ...

  8. CSS里常见的块级元素和行内元素

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...

  9. jsp中,个别乱码进行转码操作

    来自大神 if(xh!=null && xh!=""){ xhmc =new String(xh.getBytes("ISO-8859-1"), ...

  10. webpack+react配置

    $ npm install -g webpack $ npm install -g webpack-dev-server如果遇到类似 EACESS 错误,则需要用超级用户的模式运行 $ sudo np ...