java ndk c语言_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文件

packagecom.forsta.ndk;

classMainActivity{

publicnativeString FromCString();

}

通过javac MainActivity.java编译,获得MainActivity.class

然后通过javah MainActivity

得到com_forsta_ndk_MainActivity.h

代码如下

/* DO NOT EDIT THIS FILE - it is machine generated */

#include 

/* Header for class com_forsta_ndk_MainActivity */

#ifndef _Included_com_forsta_ndk_MainActivity

#define _Included_com_forsta_ndk_MainActivity

#ifdef __cplusplus

extern "C"{

#endif

/*

* Class: com_forsta_ndk_MainActivity

* Method: FromCString

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

上面灰色背景即为函数名

可以帮.h头文件放到jni目录下,然后建立Hello.c

#include 

#include 

#include "com_forsta_ndk_MainActivity.h"

/*

* Class: com_forsta_ndk_MainActivity

* Method: FromCString

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString

(JNIEnv *env, jobject obj){

return(*env)->NewStringUTF(env,"Hello,I am Forsta from C lib!");

}

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移动到项目工程目录下

bd6dc48ffa641a6f7383eef18060b733.png

2.6.2使用ndk-build编译

2.6.3刷新工程

得到obj ,lib目录

56e40709c750a422f0847128694045b1.png

2.7运行android程序

2.8点击Button效果

23d34cb42c604f0205faec86bdec6bdd.png

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

【编辑推荐】

【责任编辑:chenqingxiang TEL:(010)68476606】

【编辑推荐】

【责任编辑:chenqingxiang TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值