我们都知道在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文件
- package com.forsta.ndk;
- class MainActivity{
- public native String FromCString();
- }
- 通过javac MainActivity.java编译,获得MainActivity.class
- 然后通过javah MainActivity
- 得到com_forsta_ndk_MainActivity.h
- 代码如下
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* 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 <stdio.h>
- #include <jni.h>
- #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移动到项目工程目录下
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