开发调试环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码
由于AS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA
一、修改Android Studio(以下简称AS)的内存配置
因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK, 这样可以确保使用源码里的库文件
并将其作为要使用的SDK的Java SDK。如下图
三、生成导入AS所需配置文件(*.ipr)
①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)
②检查out/host/linux-x86/framework/目录下是否有idegen.jar
如果idegen.jar不存在,执行:
mmm development/tools/idegen/
在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。
我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。
③执行
development/tools/idegen/idegen.sh
等待出现类似下面的结果:
Read excludes: 5ms
Traversed tree: 44078ms
这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件
Tips:
AS在导入代码时比较慢,建议先修改android.iml,将自己用不到的代码exclude出去.可以仿照过滤.repo文件夹的语法,如:
excludeFolder url="" /
excludeFolder url="" /
excludeFolder url="" /
这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处理速度就会越快.
④在AS中打开源码根目录下新生成的android.ipr
如果在导入时AS出现
则建议按照其给定的解决 *** 来解决(网址:),具体内容如下图:
四、解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK
②设置'Modules'的依赖
先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
点击上图中'2'指向的'+'并选择上图'3'指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:
其它版本的代码在添加frameworks时可能会显示成:
没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.
如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.
五、DEBUG源码
我们可以通过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便我们调试代码.
可以按照上图中'1'和'2'来添加Android Framework支持.
在代码中加断点,然后选择'Run'-'Attach debugger to Android process'或者直接点击下图所示的图标
在弹出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.
六、其它
代码中很多地方提示Call requires API Level x.... 出现这个问题是因为AS将我们的工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.
我们只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。
也可以考虑使用build.gradle来解决该问题。
dev-c是个ide,它的编译器是mingw
一、使用单步调试和观察变量的步骤:
1.
编译通过(ctrl+f9)
2.
设置断点(ctrl+f5)
3.
调试(f8)
4.
增加观察变量(在左边的debug观察窗口右键增加或者f4)
5.
单步调试:f7
6.
结束调试:ctrl+alt+f2
简单来说,它有两种方式,一种是源码debug,即分析源码来找出bug位置,一般使用printf()打印出程序执行每一步的信息,一种是可执行文件debug,需要使用调试器来进行。
1.源码debug。类似于下面的源码,主要通过程序执行时输出的信息,来定位bug出现的位置,然后再修改源码。
例如:
#include
void
f()
{
;
}
int
main(){
#ifdef
_debug
printf("start
main
function!\n");
#endif
void
f();
#ifdef
_debug
printf("leave
main
function
!\n");
#endif
return
0;
}
2.可执行文件调试,windows平台常用的就是vs/vc自带的调试,另外一个就是微软自家开发的调试器windbg。linux平台以gdb为常用。
下面以dev-c++为例:
1)在“工具”-》编译选项-》"编译时加入以下命令"下面的编辑框里加上:
-g3
2)在下面的"在连接器命令行加入以下命令"
下的编辑框上加上:
-g3
3)转到程序页,把gcc行修改为:gcc.exe
-d__debug__,
4)把g++行修改为:
g++.exe
-d__debug__
,
5)点击确定,重新编译,就能调试了。
1下载源码
2编译
CFLAGS=”-g
–O0”
CXX=gcc
CXXFLAGS=”-g
–O0
-felide-constructors
-fno-exceptions
-fno-rtti”
cmake
.
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_DEBUG=1
make
make
install
3eclipse编译配置
1)在eclipse中建立一个c++
empty
project。
2)选中上面建立的project,新建文件夹,引入代码。
3)设置编译源目录Build
directory,即cmake生成的Makefile所在的目录。
我采用的 *** 是将my.cnf配置文件放在了/etc下面,这样不需要在eclipse中设置mysql的运行参数
下面是注意的事项,我的eclipse使用baixyu这个帐号运行的,所以在调试的时候,my.cnf中配置的数据目录的属主要配置成baixyu而不是别的,否则在运行中总会提示没有权限的问题。下面是配置好的截图:
VC刚写好的程序,
你返回Debug目录的上级目录,源代码都在这里。
如果是别人写的程序的Debug版,你得找他要源代码。