笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述如何使用Android Studio开发/调试Android源码相关的知识,希望能为你提供帮助。
环境: Ubuntu 14.10,openJdk 1.7,android Studio 3.0.0,android-5.1.1_r1源码
生成android项目工程:
先编译源码
mmm development/tools/idegen/
development/tools/idegen/idegen.sh
依次执行完上面的命令,就会在系统根目录下生成如下文件
.classpath (Eclipse)
android.ipr (IntelliJ / Android Studio)
android.iml (IntelliJ / Android Studio)
一、修改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="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),具体内容如下图:
文章图片
四、解决源码中跳转错误问题
①为当前工程设置正确的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标签页中即可.
五、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)。
【如何使用Android Studio开发/调试Android源码】也可以考虑使用build.gradle来解决该问题。
推荐阅读
- AndroidStudio编译error:app:validateReleaseSigning'Keystore file not found for signing config '
- whatsapp怎么注册 whatsapp注册教程
- 关于android版本spice协议tls端口链接方式的bug问题
- 让你的app体验更丝滑的11种方法!冲击手机应用榜单Top3指日可待
- mapper文件中“添加一条新数据并返回此数据的ID(主键)”的方法
- appium常用api
- Struts 2模型驱动拦截器示例图解
- Struts 2异常处理-异常拦截器
- Struts 2 execAndWait拦截器示例图解