【Android】Android Studio 1.5+ 中混合调试Native和Java代码



【Android】Android Studio 1.5+ 中调试Native和Java代码

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. 激活Native代码的调试(不激活的话,之后会出现错误 Error: Build type isn‘s JNI debuggable):在你的项目的子module的build.gradle文件中的buildTypes 区块中添加
  3. debug {             
        jniDebuggable true         
    }

  4. 活Java代码的调试(貌似没激活也能调试。无所谓了,激活更保险):在你的项目的子module的AndroidManifest.xml文件中添加
  5. <application android:debuggable="true"></application>
  6. 编辑Configuration:选择 Run -> Edit Configuration (也可以用屏幕右上角的下拉菜单,选择Edit Configuration)
  7. 点击+号来添加新的Configuration,选择类型Android Native

  8. 给新建的Android Native Configuration一个名字,比如叫 Debug_Native
  9. 在General的Tab中,选择你的module作为要debug的Module
  10. 在Native Debugger的Tab中,确保勾选了Hybrid这个选项,默认是勾选的。
  11. 在你的Native代码或Java代码中添加断点,很简单,直接鼠标点击代码行左侧就可以添加。
  12. 启动调试: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还有很多事情要做。

时间: 03-21

【Android】Android Studio 1.5+ 中混合调试Native和Java代码的相关文章

kafka中常用API的简单JAVA代码

通过之前<kafka分布式消息队列介绍以及集群安装>的介绍,对kafka有了初步的了解.本文主要讲述java代码中常用的操作. 准备:增加kafka依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.2.0</version> </dependenc

Android平台下使用lua调用Java代码经验总结

动态语言以其执行的灵活性,可配置性.方便调试能够为开发带来极大的方便.假设用好了.能够极大的提高开发的效率. 怪不得像游戏开发这样复杂的软件开发里没有不集成脚本语言的. 当中,lua以其小巧,灵活.方便扩展,方便嵌入被用于大多数的游戏开发中. 对于我来说.对于一个充分认识到动态的力量的人来说,在软件开发里集成一种脚本语言成为一种非常重要的非常有意义的工作. 可是在Android平台.在试过Python后,发现尽管集成也不是什么困难的事,可是感觉它还是有点大,一个动态库就有3M多,python库还

Spring中如何混用XML与Java装配方式

由David发表在天码营 多种装配方式的混用 除了自动配置,Spring使用显式的Java配置或者XML配置也可以完成任何装配.通常情况下可能在一个Spring项目中同时使用自动配置和显式配置. 对于自动配置,它自动从整个容器上下文中查找合适的bean,这个bean是通过@Component之类的标准,可能来自Java配置或者XML配置. 我们先来了解一下Java配置吧. Java配置 创建配置类 使用Java配置,通过创建一个专门用于Spring配置的类,然后通过@Configuration标

Android Studio 2.1 NDK断点调试方法

Android Studio 2.1 NDK断点调试方法(基于Android 2.1, gradle 2.1.0) 1.创建一个Android Studio Project 2.设置NDK路径. 菜单中选择: File->Project Structure 在弹出的窗口的左侧选项框中,选择SDK Location,在右侧设置Android NDK location. 2.修改.\build.gradle如下: replase classpath 'com.android.tools.build:

Android Studio右键选项中没有Git?

从Git clone一个Project并打开后,都会习惯性的像使用Eclipse一样,选中工程右键,选择Git的对应版本控制选项. 如下图,你只看到了svn. 如何配置才能在右键选项中看到Git呢,我直接上图吧,大家根据下图来配置就可以了.配置其他的右键选项版本控制工具也是一样的. Android Studio右键选项中没有Git?,布布扣,bubuko.com

利用HTML5开发Android(3)---Android中的调试

通过JS代码输出log信息 Js代码 Js代码: console.log("Hello World"); Log信息: Console: Hello World http://www.example.com/hello.html :82 在WebChromeClient中实现onConsoleMesaage()回调方法,让其在LogCat中打印信息 Java代码 1 WebView myWebView = (WebView) findViewById(R.id.webview); 2

在Android应用中添加React Native支持

用android studio创建一个基本的android hello world程序 在项目根目录中通过npm向导生成package.json文件,在cmd中输入命令:npm init 在package.json文件中添加启动脚本"start": "node node_modules/react-native/local-cli/cli.js start" 添加react-native npm依赖,在命令行输入npm install react react-nat

Mac OS X系统下android环境变量配置和真机调试

一.确保你的安卓手机可以被mac读取. 方法:下载并安装 androidfiletransfer.dmg 文件,让你的Mac可以存取Android手机内存. 下载地址:http://www.android.com/filetransfer  需要翻墙 或者链接: http://pan.baidu.com/s/1bpiEb8N 密码: gun 二.设置好你机器的环境变量. 在Mac下开发Android,要想在终端利用命令行使用adb/android等命令时,需要配置一下环境变量. 1.找到SDK文

Android漫游记(4)---.so文件动态调试一例

Android平台的动态调试一直以来是个困扰我等Coder的头疼问题,特别是对于本地的动态调试支持,可以说是"弱智"级别的,不知道Google的新版NDK和新出的Android Studio对这块支持如何,让我们拭目以待. 言归正传,我这里采用的是cygwin+ndk-gdb的调试模式,灵感来自于XDA的一篇博文(点击打开链接),平台和原文作者不同: 1.Win7 64 2.NDK r9d x86_64 3.Android 4.2.2 4.cygwin 64 5.IDA pro 6.1