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. Java基础---AWT

    流式布局FlowLayout package net.zyz; import java.awt.Button; import java.awt.FlowLayout; import java.awt. ...

  2. sql server中自连接的使用

    一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...

  3. Appium移动自动化测试之安装Appium

    第一次学习appium,希望此安装教程可以帮助初学者,共同学习. Appium官网介绍:Appium是与本地,使用开源自动化测试框架, 混合和移动Web应用程序. 它驱动iOS和Android应用使用 ...

  4. jQuery的开始

    一.下载 jQuery http://jquery.com/download/ 二.什么是jQuery: 1.jQuery 是一个 JavaScript 库. 2.jQuery 极大地简化了 Java ...

  5. JavaWeb 学习001-登录页面-Servlet

    那什么是Servlet呢? 我理解的Servlet 就是一个中间媒介,jsp页面原本需要一些操作,但是现在让jsp页面只是显示就好,把操作的工程转移给Servlet中. 使用Servlet时候有个固定 ...

  6. [刘阳Java]_MyBatis_常规标签的用法_第6讲

    一般MyBatis最基本标签,或者说初学者上手最快的标签就是增删改查 1.<insert>标签,在MyBatis中完成数据添加操作 <insert id="addMyUse ...

  7. 06Java数组

    动手动脑: import java.io.*; public class QiPan { //定义一个二维数组来充当棋盘 private String[][] board; //定义棋盘的大小 pri ...

  8. protobuf初体验

    概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...

  9. const变量初始化问题

    在C++中const变量定义时必须进行初始化,否则无法通过编译. 初始化的方式有多种,可以通过字面值对其进行初始化,也可以通过变量对其初始化,或其他方式,只要能给const变量赋初值即可(当然初值应该 ...

  10. jQuery.cookie.js插件了解及使用方法

    jquery.cookie.js插件实现浏览器的cookie存储,该插件是基于jquery开发,方便cookie使用. jquerycookie.js的下载地址 http://plugins.jque ...