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

本文是以源码中development/tools/idegen/README做为指导文档.java

环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码linux

因为AS是基于IntelliJ IDEA开发的,因此本文也适用于IntelliJ IDEAandroid

 

1、修改Android Studio(如下简称AS)的内存配置ide

由于在导入源码时须要消耗大量内存,因此先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)-Xms-Xmx的值。文档中使用的是748m, 可自行修改。gradle

 2、配置AS的JDK、SDKui

IDE中添加一个没有classpathJDK, 这样能够确保使用源码里的库文件url

 

并将其做为要使用的SDK的Java SDK。以下图spa

3、生成导入AS所需配置文件(*.ipr)debug

①编译源码(为了确保生成了.java文件,如R.java;若是编译过,则无需再次编译)3d

②检查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="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />

删除掉全部不须要的module-library项 PS:感谢 @dezng 的建议

这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处理速度就会越快.

④在AS中打开源码根目录下新生成的android.ipr

若是在导入时AS出现

 则建议按照其给定的解决方法来解决(网址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit),具体内容以下图:

4、解决源码中跳转错误问题

①为当前工程设置正确的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和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。

其它版本的代码在添加frameworks时可能会显示成:

没有关系,只是显示问题,点击OK仍是会把frameworks路径添加进去的.

若是还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中便可.

5、DEBUG源码

咱们能够经过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它做为一个Android工程,从而方便咱们调试代码.

能够按照上图中'1'和'2'来添加Android Framework支持.

在代码中加断点,而后选择'Run'->'Attach debugger to Android process'或者直接点击下图所示的图标

在弹出的选择进程(Choose Process)对话框中,勾选显示全部进程,选择要DEBUG的代码所在的进程,点击OK便可.

6、其它

代码中不少地方提示Call requires API Level x.... 出现这个问题是由于AS将咱们的工程当作安卓应用程序工程了,且源码中没有指定minSdkVersion.

咱们只需在源码根目录加一个声明minSdkVersionAndroidManifest.xml文件便可(分享了一个AndroidManifest.xml)。

也能够考虑使用build.gradle来解决该问题。

 

文中所使用的文件地址:http://yunpan.cn/cf3MBa2688eBw (提取码: 64e5)

相关文章
相关标签/搜索