Android技术2:NDK开发之Helloworld

移动开发 Android
我们都知道在Android中编写应用程序的主要代码使用Java,然后Java自身某些不足,如Java代码都运行在虚拟机上面,处理速度相对C/C++来说比较慢,但是随便近年来即时编译器,虚拟机技术的发展,Java处理速度有很大的发展。

我们都知道在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!"); 
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.

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

责任编辑:chenqingxiang 来源: apkbus
相关推荐

2022-02-21 15:38:57

Openharmon操作系统鸿蒙

2020-11-10 11:58:17

鸿蒙应用开发

2013-01-16 15:07:30

Android NDKAndroid开发

2013-12-27 09:54:58

Android开发NDK

2013-01-16 16:56:36

Android开发NDKSDK

2013-01-06 12:23:59

Android开发SQLite数据库

2013-03-29 10:24:44

NDK隐藏敏感信息Android

2021-02-28 10:11:31

HelloWorldSSMSpringboot

2017-04-26 11:00:34

Spring BootHelloWorld详解

2010-08-11 10:58:06

AndroidAndroid NDK

2014-03-31 15:32:36

AndroidNDK开发

2018-03-15 11:50:53

机器学习入门Tensorflow

2024-05-14 08:33:57

Native API鸿蒙工具

2013-09-16 15:42:00

Android优化界面UI

2020-11-23 09:32:43

WIFI连接

2021-12-30 10:43:21

Android函数Crash

2014-07-01 11:31:35

NDKSO库JNI调用

2010-01-25 15:35:08

Android NDK

2009-03-16 15:00:16

阿里软件旺旺软件平台SaaS

2024-05-21 10:23:02

反射技术.NET编程语言
点赞
收藏

51CTO技术栈公众号