DEMO下载链接: http://download.csdn.net/detail/logicsboy/7535409

首先给你们恶补下啥是NDK:(我从百度Copy的)

NDK全称:Native Development Kit。
1、NDK是一系列工具的集合。
* NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一起打包成apk。

这些工具对开发人员的帮助是巨大的。[1]

* NDK集成了交叉编译器,并提供了对应的mk文件隔离平台、CPU、API等差异,开发者仅仅须要简单改动mk文件(指出“哪些文件须要编译”、“编译特性要求”等)。就能够创建出so。

* NDK能够自己主动地将so和Java应用一起打包,极大地减轻了开发者的打包工作。

2、NDK提供了一份稳定、功能有限的API头文件声明。
Google明白声明该API是稳定的,在兴许全部版本号中都稳定支持当前公布的API。从该版本号的NDK中看出。这些API支持的功能很有限。包括有:C标准库(libc)、准数学库(libm)、压缩库(libz)、Log库(liblog)。

==========================================================
好了,接下来我们在了解了解啥时JNI  ? 
JNI是Java Native Interface的缩写,中文为JAVA本地调用。
从Java1.1開始,Java Native Interface(JNI)标准成为java平台的一部分,它同意Java代码和其它语言写的代码进行交互。
JNI一開始是为了本地已编译语言,尤其是C和C++而设计的,可是它并最好还是碍你使用其它语言,仅仅要调用约定受支持就能够了。

========================================================
好了概念大致就是上面那样,接下来我们要看看怎么构建自己的第一个NDK程序咯。
步骤啥的有图的看图,有文字的看文字吧。
1.先创建AndroiddProject。创建一个helloNDK.java:

MainActivity.java文件:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNzYm95/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


2.然后编译上述文件产生的 .class文件。由于eclipse保存之后,就会自己主动编译。

保存之后,去找你的.class文件吧、


找到helloNDK.class文件的路径。
3.使用javah工具,产出C语言的*.h头文件,
   在项目project建立一个jni的目录.
   
  打开Windows命令窗体,并进入jni文件夹区域,运行javah工具去读取上述的            helloNDK.class文件,从而生成*.h头文件。输入命令:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNzYm95/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

然后回车,注意文件夹别弄错了。然后会在jni文件夹以下生一个com_misoo_pk01_helloNDK.h的文件,当然你也能够设定生成的文档的名称。

命令例如以下:javah -o helloNDK.h -classpath ../bin/classes com.misoo.pk01.hellNDK
生成的com_misoo_pk01_helloNDK.h文件内容例如以下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_misoo_pk01_helloNDK */ #ifndef _Included_com_misoo_pk01_helloNDK
#define _Included_com_misoo_pk01_helloNDK
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_misoo_pk01_helloNDK
* Method: sayHello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_misoo_pk01_helloNDK_sayHello
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif

最好不要自己手动去改动它吧,我也懒的去试,毕竟这是命令生成的。

不关我们的事。


4.然后我们就能够把这个*.h的文件。交给C端开发人员去,结合JNI语法,撰写xxx.c的代码,
我们如今的这个程序的xxx.c的代码例如以下(前提你的代码和我的一样)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_misoo_pk01_helloNDK.h" JNIEXPORT jstring JNICALL
Java_com_misoo_pk01_helloNDK_sayHello
(JNIEnv *env, jobject thiz){ return (*env)->NewStringUTF(env,"Hello,NDK....");
}

5. 我们须要在NDK包的安装文件夹下拷贝一个Android.mk的文件到jni文件夹,而且内容为:

# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := helloNDK
LOCAL_SRC_FILES := com_misoo_pk01_helloNDK.c include $(BUILD_SHARED_LIBRARY)

注意内容不能错了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNzYm95/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

6.接下来我就须要将这个项目放到NDK的samples文件夹以下


7.然后使用cygwin工具编译生成.so文件


编译的关键命令在找到文件夹之后:../../ndk-build然后回车即可了。
最后生成的.so文件你就能够粘到libs文件夹以下了

最后复制到你的项目中,開始run吧、

稍完成。

版权声明:本文博主原创文章,博客,未经同意不得转载。

他的第一个NDK的Demo的更多相关文章

  1. 我的第一个 react redux demo

    最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...

  2. 1.类的加载机制_继承类的加载(一个小的Demo)说明

    今天我们先来一个小的Demo来了解类的加载顺序. public class ClassLoaderTest { public static void main(String[] args) { Sys ...

  3. 第一个ajax小demo

    第一个ajax小demo 文章来源:http://blog.csdn.net/magi1201/article/details/44569657

  4. Android中的第一个NDK的例子

    前几天研究了JNI技术后,想在Android上试一试研究结果,查阅了很多资料后,总结如下步骤: 首先来看一下什么是NDK NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动 ...

  5. Android学习——第一个NDK程序

    在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...

  6. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  7. 一起来花5分钟写一个PHP入门Demo

    最近公司招了几个应届毕业生,他们对前端的了解还挺多,但是对后端的技术一无所知,我觉得,作为一个前端攻城狮,如果你有远大的抱负,就应该雨露均沾... 今天我就跟大家讲一讲PHP最基本的入门,至少别人问起 ...

  8. 使用angular.js开发的一个简易todo demo

    前沿 在CVTE实习考察的一周里,接触到了angular,并在最后的一天任务里要求使用angular做一个功能主要包括创建.编辑.恢复.删除以及留言的todo demo,并支持响应式布局.因为之前没怎 ...

  9. [小北De编程手记] Lesson 01 - AutoFramework构建 之 从一个简单的Demo聊起

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

随机推荐

  1. javascript---在自由落体实现

    实现一些简单的物业自由落体需要理解: clientHeight:浏览器客户机的整体高度 offsetHeight:物(实例div)高低 offsetTop:从对象client最顶层的距离 简单demo ...

  2. uip UDPclient模式通信移植,当地port随机

    现在移植UDPclient模式,测试广播地址. //udp_client.c /************************************************************ ...

  3. J2SE习题(2)

    第四.五周练习题 1.a. Define a class called BlogEntry that could be used to store an entry for a  Weblog. Th ...

  4. python正文(两)

    在本文中,我读了记录和总结<Python标准库>一本书,本节课文的学习和理解. 事实上,在Python于,使用一些方法这段文字是一回事,尤其是经常使用.在一般情况下,会用String这样的 ...

  5. 微信公众平台入门--PHP,实现自身的主动回复文本,图像,点击事件

    微通道基本应答代码,然后单击事件函数,部署了sae要么bae,基本自由妥妥server 号了 <?php define("TOKEN", "mzh"); ...

  6. git 常用命令及问题解决(转)

    git init 产生的目录解释error: src refspec master does not match any.引起该错误的原因是,目录中没有文件,空目录是不能提交上去的error: ins ...

  7. 2014在百度之星资格赛的第二个问题Disk Schedule

    事实上,我认为它可以用来费用流问题.但光建地图上加班. ..不科学啊.. . 因副作用太大,否则,必然在.最后,想啊想,或者使用dp对.... 别想了一维dp... .我不知道我是怎么想.无论如何,这 ...

  8. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  9. 【BZOJ1014】【JSOI2008】火星人prefix Splay处理区间,hash+dichotomy(二分)check出解

    题意不赘述了,太清晰了. 说题解:首先依据原字符串建立SPT.首尾建议多加一个空白字符. 给一个树构图,依照平衡树的前后大小顺序性质能够使它们始终维持为一个序列,而且能够通过rank找到序列的第k个. ...

  10. TCP/IP 网络精讲:开宗明义及第一课

    内容简介 1.课程大纲 2.第一部分第一课:互联网历史 3.第一部分第二课预告:互联网的创立,OSI七层模型 课程大纲 我们将带大家一起来学习很多网络方面的技能,向大家介绍TCP/IP的基础知识点.你 ...