Android技术2:NDK开发之Helloworld

我们都知道在Android中编写应用程序的主要代码使用Java,然后Java自身某些不足,如Java代码都运行在虚拟机上面,处理速度相对C/C++来说比较慢,但是随便近年来即时编译器,虚拟机技术的发展,Java处理速度有很大的发展。还有在游戏视频处理方法,需要短时间内大量的计算,这个Java无法做到;C语言发展以来有了很多开源的库,供大家使用,但如果应用到android中,为了避免再重新用Java改写的麻烦,Android推出了NDK技术,它能将C语言编译成Linux下可以运行的二进制文件(.so)。

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了五河免费建站欢迎大家使用!

对于环境的搭配具体不在介绍,可以参考其他博客文章,已经讲得非常详细了。

1.开发工具

首先简单的介绍下开发的工具,在准备学习NDK技术时,必然之前一些Android方法的基本已经大致了解,当然已经搭配JDK,Eclipse,ADT等工具。如果准备学习NDK还需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件)。

2.NDK之Helloworld的步骤介绍

2.1新建android项目

这里我使用项目名:AndroidNDK

包名:com.forsta.ndk; (这里包名需要注意跟后面的c语言函数名相关)

2.2在工程目录下,新建目录文件夹-jni,在这里添加c语言代码和Andorid.mk

2.3在Java代码中添加native方法

我在MainActivity中添加 public native String FromCString();

2.4添加c语言代码

由于C语言代码函数名与包名,类名,方法名相关,书写不变,可以利用javah工具实现

可以先建立MainActivty.java文件

 
 
 
 
  1. package com.forsta.ndk; 
  2. class MainActivity{ 
  3. public native String FromCString(); 
  4.  
  5. 通过javac MainActivity.java编译,获得MainActivity.class 
  6.  
  7. 然后通过javah MainActivity 
  8.  
  9. 得到com_forsta_ndk_MainActivity.h 
  10.  
  11. 代码如下 
  12.  
  13. /* DO NOT EDIT THIS FILE - it is machine generated */ 
  14. #include  
  15. /* Header for class com_forsta_ndk_MainActivity */ 
  16.  
  17. #ifndef _Included_com_forsta_ndk_MainActivity 
  18. #define _Included_com_forsta_ndk_MainActivity 
  19. #ifdef __cplusplus 
  20. extern "C" { 
  21. #endif 
  22. /* 
  23. * Class: com_forsta_ndk_MainActivity 
  24. * Method: FromCString 
  25. * Signature: ()Ljava/lang/String; 
  26. */ 
  27. JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString 
  28. (JNIEnv *, jobject); 
  29.  
  30. #ifdef __cplusplus 
  31. #endif 
  32. #endif 
  33.  
  34. 上面灰色背景即为函数名 
  35.  
  36. 可以帮.h头文件放到jni目录下,然后建立Hello.c 
  37.  
  38. #include  
  39. #include  
  40. #include "com_forsta_ndk_MainActivity.h" 
  41.  
  42. /* 
  43. * Class: com_forsta_ndk_MainActivity 
  44. * Method: FromCString 
  45. * Signature: ()Ljava/lang/String; 
  46. */ 
  47. JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString 
  48. (JNIEnv *env, jobject obj){ 
  49.  
  50. return (*env)->NewStringUTF(env,"Hello,I am Forsta from C lib!"); 
  51.  

2.5添加Android.mk

下面是最简单的mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

2.6cygwin下编译c语言文件

2.6.1Cygwin移动到项目工程目录下

2.6.2使用ndk-build编译

2.6.3刷新工程

得到obj ,lib目录

2.7运行android程序

2.8点击Button效果

本文链接:http://www.cnblogs.com/forsta/archive/2014/07/30/3878044.html

分享名称:Android技术2:NDK开发之Helloworld
本文地址:http://www.csdahua.cn/qtweb/news12/240462.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网