风一样的男人

亮剑有云:古之剑客狭路项目,即使对方是天下第一剑客,也要亮剑;剑锋所指,所向披靡。...

Android NDK开发学习 第一个NDK项目

http://blog.csdn.net/true100/article/details/51593476

NDK介绍:
 * 1,NDK是什么:可以参考安卓官网https://developer.android.com/ndk/index.html的介绍,网上也有很多的相关资料。
 * 2,什么场景可以用NDK:在上一篇文章Android NDK开发之Hello-JNI!中有简单介绍。
 * 3,什么是交叉编译:一个平台上生成另外一个平台上可执行的代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。

 * 4,JNI是什么:Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。其作用简单的说有以下两点:

      1、你可以使用JNI来实现“本地方法”(native methods),并在JAVA程序中调用它们。

      2、JNI支持一个“调用接口”(invocation interface),它允许你把一个JVM嵌入到本地程序中。本地程序可以链接一个实现了JVM的本地库,然后使用“调用接口”执行JAVA语言编写的软件模块。例如,一个用C语言写的浏览器可以在一个嵌入式JVM上面执行从网上下载下来的applets。
 * 5,什么是链接库,分为动态链接库及静态链接库。
       1、动态链接库:动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
2、静态链接库:静态链接库就是你使用的.lib文件,库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。格式如:#pragma comment(lib,"XXX.lib")。linux下的静态链接库编辑
linux下的静态链接库是*.a文件,与动态链接库.so对应。
linux下.a文件,如果编写了入口函数,也可以直接执行。

 * 6,make文件介绍:Android NDK开发中,Android.mk文件是在使用NDK编译C代码时必须的文件,该文件描述了哪些C文件将被编译且指明了如何编译。

 开始第一个NDK工程之旅:

 第一步:在Eclipse中新建Android项目,我的第一个NDK项目就叫FirstNdk。

第二步:开始之前先介绍cmd环境下的javah命令,如图:

接下来我们进入cmd窗口,进行到项目所在目录。

执行javah -classpath bin/classes -d 项目包名+类名。如图

维埃里报错,提示找不到类文件,怎么办?

  通常有两种解决方案:

   1,找到我们电脑中SDK文件目录中的platforms下任意一个版本android.jar包,添加到环境变量中。


2,在上图的cmd命令中把android.jar的目录也写进去。如图:


可以看到运行成功了。

第三步:此时我们刷新项目,可以发现,项目中自动添加了jni文件目录,在此目录中新建first.c文件。接下来就开始代码之旅啦。


第四步:编写first.c文件代码,从未接触过C,视频学习+百度写的:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <com_ldm_firstndk_MainActivity.h>  
  4.   
  5. JNIEXPORT jstring JNICALL Java_com_ldm_firstndk_MainActivity_getStringFromC(JNIEnv *env, jobject obj)  
  6. {  
  7.     return (*env)->NewStringUTF(env,"My First JNI PROJECT!");  
  8. }  
第五步:从NDK工具包中的示例项目比如Hello-jni项目的jni目录下,把Android.mk文件和Application.mk文件复制到我们项目的jni目录下,做适当修改。我的Android.mk文件:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE    := first  
  6. LOCAL_SRC_FILES := first.c #指定c文件  
  7.   
  8. include $(BUILD_SHARED_LIBRARY)  

第六步:执行ndk-build命令,在cmd窗口,进行到项目所在的目录,执行ndk-build命令。执行结果后,我们的项目就会自动添加obj文件目录:


第七步:到止,我的第一个NDK项目就OK啦,运行工程如下:


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Android NDK开发学习 第一个NDK项目

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭