最近開始研究Android開發,由於Android SDK基本不熟悉,Java一知半解,1年前大概玩了一下,寫了一個掃雷,一個連連看,對Android SDK的API不熟悉,最終放棄了繼續學習。因此這次研究選擇NDK開發是我的首選,不過作爲Android新人,建立開發環境以及運行第一個例程實在是費了我很多時間和腦細胞呀。看了很多過時的教程,最後好不容易跑起來了。下面開始介紹如何搭建開發環境。
第一步,安裝配置JDK,這一步問題不大,網上一大把的教程。作爲多年的C++開發者,我對於JDK手動配置環境變量實在有些不解,這對新人來說提高了門檻,熟手則嫌麻煩。10年前JDK都需要手動配置,現在還是需要手動,安裝程序順便把這幾個環境變量寫進系統不好嗎?對於Android也一樣,安裝SDK都費老大的勁,版本多如麻,網上的教程也很多,大部分還不頂用。一家之見。不扯遠了,我們繼續。
第二步,安裝Android SDK和Eclipse,我第一次學安卓的時候,大概是安卓2.2的時候,那時候安卓SDK簡直是災難,手把手看教程,下載SDK安裝包,網上更新慢如蝸牛,然後安裝Eclipse,配置SDK等等,菜鳥要搞定這些,起碼半天時間。好了不吐槽了,現在安裝要好多了,Google還是比較給力了,不但省掉了安裝過程以及網上更新,更是將Eclipse集成到一起了,贊一個!直接到官網下載adt包,然後解壓完就能用了,我下載的版本是adt-bundle-windows-x86-20130729.zip,大家可以根據自己需要來下載相應的版本。
第三步,安裝配置Android NDK,這一步經過google的整合,到目前已經很簡單了,直接下載解壓就可以了,我下載的版本是android-ndk-r9-windows-x86.zip。從NDK r7開始,Windows平臺已經去掉了Cygwin的依賴,這對開發者搭建開發環境省了很多時間和精力。解壓好之後打開Eclipse,選擇菜單Window->Perferences->Android->NDK,把NDK的路徑填好即可,如下圖。到這裏NDK的開發環境就搭建好了。
接下來,我在分享一下如何跑第一個NDK程序。
第一步,建立一個新的Android工程。
第二步,添加JNI支持,網上很多教程上都是比較繁瑣的舊方案,需要手動的做很多事情,比如寫mk文件等,現在NDK r9做這一步很簡單,只需要在項目上點擊右鍵,選擇Android Tools->Add Native Support即可,然後Eclipse會自動爲我們創建一個jni的工作目錄,裏面有一個cpp文件和一個mk文件,如下圖。
第三步,爲這個工程創建c++編譯選項。在項目名稱上右鍵點擊Properties->Builders->New->Program,進入創建頁面,爲編譯器命名,Location選擇NDK目錄下的ndk-build.cmd,就是這個文件代替的Cygwin。然後選擇工程目錄。如下圖所示:
然後在Build Options頁面勾選specify...,並點擊右邊的按鈕並選擇目錄然後點OK,如下圖:
第四步,編寫代碼,cpp文件裏面編寫如下代碼,注意命名規則, com_example_firstndk是java包名,FirstNDK是java類名,這裏我目前還沒找到java是如何找到C++的函數的規則。只有這樣才能運行。
- #include <string.h>
- #include <jni.h>
- extern "C"
- {
- jstring Java_com_example_firstndk_FirstNDK_stringFromJNI(JNIEnv* env, jobject thiz)
- {
- return env->NewStringUTF("Hello from JNI!");
- }
- }
然後編寫Android 代碼,如下:
- package com.example.firstndk;
- import android.widget.TextView;
- import android.os.Bundle;
- import android.app.Activity;
- public class FirstNDK extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- TextView tv = new TextView(this);
- tv.setText( stringFromJNI() );
- setContentView(tv);
- }
- public native String stringFromJNI();
- public native String unimplementedStringFromJNI();
- static {
- System.loadLibrary("FirstNDK");
- }
- }
注意C++代碼裏面要加extern "C",否則會運行時找不到函數。
這個時候C++代碼還是會報錯,這是因爲還沒有將JNI的頭文件和庫的目錄加到Eclipse。
可以手動加上去,項目右鍵點擊選擇Properties->C/C++ General->Path and Symbols,加入NDK的路徑F:\技術預研\android\android-ndk-r9\platforms\android-18\arch-arm\usr\include,再編譯就可以了。我今天寫博客的時候,發現不用手動也行,寫完代碼後,直接Build Project,Eclipse自動把相關的目錄加上了。
到這裏,我們就大功告成啦,運行吧,少年!如果大家按以上沒有成功,請聯繫我吧,哈哈!
轉自:http://blog.csdn.net/ljxfblog/article/details/15808377