将Android源代码导入Intellij IDEA

将Android源代码导入Intellij IDEA

(本文内容同样适用于Google新推出的Android Studio

以前开发Android一直用的是Eclipse。虽然从很多方面来讲,Eclipse都是一款不错的IDE,对java、Android以及其他一些开发需求的支持上都很好,但巨大的资源占用,缓慢的启动过程(特别是加载Android相关插件和sdk),时不时的crash一下,很难让人对其产生好感。直到后来了解并试用了Intellij IDEA,才不得不感概:这才是我要找的IDE。难怪网上都称之为“神器”。IDEA的社区版(也就是CE)版是免费的,基本上日常开发的功能都有。最新的版本是13,虽然以前的版本对Android对支持不是很完善(毕竟不是google官方支持的),但最新的版本已经很不错了,和Eclipse比起来有过之而无不及,开发调试都没有问题。

之前用Eclipse的时候,会把Android源代码也导入到里面,有Android源代码在手,对开发、调试都有很大的帮助。Eclipse导入Android源代码很方便,一个重要原因在于Android源代码里提供了Eclipse的.classpath文件(位置在$Android_SRC/development/ide/Eclipse/.classpath),把大部分Android的java代码都放进去了。不过IDEA就没这么幸运了,Android没提供idea的相关配置,虽然有个intellij的文件夹,但里面的东西似乎没有用,而很久没更新过了。所以若想把Android代码导入IDEA,似乎只能手工操作,太麻烦了,而且也不符合我们coder“用code来解决问题”的理念。

所以我分析了一下IDEA的module文件(module相当于一个project里的sub project),发现虽然和.classpath格式不同的,但大部分需要的信息在.classpath里都能找到,所以完全可以将.classpath文件转成IDEA需要的iml文件。

这件事,一个XSLT就可以搞定。

XSLT文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
      <module type="JAVA_MODULE" version="4">
          <component name="NewModuleRootManager" inherit-compiler-output="true">
              <exclude-output/>
              <content url="file://$MODULE_DIR$">
                  <xsl:apply-templates select="classpath/classpathentry" />
              </content>
              <orderEntry type="inheritedJdk"/>
              <orderEntry type="sourceFolder" forTests="false"/>
          </component>
      </module>
  </xsl:template>

  <xsl:template match="classpathentry">
      <sourceFolder url="file://$MODULE_DIR$/{@path}" isTestSource="false"/>
  </xsl:template>
</xsl:transform>

导入步骤

有了上面的xslt,把Android源代码导入IDEA就很容易了

  1. 找一个支持xslt转换的工具(很多,如果嫌麻烦可以用我写的这个简单的python脚本
  2. 用上面的xslt将Android的.classpath文件($Android_SRC/development/ide/Eclipse/.classpath)转成iml文件,再将生成的文件保存到Android源代码到根目录(一定得是根目录,文件名字可以随便取,只要扩展名是.iml就可以)
  3. 在IDEA里,通过”import moudle”将刚才保存的.iml文件导入到进去,就可以在IDEA看到Android的Java代码了(见下图)

import android source into idea

导入以后,无论是直接查看代码还是调试跟入,都没有问题

附Python XSLT转换脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python

import lxml.etree as et
import sys

USAGE = sys.argv[0] + " <template> <doc>"

if len(sys.argv) < 3:
    print USAGE
    sys.exit(-1)

template_path = sys.argv[1]
doc_path = sys.argv[2]

template_dom = et.parse(template_path)
doc_dom = et.parse(doc_path)

transform = et.XSLT(template_dom)
transfomed_dom = transform(doc_dom)

print(et.tostring(transfomed_dom, pretty_print=True))
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值