AndroidStudio调试

参考资料

官方网站

  1. https://github.com/googlesamples/android-ndk, Android NDK官方参考代码
  2. http://tools.android.com/tech-docs, Android Studio技术文档
  3. http://code.google.com/p/android/issues/list, Android问题列表
  4. http://android-developers.blogspot.com/, Android官方博客

Android Studio 安装

安装JDK

Android Studio不建议使用openjdk(因为其UI性能较差),因此从Oracle官网下载JDK,下载网址:

下载后解压即可,不必配置JAVA_HOME等环境变量

安装AS

去developmen.android官方下载最新版Android Studio,并解压,假定目录:~/software/android-studio
修改该目录下的bin/studio.sh文件,在开头添加STUDIO_JDK变量手动指定JDK。

#!/bin/sh
#
# ---------------------------------------------------------------------
# Android Studio startup script.
# ---------------------------------------------------------------------
#
STUDIO_JDK="$HOME/software/jdk1.8.0_91/"

说明:这样系统可以存在多个JDK版本而互不干扰。如笔者机器上还安装了openjdk-7-jdk,用于编译Android系统代码。

配置Android Studio主题和插件

插件

笔者使用黑色系,选择黑色系,在settings菜单中,选择plugins,安装如下插件:

  • Material Theme UI,黑色主题插件,配置完成后新增菜单 tools | Material Theme,选择darker应用。
  • PlantUML,UML绘图插件,使用特殊的标记语法绘制各种类型的UML类图、时序图,并可以生成svg/eps/jpg/png等图片。语法参考

PlantUML绘制时序图效果参考:VirtualAppDoc 项目。

使用Android Studio编译NDK

官方文档

网友博客

Android Studio调试技巧

调试有源码程序

调试应用

首先在合适的地方设置断点,Android Studio中支持多种类型断点,包括

  • 普通断点
  • 方法断点
  • 条件断点
  • ...

关于断点调试,强烈推荐阅读 Android Studio你不知道的调试技巧

现在开始调试,有如下两种启动方法

  • 从新启动应用,选择菜单 run -> Debug 'app',或者点击工具栏按钮。
  • 调试已经运行的应用,可以使用attach功能,选择菜单 run -> attach debugger to android process,或者点击工具栏按钮,如果连接手机,则会弹出进程列表,选择被调试的进程附着即可。

同时调试多个进程

Android Studio的调试功能非常强大,同时支持多个调试上下文,可以attach多个进程,每attach一个进程,都会生成在AS底部的debug窗口打开一个新的Android debug标签页。每个标签页都有独立的调试上下文,分别对应一个进程。AS可以自动在多个debugger之间切换。

调试Android框架层

首先下载Android官方源代码,具体方法请参考Android代码下载编译并刷入Nexus6

参考 如何使用Android Studio开发/调试Android源码

上面这篇文章配置较为繁琐,实际只需要第三步和第五步即可,其他步骤不需要。之后就可以使用attach方式附加被调试的进程。

$ . build/envsetup.sh
$ lunch your-project
$ development/tools/idegen/idegen.sh
$ development/tools/idegen/idegen.sh

使用 Debug.waitForDebugger 调试

可以应用于以下场景:

  • 被调试程序运行时会创建一个新进程,该进程很快执行完毕,来不及触发并attach
  • 被调试程序运行时会启动一个新进程,但是想要调试触发动作之前代码逻辑

此时,可以使用Android提供的调试机制,

Debug.waitForDebugger();

Wait until a debugger attaches. As soon as the debugger attaches, this returns, so you will need to place a breakpoint after the waitForDebugger() call if you want to start tracing immediately.

参考: https://developer.android.com/reference/android/os/Debug.html

该函数会等待调试器attach(附着进程)。该函数在调试器attach后立刻返回,因此如果想开始调试,那么需要在waitForDebugger后设置断点。

调试无源代码程序

使用AndBug

项目地址:https://github.com/swdunlop/AndBug

Android Studio调试Smali

说明:以下部分摘自Smalidea + AndroidStudio 调试 smali 代码,略有补充。

1.准备

Android Studio
http://tools.android.com/download/studio

smalidea-v0.03.zip
https://bitbucket.org/JesusFreke/smali/downloads
https://github.com/JesusFreke/smali/wiki/smalidea

2.安装插件

Setting -> Plugin -> Install plugin from disk...

3.反编译

$ java -jar ~/software/smali/baksmali-2.1.2.jar debug.apk -o debug/src

4.导入和配置项目

Import Project... -> Create project from existing sources
将Project(ALT+1)里面默认的Android视图切换为Project视图,将src设置为Sources Root.
Project Structure(Ctrl+Shift+ALT+S),Project SDK设置为Android API 10 Platform
远程调试配置,Run -> Edit Configuration进入Run/Dubug Configurations;Add New Configuration(+符号) -> Remote,将5005端口,修改为8700端口。

5.安装和配置调试应用

adb install debug.apk(或者用其他方式)
开发者选项,选择调试应用,等待调试器打勾。(英文版本为 Developer页面,打开options wait for debugger选项,Select debug app选择要被调试的应用)
启动应用,应用将挂起,等待调试器连接。

补充:也可是使用am命令配合-D参数启动应用,与上面的效果相同。

$adb shell am start -D -n com.droi.helloinstantrun/.MainActivity

6.连接调试

打开monitor(ddms),会发现有红色蜘蛛的进程,选中后,会显示为xxxx/8700。
启动调试(刚才配置好),应用会启动起来,而Console视图会显示Connected to the target VM, address: 'localhost:8700', transport: 'socket'。
断点就根据实际情况设置。

补充说明

  1. 根据参考文献的说法,设置端口为8700,打开ddms/monitor会自动完成端口转发;也可以使用adb命令手动设置端口转发,命令为adb forward tcp:8700 jdwp:447,其中8700为端口号,447为待调试进程的PID。
  2. 这样创建的工程不完整,无法在AS直接打开Android Device Monitor(该按钮是灰色的),那么可以另外打开一个完整的AS工程,并打开该菜单,或者在android sdk 的tools目录下手动执行ddms或者monitor命令。

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容