Eclipse替代ndk-gdb斷點調試Android NDK程序

一 概述:
html

      Eclipse調試NDK程序的操做並不難,難的是環境的搭建。光是安裝Eclipse就有很多問題,真是「大錯不犯,小過不斷」不勝期煩。在網上,已經有先行者記錄下了Eclipse斷點調試Android NDK程序的方法:java

《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK開發環境》
網址:http://blog.sina.com.cn/s/blog_48ed03c80101nhei.html
android


我遇到的狀況與上文有些不一樣,上文開篇就說「Android應用程序的開發環境比較容易搭建」,但我在開發環境搭建時已經遇到問題了。光是Eclipse我就反覆安裝了三次。我遇到了不少上文沒有說起的問題,多是由於所在的平臺不一樣的緣由吧(我在MAC上搭的)。下面我將着重說明那些上文沒有的內容。爲求文章的連貫性,文本也會簡要的說起一些上文已經有的重要內容,不過只做走馬觀花式的介紹,因此我也建議你們看看上文。


二 功能要求描述
shell

*(Mac)OS X Yosemite 版本 10.10.2ubuntu

* Android SDK +  android-ndk-r10e + ant + Eclipse + CDT + ADT
服務器

能夠在Eclipse編寫及調試NDK程序(斷點調試)。效果圖以下:app

三 實現方法eclipse

3.1 環境搭建遇到問題的解決方法工具

3.1.1 Android SDK 的下載
網站

      由於JDK的官網能夠直接訪問,因此JDK下載及安裝都比較順利。我遇到的問題是Android SDK的下載。我是在「Android Developer」(Android 官網)上找Android SDK的安裝包的。因此第一問題來了:百度直接搜出來的只是「Android Developer」的舊版鏡像。下面是當前我分別在百度及必應兩引擎上,找到的「Android Developer」的主頁。


這個藍色背景的,是bing上搜出來的「Android Developer」官網。從網址看來,這個纔是實時的官網版的網站。應該補充說明的是,該網對於咱們來講是不能直接訪問的。我是用了代理才能訪問。爲何不能直接訪問的緣由,其實搞技術的人都懂的(^_^).

這個白色背景的,是百度上搜出來的「Android Developer」官網。從網址看來,並非「Android Developer」官方網站。但其內容卻得確是「Android Developer」官網舊版本的內容。並且該網咱們能夠直接訪問(雖然有點慢)。因此這只是一個國內的鏡像,其更新速度必定沒有真正官網那麼快。

      建議你們到真正的官網上下載Adnroid SDK,Android NDK 及 ADT 等工具。而且下載時儘量地使用下載工具而不是直接下載(我用的是「迅雷」)。緣由是:真正的官網上的工具版本都比較新;不少下載工具無需設置代理也能下載到國外的資源。再者個人代理是有流量上限的。用工具下載,能夠節省流量查來問題。


3.1.2 Android SDK 的更新

    Android SDK 的更新不能直接更新。這是我遇到的第二個問題。我曾想去用「迅雷」代爲下載。但發現以下這個文件,「迅雷」也下載不了:

只好上網查另外的方法,結果查到了兩種用修改本地hosts映射到可用ip的方法。

方法一:

把以下的host設置加入到 /etc/hosts中:

#第一組設置 
#203.208.49.162 dl.google.com                                                   
#203.208.49.162 dl-ssl.google.com

#第二組設置                                               
203.208.49.164 dl.google.com
203.208.49.164 dl-ssl.google.com

上面兩組設置中,用一組就能夠了。兩組IP,不保證長期有效。完成上面的設置,啓動Android SDK Manager就能夠成功更新了。這也是我查到的最簡單的方法。該方法有個問題:小部分更新包會下載失敗。


方法二:

使用「棟力無限」Android源。請進入以下網址:

http://www.sxrczx.com/pages/ubuntu.uestc.edu.cn/android/repository/index_1431450123772.html

或者百度一下:棟力無限鏡像站-Android鏡像站點使用幫助 。 按網頁中的說明進行操做便可。 該方法的步驟相對多一些。好處是,更新包都能下。


3.1.3 Eclipse的獲取及安裝

       Eclipse的官方下載網址是:http://www.eclipse.org/downloads/。我在這裏遇到的問題仍然是下載失敗。官默認下載的是Eclipse的自動安裝程序,該自動安裝程序用「迅雷」能夠很方便地下載到。但在使用該自動安裝程序安裝Eclipse時,該程序會到國外的服務器上下載文件,這時的下載會失敗。因此咱們應該直接下載程序包:

我下載的是上圖中,最下面的那一個。由於那個自帶了CDT。無需另外安裝。若是你下載的是無CDT的版本,那就要記住,先裝CDT再裝ADT.而在安裝ADT時,我按裝說明輸入網址後,一樣出現下載失敗的問題,因此我直接到Android官網上下載其程序包了。下載的頁面是:http://developer.android.com/intl/zh-cn/sdk/installing/installing-adt.html
一樣要用「迅雷」下。在安裝ADT時我遇到了一個很嚇人的警告,說是簽證有問題部分文件會無效或不安裝。其實這個不用怕,直接點擊"OK"就是了。由於Android官網就是這樣說的:


3.2 導入NDK工程及相關設置

      直接建立JNI工具的方法已經在《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK開發環境》一文中有詳細說明了。因此本文只說導入時的注意事項。我導入的是NDK Sample中HelloJni。導入NDK工程是與導入普通Android工程方法是相同的。因此不冗述,這裏重點說導入後的設置。

3.2.1 設置好Android SDK及Android NDK

      用「視窗鍵+,」進入"Preferences"設置。以下圖,你會找到設置SDK及NDK的地方的


上面是SDK,下面是NDK:


3.2.2 Native相關設置

      加入Native支持。在Package Explorer中選中剛導入的HelloJni工程,右鍵選擇Android Tools -> Add Native Support..,填寫導入的動態庫的名稱,這能夠對照已經有的Android.mk文件中的LOCAL_MODULE設置。注意,「Add Native Support..」這個操做會自動生成一些.mk文件及.c文件。這有可能與導入的原工程衝突應注意(必要的操做前備份一下重要的文件)。通常來講刪掉自動生成的文件便可解決衝突問題。不能省略「Add Native Support..」這一步操做,不然Eclipse會出現找到不C++菜單選項的問題。

      加入C/C++頭文件路徑。在Package Explorer中選中剛導入的HelloJni工程,右鍵選擇Properties。


實質上我只導入了一個目錄,以下:

/Users/apple/installed/android-ndk/android-ndk-r10e/platforms/android-14/arch-arm/usr/include

其它目錄是自動導入的。本身導入的目錄與選定的目標API版本有關。到了這裏HelloJni就能夠編譯了。要注意的是編譯Release 版本時用「ndk-build NDK_DEBUG=0」,編譯 Debug版本時用「ndk-build NDK_DEBUG=1」。相關的設置方法能夠參看《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK開發環境》。


3.2.2 Android工程的修改

     由於直接使用JDB調試有一個問題,那就是程序要已經啓動了,JDB才能夠鏈接。這個就會「錯過」了程序啓動的的代碼。我在網上查到了一種直接用代碼停住程序的方法:加入「android.os.Debug.waitForDebugger();」

public class HelloJni extends Activity
{
    ......
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        //就是下面這一句代碼可讓程序停下來等待JDB的鏈接 
        android.os.Debug.waitForDebugger();
         
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }
 
    ......    
}

到這裏就能夠斷點高調試NDK程序了。

3.2.3 最後一些問題

       問題:能夠編譯,但調試時出現「Unknown Application ABI」錯語。 解決方法:在Androidmanifest.xml中修改minSdkVersion及targetSdkVersion便可解決(調高一點)。

       問題:調試時彈出的設備選擇窗中沒有設置選項。 解決方法:其實不是沒有設備,只是須要滾屏才能看到選項。在備選擇框中上下滾動便可看到設備選項。

       問題:設置了C代碼中的斷點,但程序沒有停下來。解決方法:檢查「android.os.Debug.waitForDebugger();」這一句是否有加入程序。另外需用"Debug As"->「Android Native Application」 進行設試 

       問題:Eclipse啓動時會有「Error when loading the SDK」警告.解決方法以下:http://jingyan.baidu.com/article/aa6a2c14fb54190d4c19c480.html    

相關文章
相關標籤/搜索