ubuntu上Android NDK調試配置

來源:互聯網
上載者:User

ubuntu上Android NDK調試配置

android上調試本地c/c++時,可以直接使用gdb在命令列中調試,很麻煩。這裡通過sequoyah外掛程式將調試功能整合到eclipse中,在圖形介面中調試。下面的參考參考資料中已經說明的很詳細了,自己搭建某些地方疏忽了,花了很長時間。

參考了下面幾篇文章

http://blog.csdn.net/dfqin/article/details/6901506

http://www.eclipse.org/sequoyah/documentation/native_debug.php

http://www.cnblogs.com/shadox/archive/2011/12/02/2272564.html

一、環境配置

我安裝的NDK版本為android-ndk-r7b-linux-x86.tar.bz2,此外還需要安裝CDT和sequoyah,直接在eclipse中進行安裝
1.安裝CDT

2.安裝sequoyah外掛程式

3.設定環境變數
在/etc/profile中添加以下語句
ANDROID_SDK_TOOLS=$HOME/android-sdk-linux/platform-tools
NDK_HOME=$HOME/android-ndk-r7b/
export PATH=$PATH:$NDK_HOME:$ANDROID_SDK_TOOLS
儲存退出後,執行source /etc/profile使用環境變數生效

4.在eclipse中,Window->Preferences->Android中設定本地開發NDK位置

二、建立測試工程

1.現在建立一個Android工程Orange,修改java代碼如下

package com.gavin.example;import android.app.Activity;import android.app.AlertDialog;import android.os.Bundle;public class OrangeActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        new AlertDialog.Builder(this).setMessage(sayHello()).show();    }    public native String sayHello();    //native函數static {System.loadLibrary("Orange");}    }

代碼中引用了一個Native函數,用於擷取一個字串

2.在工程名上右鍵選擇Android Tools->Add Native Support


這個介面中,應該是也是可以設定NDK位置的,我的環境可能有些問題,NDK位置不能編譯,所以必需在前一步驟中設定。

現在工程目錄中應該多了一個jni目錄,目錄中有兩個檔案Orange.cpp和Android.mk.

3.在Orange.cpp中添加一個函數

#include <string.h>#include <jni.h>extern "C"{jstring Java_com_gavin_example_OrangeActivity_sayHello( JNIEnv* env,jobject thiz );}jstring Java_com_gavin_example_OrangeActivity_sayHello( JNIEnv* env,                                                  jobject thiz ){    return env->NewStringUTF("Hello, I'm an Orange!");}

4.現在編譯工程可能提示以下錯誤資訊

Method 'NewStringUTF' could not be resolved    com_permadi_testJNI_TestJNIActivity.c    /TestJNIC/jni    line 6    Semantic ErrorType 'JNIEnv' could not be resolved    com_permadi_testJNI_TestJNIActivity.c    /TestJNIC/jni    line 4    Semantic ErrorType 'jobject' could not be resolved    com_permadi_testJNI_TestJNIActivity.c    /TestJNIC/jni    line 4    Semantic ErrorType 'jstring' could not be resolved    com_permadi_testJNI_TestJNIActivity.c    /TestJNIC/jni 

解決辦法,Properties->c/c++ General/Paths and Symbols->includes
GNU C 添加/home/gavin/android-ndk-r7b/platforms/android-14/arch-arm/usr/include
GNU c++ 也一樣
參考http://permadi.com/blog/2011/09/creating-your-first-android-jnindk-project-in-eclipse-with-sequoyah

編譯Orange工程,啟動模擬器測試一下應該能成功顯示"Hello, I'm an Orange!"字串了

5.設定編譯debug標誌

修改工程設定檔AndroidManifest.xml,將Debuggable標誌設定為true,如下

三、調試器的配置

1.找到NDK目錄下的ndk-gdb指令碼,注釋掉最後一句
# $GDBCLIENT -x $GDBSETUP -e $APP_PROCESS
現在在命令列中進入工程目錄,執行ndk-gdb命令,將在obj/local/armeabi中產生了app_process,gdb.setup等新檔案

gavin@gavin-desktop:~/workspace/Orange$ ndk-gdb gavin@gavin-desktop:~/workspace/Orange$ ls obj/local/armeabi/app_process  gdb.setup  libc.so  libOrange.so  libstdc++.a  objs  objs-debug

將上面的gdb.setup檔案改名為gdb2.setup,並刪除掉最後一句
target remote:5039

選擇工程->debug as->debug configurations,在c/c++ Application上右健建立一個配置
2.Main選項卡

c/c++ Application中填寫由ndk-gdb命令產生的app_process檔案,/home/gavin/workspace/Orange/obj/local/armeabi/app_process
點擊最下面的"Select other...",勾選"Use configuration specific setting", 在下面的框中選擇"Standard Crete Process Launcher"

3.Debugger選項卡
Debugger中選擇"gdbserver"
GDB debugger: /home/gavin/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb

GDB command file: /home/gavin/workspace/Orange/obj/local/armeabi/gdb2.setup

最好勾選一下最下面的"verbose console mode",這樣在console中會輸出gdb命令資訊

切換到Connection子選項卡
協議類型選擇"TCP",連接埠號碼填"5039"
四、調試

1.在java中調用native方法處添加斷點,c++函數中也設定斷點,啟動java項目調試,這時程式應該在調用native方法處中斷。

2.現在命令列進入工程目錄,執行ndk-gdb。剛開始的時候我忽略了這一步,結果出現下面的錯誤,糾結了兩個小時

Target selection failed. Remote communication error: Connection reset by peer. Remote communication error: Connection reset by peer. Remote communication error: Connection reset by peer. 

3.工程屬性->debug as->debug configurations,在c/c++ Application中選中Orange Default配置,點擊“Debug”

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.