Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發環境 >> Android Studio 1.5以上混合調試Native和Java代碼

Android Studio 1.5以上混合調試Native和Java代碼

編輯:Android開發環境

  文中Android Studio 1.5+表示Android Studio 1.5版本以及以上。

  網上大部分中文或英語教程還是停留在老版本的Android Studio的Debug的設置,要麼不全。正好最近工作中要在Android Studio中調試C++代碼,就來寫一篇咯。

  Android Studio 1.5+的調試設置與之前有所不同。

  而且新版中推出了一個Hybrid的調試:可以混合調試Native代碼(C/C++)和Java代碼。

  步驟

  首先你得安裝了1.5版+的Android Studio。

  如果你還在用Eclipse,那真的太古董了...

  現在Android Studio絕對是谷歌的親兒子,極為強大和成熟的一款IDE。已經絕非Eclipse能比擬。這年頭開發Android不用AS,簡直... 好吧,也沒必要看這篇文章了。

  1. 安裝LLDB:(LLDB是Low Level DeBugger 的縮寫,是LLVM的子項目。LLVM在下面補充知識部分有介紹,就不贅述了)。依次Tools->Android->SDK Manager, 然後點擊 "SDK Tools" 的Tab標簽,勾選LLDB。點擊 "Apply"以安裝LLDB。

  2.

  3. 激活Native代碼的調試(不激活的話,之後會出現錯誤 Error: Build type isn's JNI debuggable):在你的項目的子module的build.gradle文件中的buildTypes 區塊中添加 debug { jniDebuggable true }

  4.

  5. 激活Java代碼的調試(貌似沒激活也能調試。無所謂了,激活更保險):在你的項目的子module的AndroidManifest.xml文件中添加 <application android:debuggable="true"></application>

  6. 編輯Configuration:選擇 Run -> Edit Configuration (也可以用屏幕右上角的下拉菜單,選擇Edit Configuration)

  7.

  8. 點擊+號來添加新的Configuration,選擇類型Android Native

  9.

  10. 給新建的Android Native Configuration一個名字,比如叫 Debug_Native

  11. 在General的Tab中,選擇你的module作為要debug的Module

  12.

  13. 在Native Debugger的Tab中,確保勾選了Hybrid這個選項,默認是勾選的。

  14.

  15. 在你的Native代碼或Java代碼中添加斷點,很簡單,直接鼠標點擊代碼行左側就可以添加。

  16.

  17.

  18. 啟動調試:Run->Debug,選擇你要調試的module,再選擇運行在模擬器上或者真機上 (或者以Debug模式啟動你的module,只要點擊右上角的三角形運行按鈕右邊的Bug按鈕(那只綠色的蟲蟲))

  19.

  盡情享受Android Studio帶來的開發流暢感吧!

  補充知識

  「整理自維基百科和互聯網」

  LLVM官網是 llvm.org

  LLVM 是一個自由軟體專案,是一種編譯器的基礎建設,以C++寫成。它是為了任意一種程式語言寫成的程式,利用虛擬技術,創造出編譯時期,鏈結時期,執行時期以 及“閒置時期”的最佳化。它最早是以C/C++為實作對象,目前它支援了包括ActionScript、Ada、D語言、Fortran、GLSL、 Haskell、Java bytecode、Objective-C、Swift、Python、Ruby、Rust、Scala以及C#。

  LLVM 專案起源於2000年伊利諾伊大學厄巴納-香槟分校維克拉姆·艾夫(Vikram Adve)與克裡斯·拉特納(Chris Lattner)的研究發展而成,他們想要為所有靜態及動態語言創造出動態的編譯技術。 LLVM是以BSD授權來發展的開源碼軟體。在2005年,蘋果電腦雇用了克裡斯·拉特納及他的團隊,為了蘋果電腦開發應用程式系統,LLVM為現今 Mac OS X及iOS開發工具的一部分。

  LLVM的命名最早源自於底層虛擬機器(Low Level Virtual Machine)的首字字母縮寫,由於這個專案的范圍並不局限於建立一個虛擬機器,這個縮寫導致了廣泛的疑惑。 LLVM開始成長之後,成為眾多編譯工具及低階工具技術的統稱,使得這個名字變得更不貼切,所以開發者決定放棄這個縮寫的意涵,現今LLVM已經單純成為 一個品牌,適用於LLVM底下的所有專案,包含LLVM中介碼(LLVM IR)、LLVM除錯工具、LLVM C++標准函式庫...等。

  LLVM是一個底層虛擬機平台,提供了經過最佳化的IF代碼,也就是有個中間層,在這個中間層可以做很多的事情,比如優化和提供給編譯器更多的信息,理論上可以支持幾乎任何編程語言。llvm默認的前端是clang,當然也可以用gcc做前端。

  LLVM是用c++寫的,模塊化做的很好,因此可以很好的和clang,gcc等等更多的東西合作,能為ide提供更全的有用信息。而gcc則包含的比較全面,整一 個是一個宏結構,沒有模塊化設計,用c寫的,對ide也不太友好(實際上linux社區裡似乎對ide一直不感冒)。不過c++版的gcc正在重寫中,為 了與llvm/clang更好的競爭,而且gcc從5.0開始打算進行模塊化設計,所以,以後gcc內部可能會分出很多部分。

  就現在來看,gcc大體等同於llvm+clang所提供的功能。

  很多人特別羨慕clang那強大的錯誤診斷信息,其實gcc4.8部分信息診斷能力已經超過它了,比它更准確,所以競爭真的很好,我們可以用到好的東西了。gcc目前的問題就是缺乏模塊化設計,這是暫時落後於llvm的地方。

  freebsd不用gcc是因為gpl協議,llvm/clang的協議更加自由,但llvm/clang目前的兼容性和參數優化等等方面和gcc還有不小差距,雖然編譯後的體積更小了(架構領先優勢),但在性能優化方面相比gcc還有很多事情要做。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved