关闭

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

161人阅读 评论(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网站的观点或立场

Android NDK开发学习:我的第一个NDK项目

NDK介绍:  * 1,NDK是什么:可以参考安卓官网https://developer.android.com/ndk/index.html的介绍,网上也有很多的相关资料。  * 2,什么场景可...
  • true100
  • true100
  • 2016-06-06 10:31
  • 3238

Android开发学习之路--NDK、JNI之初体验

好久没有更新博客了,最近一直在看一个仿微信项目,然后看源码并自己实现下,相信经过这个项目可以让自己了解一个项目中的代码以及种种需要注意的事项。不知不觉中博客已经快要40w访问量,而且排名也即将突破30...
  • eastmoon502136
  • eastmoon502136
  • 2016-02-28 17:46
  • 14110

AS之NDK开发流程

1. 安装配置NDK 1). 解压NDK的zip包到非中文目录 2). 配置path : 解压后NDK的根目录----->ndk-build 2. 给AS配置关联NDK 1). local.p...
  • qq_23077365
  • qq_23077365
  • 2016-06-19 13:53
  • 2263

Android Studio上实现一个最简单的ndk项目的步骤

这2天在测试ndk,但是看了几个blog都没实现。后来看官方文档,终于实现了一个最简单的demo,放blog上自己忘记的时候也可以看下。 1,首先需要配置好ndk环境(建议下载ndk10以上的版本,...
  • gan_zhiyong
  • gan_zhiyong
  • 2016-11-25 16:24
  • 1812

你不知道的Android NDK开发

上篇文章讲解了JNI的有关知识,并且如何在程序中使用“.so”库。那么到底如何生成一个“.so”库?请看下文。 一、概述。       “.so”库是使用C/C++编写生成的,在Android 平台上...
  • zxw136511485
  • zxw136511485
  • 2016-12-02 14:29
  • 1815

android NDK学习。。。自学总结

电脑配置好NDK环境这里不做介绍,可以搜索下网上。 在android sd中配置idk路径:在工程local.properties文件中加入 ndk.dir=/Users/xurunjie/Doc...
  • jk17640
  • jk17640
  • 2016-08-29 17:14
  • 289

android studio下的NDK开发详解(一)

好记性不如烂笔头,开始坚持写博客,学一点记一点,只为了生活更好。 学了一年多的硬件,现在来做android,不知道是对是错,跟着感觉走,开始总是想把android和硬件挂上勾,所以第一个android...
  • tuoguang
  • tuoguang
  • 2015-09-01 01:05
  • 4577

Android NDK开发入门学习笔记(图文教程,极其详尽)

以前也简单用过JNI,但是只是简单用一下,好多都不明白。最近在看源码部分,有涉及到JNI调用的,所以这次打算彻底把它搞定。 先普及一下JNI的调用关系:JAVA--------------------...
  • u011064099
  • u011064099
  • 2015-11-19 11:59
  • 1655

老码农谈NDK开发

关于NDK,我也天真过5、6年前刚拿到HTC的G1开始做Android开发时,得知Java可以和C混编激动不已,真的是拿到钥匙见什么都是锁,老想着用NDK做些事情。到后来公司做了一个带有强烈技术风格的...
  • a345017062
  • a345017062
  • 2016-01-16 17:48
  • 3198

一步一步学习androidNDK编程(hello world)

上一篇博客,已经搭建好了windows下的linux环境(cygwine),这次我们试着写一个hello world。首先需要去android的官网下载android-ndk压缩包,之后解压,进入解压...
  • mockingbirds
  • mockingbirds
  • 2015-04-19 21:05
  • 2929
    个人资料
    • 访问:189132次
    • 积分:3321
    • 等级:
    • 排名:第11814名
    • 原创:153篇
    • 转载:53篇
    • 译文:0篇
    • 评论:18条
    最新评论