【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还有很多事情要做。

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

  1. Android Studio 1.5+ 中调试Native和Java代码

    Android Studio 1.5+ 中调试Native和Java代码 步骤如下 1.安装了1.5版+的Android Studio 2.安装LLDB:(LLDB是Low Level DeBugge ...

  2. 在 Eclipse Galileo 中更快地编写 Java 代码使用新的 toString() 生成器

    http://www.ibm.com/developerworks/cn/opensource/os-eclipse-codegen/ 这个代码生成技巧使用 Eclipse Galileo 中的新特性 ...

  3. java输出带圆圈数字_AcWing 82. 圆圈中最后剩下的数字--Java代码

    算法1 (环形链表) $O(n)$ 经典的解法, 用环形链表模拟圆圈. 创建一个总共有 n 个结点的环形链表,然后每次在这个链表中删除第 m 个结点. Java 代码 class Solution { ...

  4. 如何在Mirth Connect中创建和调用自定义Java代码

    0-前言 本文章将向您展示如何创建自定义Java类,将其编译/打包到JAR中,将其包含在Mirth Connect在,并在JavaScript中调用它,您可以从任何JavaScript上下文调用自定义 ...

  5. 在IDEA中创建maven项目编写java代码操作HDFS集群

    一.安装win10编译过的hadoop 1.将编译好的hadoop包放在非中文目录 2.配置HADOOP_HOME环境变量 3.将hadoop包的bin目录加到PATH环境变量中 二.在idea中创建 ...

  6. 【Android Gradle 插件】gradle.properties 中配置编译参数并在 Java 代码 BuildConfig 中调用该参数

    文章目录 一.gradle.properties 中配置编译参数 二.在 build.gradle 中配置 BuildConfig.java 生成信息 三.编译后生成的 BuildConfig 类 A ...

  7. Eclipse中如何调试(Debug)代码

    目录 1.设置断点 2.执行调试 3.单步调试 4.如何返回原来的视图? 5.如何结束调试程序 调试又称为debug,为什么调试称为debug呢?据说是在当时有一只虫子跑进了计算机中导致机器宕机,因为 ...

  8. idea远程调试修改代码_IDEA远程调试(Remote Debug)Java代码指南

    前言 当我们的代码在线上/测试环境运行出现异常需要进行问题定位时,之前的传统做法是:查看异常日志,根据日志定位到出错代码,然后再根据相关参数及异常信息进行推断.但是很多异常问题需要更细致的进行debu ...

  9. java 先序遍历_二叉树的前序中序后序遍历(java代码)

    importjava.util.*; public classtraversal { public static voidmain(String[] args) { List list=newArra ...

最新文章

  1. 强化学习大规模应用还远吗?Youtube推荐已强势上线
  2. 分析机风云:超前时代五十载,是非曲直苦难辩
  3. sqlmap写文件为空之谜
  4. 时光煮雨 Unity3D实现2D人物移动-总结篇
  5. 没有c语言基础可以学python吗-学习Python之前需要先学习一下c语言吗?
  6. ZooKeeper 保证数据一致性
  7. 软件或jar包等名字里的GA意思
  8. python数据结构-数组/列表/栈/队列及实现
  9. java显示字母数字组合_Java字母加数字组合比较大小
  10. Maven仓库—Nexus环境搭建及使用
  11. 读《菜鸟学习***必看,不看别后悔》有感
  12. 苹果开发者被盯上了!Xcode又双叒叕被攻击了
  13. 如何利用shell查看Ubuntu系统版本号和电脑类型
  14. 计算机c盘如何扩容,C盘满了怎么办?电脑C盘扩容图文教程-电脑教程
  15. java中怎么审阅图片_java – Crucible REST API:无法添加审阅者
  16. 计算机考研402,2021双非无项目科班402分上岸中科大-数学经验+复试全过程
  17. BBR原版/魔改/plus/锐速/七合一脚本linux加速脚本/硬盘挂载/cc防御/宝塔
  18. R语言辅导高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
  19. 3D游戏建模需要学会哪些软件?想入行游戏建模的你都学习了吗?
  20. iOS7死机率比安卓高2倍!爱疯5S冲进3K档

热门文章

  1. iphone连接pc蓝牙_iPhone通过USB电缆使用Windows PC的网络连接到Internet
  2. 微前端 - qiankun 应用间通信
  3. 「Medical Image Analysis」Note on XNet
  4. SQL-复杂一点的查询--case
  5. python爬虫——request模块讲解
  6. k8s HPA(HorizontalPodAutoscaler)-自动水平伸缩
  7. C语言练习题:三色球分组,编程计算三色球问题。若一个口袋中放有12个球,其中有3个红色的,3个白色的,6个黑色的,从中任取8个球,问共有多少种不同的颜色搭配?请用穷举法编程求解。
  8. mysql安装详细步骤图解:
  9. 不是供电中断 而是网络攻击让达美航空停航
  10. android开发人员要求_如何成为一名Android开发人员