您好,登錄后才能下訂單哦!
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,簡直... 好吧,也沒必要看這篇文章了。
安裝LLDB:(LLDB是Low Level DeBugger 的縮寫,是LLVM的子項目。LLVM在下面補充知識部分有介紹,就不贅述了)。依次Tools->Android->SDK Manager, 然后點擊 "SDK Tools" 的Tab標簽,勾選LLDB。點擊 "Apply"以安裝LLDB。
激活Native代碼的調試(不激活的話,之后會出現錯誤 Error: Build type isn's JNI debuggable):在你的項目的子module的build.gradle文件中的buildTypes 區塊中添加
debug { jniDebuggable true }
激 活Java代碼的調試(貌似沒激活也能調試。無所謂了,激活更保險):在你的項目的子module的AndroidManifest.xml文件中添加
<application android:debuggable="true"></application>
編輯Configuration:選擇 Run -> Edit Configuration (也可以用屏幕右上角的下拉菜單,選擇Edit Configuration)
點擊+號來添加新的Configuration,選擇類型Android Native
給新建的Android Native Configuration一個名字,比如叫 Debug_Native
在General的Tab中,選擇你的module作為要debug的Module
在Native Debugger的Tab中,確保勾選了Hybrid這個選項,默認是勾選的。
在你的Native代碼或Java代碼中添加斷點,很簡單,直接鼠標點擊代碼行左側就可以添加。
啟動調試:Run->Debug,選擇你要調試的module,再選擇運行在模擬器上或者真機上 (或者以Debug模式啟動你的module,只要點擊右上角的三角形運行按鈕右邊的Bug按鈕(那只綠色的蟲蟲))
盡情享受Android Studio帶來的開發流暢感吧!
之后會寫一篇完整的Android Studio的NDK配置使用以及一個Android上層Java代碼調用Native代碼實現Unix Socket的服務器和客戶端通信的例子(正好最近工作中剛完成一個測試任務)。
補充知識
「整理自維基百科和互聯網」
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還有很多事情要做。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。