关闭

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

93人阅读 评论(0) 收藏 举报
分类:

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啦,运行工程如下:


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:104392次
    • 积分:2271
    • 等级:
    • 排名:第16509名
    • 原创:125篇
    • 转载:52篇
    • 译文:0篇
    • 评论:11条
    最新评论