Android技術(shù)2:NDK開發(fā)之Helloworld
我們都知道在Android中編寫應(yīng)用程序的主要代碼使用Java,然后Java自身某些不足,如Java代碼都運(yùn)行在虛擬機(jī)上面,處理速度相對(duì)C/C++來說比較慢,但是隨便近年來即時(shí)編譯器,虛擬機(jī)技術(shù)的發(fā)展,Java處理速度有很大的發(fā)展。還有在游戲視頻處理方法,需要短時(shí)間內(nèi)大量的計(jì)算,這個(gè)Java無法做到;C語言發(fā)展以來有了很多開源的庫,供大家使用,但如果應(yīng)用到android中,為了避免再重新用Java改寫的麻煩,Android推出了NDK技術(shù),它能將C語言編譯成Linux下可以運(yùn)行的二進(jìn)制文件(.so)。
對(duì)于環(huán)境的搭配具體不在介紹,可以參考其他博客文章,已經(jīng)講得非常詳細(xì)了。
1.開發(fā)工具
首先簡(jiǎn)單的介紹下開發(fā)的工具,在準(zhǔn)備學(xué)習(xí)NDK技術(shù)時(shí),必然之前一些Android方法的基本已經(jīng)大致了解,當(dāng)然已經(jīng)搭配JDK,Eclipse,ADT等工具。如果準(zhǔn)備學(xué)習(xí)NDK還需要下載NDK,下載安裝Cygwin(模擬Linux環(huán)境用的),下載CDT(Eclipse C/C++開發(fā)插件)。
2.NDK之Helloworld的步驟介紹
2.1新建android項(xiàng)目
這里我使用項(xiàng)目名:AndroidNDK
包名:com.forsta.ndk; (這里包名需要注意跟后面的c語言函數(shù)名相關(guān))
2.2在工程目錄下,新建目錄文件夾-jni,在這里添加c語言代碼和Andorid.mk
2.3在Java代碼中添加native方法
我在MainActivity中添加 public native String FromCString();
2.4添加c語言代碼
由于C語言代碼函數(shù)名與包名,類名,方法名相關(guān),書寫不變,可以利用javah工具實(shí)現(xiàn)
可以先建立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
 - 上面灰色背景即為函數(shù)名
 - 可以幫.h頭文件放到j(luò)ni目錄下,然后建立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
下面是最簡(jiǎn)單的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移動(dòng)到項(xiàng)目工程目錄下
2.6.2使用ndk-build編譯
2.6.3刷新工程
得到obj ,lib目錄
2.7運(yùn)行android程序
2.8點(diǎn)擊Button效果
本文鏈接:http://www.cnblogs.com/forsta/archive/2014/07/30/3878044.html

















 
 
 




 
 
 
 