如何在android studio 中国中调试源程序

Android&Studio如何使用手机调试程序
最近在学习Android
Studio,遇到一些问题,解决的同时记录下来,帮助自己记忆查询,也帮助其他朋友解决一些小问题,希望可以与大家互通有无。
要在Android
Studio中每次运行程序(run)都可以在手机中直接看到效果,需要执行以下几个步骤:
1.使用USB线连接你的手机,并在手机中开启"USB调试"。
2.在Android Studio中,点击菜单"Run - Edit
Configurations"。
3.在General选项卡中,将"Target
Device"的选项改为"USB device",点ok确定。
4.完成!再次按ctrl+F10
"run"一次,如果你发现软件下方区域出现类似这样的回馈
Installing com.example.android.BluetoothChat
DEVICE SHELL COMMAND: pm install -r
"/data/local/tmp/com.example.android.BluetoothChat"
pkg: /data/local/tmp/com.example.android.BluetoothChat
(其中BluetoothChat是我的程序名称)
恭喜你,赶快看看手机吧,程序已经安装在手机中了!
本文可随意转载,但请注明作者,谢谢!
[版本:Android
Studio 0.2]
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。自己动手调试Android源码 - CSDN博客
自己动手调试Android源码
在一文中,我们为自己编译了一份最新的Android源码.很多时候,我们编译源码的目的不仅仅是尝试一番,而是希望对其进行调试,并修改源码,看看其中一些关键机制的运行原理.比如你对AMS掌握不深,那么就来单独的调试一下;又或者是说你想看看launcher的实现原理,同样也可以自己动手调试.更或者说,你觉得某个模块很不理想,想自己修改一番,那就更好了.
下面,我们来说说如何调试源码.同样这里的工作平台还是ubuntu 16.04和Android Studio.另外,本文参考源码中developent/tools/idegen/README文档.
源码编译完整之后,我们就可以导入源码到Android Studio中进行调试了.那么如何调试呢?
在源码中,存在idegen模块,该模块专门用来为idea工具生成系统源码的project.
在开始编译该模块之前,首先确保你已经编译过Android源码了,如果没有,可以参考上篇文章进行编译.
和编译普通的模块一样,我们用mmm命令编译idegen.在开始编译之前,检查out/host/linux-x86/framework/目录下是否存在idegen.jar文件,存在则说明你已经编译过该模块,否者,则需要编译.执行如下命令即可:
soruce build/envsetup.sh
mmm development/tools/idegen/
sudo ./development/tools/idegen/idegen.sh
其中mmm development/tools/idegen/执行完成后会生成idegen.jar,而sodo ./development/tools/idegen/idegen.sh则会在源码目录下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.
简单的说明一下这三个文件的作用:
android.ipr:通常是保存工程相关的设置,比如编译器配置,入口,相关的libraries等
android.iml:则是主要是描述了modules,比如modules的路径,依赖关系等.
android.iws:则主要是包含了一些个人工作区的设置.
到目前为止,我们就完成了源码准备工作.
2.1 修改AS配置文件
编译成功后,现在我们就可以将源码导入Android Studio了.但是在导入之前,我们先修改一下Android studio的配置:32位系统下修改idea.vmoptions,64位下修改idea64.vmotions
调整其中的-Xms和-Xmx参数值,官方要求至少在748m以上,根据实际情况进行配置即可.
然后进入android-studio目录下的bin文件夹,执行如下命令启动Android Studio
./studio.sh
2.2 导入源码
接下来,我们导入源码:打开Android Studio,点击File-&Open,选择刚才生成的android.ipr文件即可,然后就是漫长的等待,注意此时是将源码完全导入到AS中了,不出意外,你会觉得AS运行非常之慢.那么该如何做呢?继续往下看吧.
很多情况下,我们希望不导入某些模块,那么就可以在导入前修改android.iml文件,通过添加配置的方式告诉AS不导入某些模块,比如现在我不想导入art模块,那么就在android.iml文件中添加:
&excludeFloder url="file://$MODULE_DIR$"/abi&
不难发现,其格式为:&excludeFloder url="file://$MODULE_DIR$"/模块名&
注:编译生成的android.iml文件中已经默认排除了一下模块,通过搜索excludeFolder关键字可找到.
我这里只保留了framworks和packages模块,将其他模块全部排除了,因此在android.iml中添加了以下配置:
&excludeFolder url="file://$MODULE_DIR$/.repo" /&
&excludeFolder url="file://$MODULE_DIR$/abi" /&
&excludeFolder url="file://$MODULE_DIR$/art" /&
&excludeFolder url="file://$MODULE_DIR$/bionic" /&
&excludeFolder url="file://$MODULE_DIR$/bootable" /&
&excludeFolder url="file://$MODULE_DIR$/build" /&
&excludeFolder url="file://$MODULE_DIR$/cts" /&
&excludeFolder url="file://$MODULE_DIR$/dalvik" /&
&excludeFolder url="file://$MODULE_DIR$/developers" /&
&excludeFolder url="file://$MODULE_DIR$/development" /&
&excludeFolder url="file://$MODULE_DIR$/device" /&
&excludeFolder url="file://$MODULE_DIR$/docs" /&
&excludeFolder url="file://$MODULE_DIR$/external" /&
&excludeFolder url="file://$MODULE_DIR$/hardware" /&
&excludeFolder url="file://$MODULE_DIR$/libcore" /&
&excludeFolder url="file://$MODULE_DIR$/libnativehelper" /&
&excludeFolder url="file://$MODULE_DIR$/ndk" /&
&excludeFolder url="file://$MODULE_DIR$/out" /&
&excludeFolder url="file://$MODULE_DIR$/pdk" /&
&excludeFolder url="file://$MODULE_DIR$/prebuilt" /&
&excludeFolder url="file://$MODULE_DIR$/prebuilts" /&
&excludeFolder url="file://$MODULE_DIR$/sdk" /&
&excludeFolder url="file://$MODULE_DIR$/system" /&
&excludeFolder url="file://$MODULE_DIR$/tools" /&
此时导入AS后的结果如下所示:
如果已经将全部项目导入到AS中,而又想排除一些模块该怎么办呢?
此时可以在Project Scureture的Mobules中进行排除.比如这里我想排除art模块,那么做法如下图:
2.3 源码查看
导入的过程是很漫长滴.导入完成之后,现在我们就可以在android studio中查看源码,如图:
2.4 解决源码跳转错误问题
为了编码Android源码跳转错误问题,还需要做以下两点:配置SDK,JDK及修改依赖,具体操作如下:
2.4.1 配置SDK和JDK
我们需要为当前项目配置JDK和SDK:点击Project Structure,进入到项目配置界面,在SDKs设置中加入必须的JDK和SDK:
为了确保使用的是Android源码库中的文件,我们将新添加的这个JDK的Classpath中的内容全部删掉,也就是需要删掉Classpath标签页下的所有jar包,然后在下面Android API 24 platform中指定使用刚才新增的JDK,
最后在右侧选中Project标签,在Project SDK中选择对应的Android API版本.
2.4.2 修改依赖
同样打开Projects Stucture,选择Modules.首先将所有的依赖删除(为了方便,后边如果缺少,可以自行添加进来)
删除完成之后(保留下图所示的两项),并点击右边的”+”添加Frameworks和external目录,结果如下图所示:
到现在为止,你就可以正常的查看源码,并在源码间进行跳转了.
搞定上面之后,现在我们来看看如何用Android Studio一步一步调试代码.
首先为刚才导入的工程添加Framework,以便让AS将它作为一个Android工程,从而能让我们进行调试,如果项目已经是Android工程了(目前最新的android源码导入到as中就是作为一个android工程,因此不需要在做这一步了)则不需要再次进行添加了.
在Project Structure中的Mouble中,为其添加Framework,如下图所示:
接下来就可以用debugger进行调试跟踪代码了.首先使用emulator命令启动我们的虚拟机.接下来选择Attache debugger to Android process,在弹出的Choose Process框内必须选择Show all processes,否则看不到相关的进程:
这里我一调试com.android.settings模块为例进行说明.
在SettingActivity中下断点,如图:
选择com.android.settings
做完这些后,我们点击android 虚拟机中的设置,随后就可以一步一步调试了
要想调试源码,不难发现,一共需要以下几个步骤:
1. 编译好的源码
2. 使用idegen模块生成必要的项目工程文件
3. 导入源码到AS中
现在呢,你可以放心的去调试了,在这期间出现问题可自行Google解决,一般都能找到答案.
本文已收录于以下专栏:
相关文章推荐
Android 入门 (一) 试用
Android的版本
android的版本有很多 0.9 ,1.0 ,1.5,1.6,2.0,2.1
09年4月15日 cupcake android 1.5...
编译android4.0,提示错误信息:
Checking build tools versions...
********************************************...
Android环境搭建,linux内核编译
1、Ubuntu 系统Ubuntu 14.04 LTS,
2、android源码来自于清华TUNA镜像源
    http://aosp.tuna./android/
在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Andr...
在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Andr...
###以下操作全在ubuntu系统下完成###
###以下出现的gingerbread目录是android的源码根目录###
1.安装JDK。(我安装的是JDK1.6_31)
2.android...
准备开始重操那两年的旧业,后悔之前在上家公司做Amlogic和Realtak方案盒子时没有养成写博客的习惯,这算是开篇之作吧,顺带也算是给一个网友的答疑吧。不多说,该篇只是工具讲解而已。关于Andro...
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!目标:Android Studio新手–&下载安装配置–&零基础入门...
工作两个多月,谈谈修改android源代码的感受。
之前没有接触过android,开始一个月学习下java,android,git,基础性知识,大学没有好好学,就现学了,真的很感谢我的公司给我一个机...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)02 Android studio中编译C代码库及调试方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
02 Android studio中编译C代码库及调试方法
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢白话开发——Android Studio代码调试技巧篇
Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现bug,进而解决,可是我们的看家本领。正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse、Idea,Android Studio也为我们提供了强大的调试技巧,今天我们就来看看Android Studio中有关调试的技巧。
首先,来看看Android studio中为我们提供的调试面板(标准情况下):
点击右上角Restore &Threads&View可先展示目前相关的线程信息:
android studio大体为我们提供了7个功能区:vcD4NCrX3ytS5psTcx/ggts+147ncwO25psTcx/ggx/PWtbHttO/KvSDP37PM1qHVu8f4ILbUz/Ox5MG/x/ggseTBv7nbsuzH+A0KPHA+z8LD5s7Sw8e31rHwttTV4sbfuPbH+NPyvfjQ0L3pydyhozwvcD4NCjxociAvPg0KPGgxIGlkPQ=="调试功能区">调试功能区
该区提供了调试的主要操作,和你所熟知的一样的,主要有:Step over、step into、force step into、step out、drop frame。
单步跳过,点击该按钮将导致程序向下执行一行。如果下一行是一个方法调用,那么调式到这一行时,此行调用的方法已被执行完毕。比如当前代码是:
int num=10;
int min=Math.min(num,100)
如果当前调试的是第一行,当点击step over时,此时调试的是第2行,并且Math.min(num,100)该方法已经被执行完毕。
单步跳入,执行该操作将导致程序向下执行一行。如果下一行是自定义的方法,则进入该方法内部继续执行,需要注意如果下一行是类库中的方法,则不会方法内部。
force step into
强制单步跳入,和step into功能类似,主要区别在于:如果下一行是一个方法,则不管该方法是我们自行定义还是类库提供的,都能跳入到方法内部继续执行
drop frame
没有好记的名字,大意理解为扔掉当前栈帧,即停止当前方法的执行,返回到当前方法被调用处,并且所有上下文变量的值也恢复到那个时候。简单的举例来说明:
public class DebugDemo {
private String name = &default&;
public void alertName() {
System.out.println(name);
public void debug() {
this.name = &debug&;
public static void main(String[] args) {
new DebugDemo().alertName();
当你在调试debug()时,执行该操作,将回调到debug()被调用的地方,也就是alertName()方法。如果此时再继续执行drop frame,将回调到alertName()被调用的地方,也就是main().
求值表达式
即Evaluate expression,当执行该操作时,会在当前调试的语句处嵌入一个交互式解释器,在该解释器中,你可以执行任何你想要执行的表达式进行求值操作。比如,我们在调试时执行到以下代码:
此时执行Evaluate Expression,就相当于在调试行之前嵌入了一个交互式解释器,那么在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:对着你想要求值得位置点击鼠标右键,选择evaluate Expression.此时会显示如下:
在弹出的输入框中输入求值表达式,比如这里我们输入Math.min(result,50),如下图
点击执行,我们发现在Result中已经输出了结果,如下:
断点管理区
执行下一个断点
在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点处,两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力。举例说明:
public void test(){
假设我们分别在第2行和第4行添加了断点。如果此时我们调试在第2行,此时点击执行该操作,当前调试位置会自动执行到第4行,也就是第2到第4行之间的代码会自动被执行。
管理所有断点
执行该操作将会进入断点管理界面,在这里你可以对目前已经添加的断点进行管理,比如删除,修改属性信息等。如图:
修改变量值
在调试过程中,我们可以方便的修改某个变量的值,如下:
在上图中,当前result的值经过计算为10,这里我们通过Set Value将其计算结果修改为100.
所谓的停止调试,并不是程序停止运行,而是退出调试模式。比如调试模式下设置了如下断点:
此时如果我们执行停止操作,发现程序退出调试模式,并正常执行完毕,Console中输出结果:
变量观察区
该区域将显示你所感兴趣的变量的值。在调试模式下,你可以通过Add to Watches将某个变量添加到观察区,该值的变化将会在变量观察区显示。操作如下:
这里我们对name比较感兴趣,希望看到它的值的变化情况,因此我们将其&特殊关照&。需要注意,此时因为name是成员变量,因此在对象观察区也可看到该值。如果是局部变量,无疑只能用这种方式了。
断点的分类
到目前为止,我们已经简单的介绍了调试功能区,断点管理区,求值表达式,这三个区域的功能。在上面,我们不断的提到了断点一次,但是断点是什么呢?想必大部分人已经知道了,我们这里在简单的说明下:
断点是调试器的功能之一,可以让程序暂停在需要的地方,帮助我们进行分析程序的运行过程。
在Android Studio中,断点又被以下五类:
条件断点 日志断点 异常断点 方法断点 属性断点
其中方法断点是我们最熟悉的断点类型,相信没有人不会。下面我们着重介绍其他四种类型的断点。
所谓的条件断点就是在特定条件发生的断点,也就是,我们可将某个断点设置为只对某种事件感兴趣,最典型的应用就是在列表循环中,我们希望在某特定的元素出现时暂停程序运行。比如,现在我们有个list中,其中包含了q,1q,2q,3q四个元素,我们希望在遍历到2q时暂停程序运行,那么需要进行如下操作:
在需要的地方添加断点,如下:
断点处左键单击,在Condition处填写过滤条件.此处我们只关心2q,因此填写s.equals(&2q&)
该类型的断点不会使程序停下来,而是在输出我们要它输出的日志信息,然后继续执行。具体操作如下:
同样在断点处左键单击,在弹出的对话框中取消选中Suspend。
在弹出的控制面板中,选中Log evaluated expression,然后再填写想要输出的日志信息,如下:
当调试过程遇到该断点将会输出结果,如下:
所谓的异常断点就是在调试过程中,一旦发生异常(可以指定某类异常),则会立刻定位到异常抛出的地方。比如在调试异常中,我们非常关注运行时异常,希望在产生任何运行异常时及时定位,那么此时就可以利用该类型异常,在上线之前,进行异常断点调试非常有利于减少正式环境中发生crash的几率。
具体操作如下:在Run菜单项中,选择View Breakpoints(也可以在断点管理面板中点击),如下:
在管理断点面板中,点击+
在弹出的下拉选择列表中,我们选择Java Exception Breakpoints
这里我们选中Search By Name,在下面的输入框中输入我们所关心的异常类型。此处我们关心NullPointerException,在调试过程一旦发生NullPointerException,调试器就会定位到异常发生处。
(略过吧,应该没人不知道了)
Filed WatchPoint
Filed WatchPoint是本质上是一种特殊的断点,也称为属性断点:当我们某个字段值被修改的时候,程序暂停在修改处。通常在调试多线程时尤为可用,能帮我们及时的定位并发错误的问题。其使用和添加普通的断点并无不同,断点图标稍有不同
调试的两种方式
到目前,调试的相关基础我们已经介绍完了,但是不少童鞋对Android Studio中源码。Android Studio系列(二)使用AS开发/调试整个android系统源代码(不定时更新)
转载请注明出处:
本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤。
由于Android Studio(以下简称AS)是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA。
零、为什么用AS
智能代码提示自动保存多设备实时预览内置终端UI漂亮自带git github svn插件强大的搜索
一、修改AS的配置
由于Android源码太大了,在过导入源码和后续工作中,AS需要占用大量内存,所以我们要先做些设置。
在2.3.1以后的版本中修改/home/username/.AndroidStudio2.3/studio64.vmoptions文件,增加-Xms748m -Xmx4096m,也可通过help-&Edit Custom VM Options修改。
二、生成导入AS所需配置文件(*.ipr)
为了成功将源码导入AS,我们需要先生成AS可是别的项目工程配置文件。
在源码根目录依次执行
source build/ensetup.sh
make idegen
development/tools/idegen/idegen.sh
之后会出现类似下面的结果:
Read excludes: 5ms
Traversed tree: 44078ms
这时会在源码的根目录下生成android.ipr,android.iws和android.iml三个文件。
三、导入源码
android源码代码量较大,全部导入比较耗时,因此在打开前可以先去除一些不想导入的代码文件夹。
如果我们一直都不会去修改prebuilt文件夹下的代码,可以先修改android.iws,在合适的位置添加:&ignored
path=&$PROJECT_DIR$/prebuilt/& /&。
之后再打开源码目录下的android.ipr。
另外,第一次导入源码需要生成index,因此花费的时间比较长,完整扫描一次以后再打开就没这么慢了。
四、配置AS的JDK、SDK
在上一步操作之后的等待期间刚好让我们来配置一下JDK和SDK。
在AS中参照下图Project Structure设置,在SDKs设置中加入必须的JDK,SDK。
创建一个新的JDK,可以取名为1.7(No Libraries),然后删除classpath标签页下面的jar文件。 这样可以确保使用Android源码里的库文件。
之后将1.7(No Libraries)作为Android SDK要使用的Java SDK。如下图
之后在Project标签中的Project SDK中选择对应的Android API版本。
五、debug源码
我们可以通过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便我们调试代码。
选择途中Framework目录下的Android
在代码中加断点,然后选择'Run'-&'Attach debugger to Android process'或者直接点击下图中的手机上有个虫子的图标。
在弹出的选择进程(Choose Process)对话框中,先勾选显示所有进程,然后选择要debug的代码所在的进程,点击OK即可(可同时debug多个进程)。
六、解决源码中跳转错误问题
设置'Modules'的依赖
将除了Module source和Android API以外所有的依赖删掉。
点击上图中'+'并选择'Jars or directories'选项,将frameworks文件夹添加进来。如:
如果之后还是遇到了代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中。
最近我在几个英文网站上看到把out/target/common/R文件夹标记为Sources,我猜测是为了解决找不到R资源的问题,但是我测试没有生效。读者自行选择吧。
七、快捷键
快捷键是利器啊!熟悉了快捷键效率飙升!不过有些与系统快捷键冲突了,若要实行请自行修改。
全部快捷键请看另一篇文章:
因为Android Studio 的配置和缓存文件存在home/.AndroidStudio文件夹中,时间长了可能会导致系统磁盘吃紧,若要修改默认存储位置(比如改到其他挂在盘),需修改android-studio/bin/idea.properties文件中相关的配置信息,修改内容参考:
注:前面生成的文件分别作用为:
①android.iws 包含工作区的个人设置,比如打开过的文件,版本控制工具的配置,本地修改历史,运行和debug的配置等。
②android.ipr 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等。
③android.iml 用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。
你可能需要的链接:
感谢原作者!
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 android studio 中国 的文章

 

随机推荐