Android ndk 開發環境搭建 和 樣本

來源:互聯網
上載者:User

Android系統中的應用程式都是用Java開發的。Android NDK使我們能夠在android上使用C/C++開發的原生代碼。

有兩個理由使用NDK: 一是合理的重用現有的代碼;二是在程式中某些關鍵的部分提高執行效率。

使用Android NDK開發,除了普通Android開發環境外,還需要下載NDK包 和 安裝Cygwin工具(windows環境下需要)。

Cygwin

Cygwin 是 Windows 上類似於 Linux 的環境。它包括一個提供 UNIX 功能性基本子集的 DLL 以及在這之上的一組工具。(所以在linux下不需要使用)

安裝Cygwin的步驟如下:

1.下載setup.exe

到官網www.cygwin.com 單擊左邊 “Install
Cygwin”。再點擊中間“Setup.exe”這將下載一個小程式 setup.exe(250KB)。

這個安裝程式將在您的機器上引導 Cygwin 環境的安裝或更新過程。 

2.運行setup.exe,進行安裝,如:
圖 1. Cygwin 環境的安裝嚮導

點擊 Next按鈕。 
選擇下載位置
在這個頁面上,選擇"Install from Internet"。

圖 2. 選擇安裝類型

一直點擊 Next按鈕,一直到出現介面:


選擇一個下載網站。因為這些網站是義務的鏡像,所以選擇一個下載點有點風險(通常它們是可用的,但有時不可用)。通常,試試離你比較近的那個網站。(有一個http://mirrors.163.com最快)

點擊 Next按鈕。 
選擇包進行安裝
在這個頁面上,您將選擇要安裝的包。預設情況下,Cygwin 基本包將不安裝 GCC,因此,您必須修改預設設定。
將滑鼠移動到 Devel邊的加號(+)上,然後點擊它展開 Devel類。

這一步,我們選擇需要下載安裝的組件包,為了使我們安裝的Cygwin能夠編譯器,我們需要安裝gcc編譯器,預設情況下,gcc並不會被安裝,我們需要選中它來安裝。為了安裝gcc,我們用滑鼠點開組件列表中的“Devel”分支,在該分支下,有很多組件,我們必須的是:

binutils 
gcc 
gcc-mingw 
gdb

make

滑鼠點擊組件前面的迴圈按鈕,會出現組建的版本日期,我們選擇最新的版本安裝,是選中後的四類組件的:

binutils組件

gcc組件


gcc-mingw組件

gdb組件

make組件

選完以後,我們選擇下一步,進入安裝過程,如所示,

一直到下載完成,選擇在案頭上建捷徑,就ok了!

3.測試是否安裝成功

運行cygwin,輸入make -v 和 gcc -v 如果能找的,則表示安裝成功。

安裝NDK

安裝ndk很簡單,網上隨便搜一下,只需要把下載的ndk檔案解壓縮到自已指定的目錄即可。(如:我的路徑為E:\android-ndk-r6b)

配置NDk

修改Cygwin目錄(我的預設裝在C:\cygwin)下/home/Administrator 下的.bash_profile檔案,在檔案末尾加入如下代碼:

NDK_ROOT=/cygdrive/ndk檔案的路徑export NDK_ROOT

例如我的如下:

NDK_ROOT=/cygdrive/e/android-ndk-r6bexport NDK_ROOT

(注意:NDKROOT名字可以自己,ndk檔案路徑是你 解壓縮後ndk的路徑,特別注意將斜杠換成反斜線 和 去掉d:中的:(windows和linux路徑區別問題))

五、 用 NDK 來編譯器
a.現在我們用安裝好的 NDK 來編譯一個簡單的程式吧,我們選擇 ndk 內建的例子 hello-jni ,我的位於E:\android-ndk-r6b\samples\hello-jni( 根據你具體的安裝位置而定 ) ,
b.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r6b/samples/hello-jni ,進入到 E:\android-ndk-r6b\
samples\hello-jni 目錄。
c.輸入 $NDK_ROOT /ndk-build (一定要在你需要編譯的程式的目錄下運行$NDK_ROOT /ndk-build,因為是
使用NDK編譯你需要的工程,編譯時間會在你所在工程的jni目錄找Android.mk檔案來確定需要編譯的檔案),執行成功後,
它會自動產生一個 libs 目錄,把編譯產生的 .so 檔案放在裡面。 ($NDK_ROOT是調用我們之前配置好的環境變
量, ndk-build 是調用 ndk 的編譯器 )
d.此時去 hello-jni 的 libs 目錄下看有沒有產生的 .so 檔案,如果有,你的 ndk 就運行正常啦!

六、自己開發一個NDK程式範例:


a.在eclipse中建立一個android工程,命名為NDKTest,建立一個Jni.java檔案:

package com.zy.ndktest;
public class Jni {
public native int getInt();
public native String getString ();
}

jni檔案中除了native方法,還可以有java寫的方法.

b.使用javah產生.h檔案:
首先運行android程式以便編譯產生class檔案
開啟命令列視窗,進入項目的bin\classes 目錄
運行javah -classpath . -jni com.zy.ndktest.Jni
會在 classes 目錄下自動產生一個com_zy_ndktest_Jni.h檔案

c.使用C語言實現本地方法
首先在項目目錄中建立一個jni目錄,再建org _philn_hellondk_Jni.c檔案(實現org _philn_hellondk_Jni.h 中的2個
方法)
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
int add2(){
int x,y;
x=1000;
y=8989;
x+=y;
return x;
}
JNIEXPORT jint JNICALL Java_com_zy_ndktest_Jni_g etInt
(JNIEnv *env, jobject thiz){
return add2();
}
JNIEXPORT jstring JNICALL Java_com_zy_ndktest_Jni_g etString
(JNIEnv *env, jobject thiz){
return (*env)->NewString UT F(env," HelloNDK----philn");
}

d.在jni下建立一個 Android.mk 檔案,寫入:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKTest
LOCAL_SRC_FILES := com_zy_ndktest_Jni.c
include $(BUILD_SHARED_LIBRARY)

e.使用cygwin進入專案檔夾:
$ cd /cygdrive/d/Android/workspace/NDKTest(我的NDKTest專案檔夾是:d/Android/workspace/NDKTest)
運行命令:
$NDK_ROOT /ndk-build.cmd
在該項目下會自動產生libs\armeabi\libNDKTest .so檔案
f. MainActivity中調用:
public class MainActivity extends Activity {
static{
System.loadLibrary(" NDKTest ");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Jni jni = new Jni();
TextView textView = new TextView(this);
textView.setText(jni.getString ()+":::"+jni.getInt());
setContentView(textView);
}
}
6.運行應用,可以看的出如下的效果

HelloNDK----philn:::9989

分類: Android NDK

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.