android基础TECH_ANDROID性能优化

把Android源码导入Android Studio进行调试

2017-03-06  本文已影响3375人  yotods

现在很多公司已经抛弃了单纯App开发的模式,慢慢的走向了源码编译;通过修改Framework层的东西,达到自己想要的需求,但是问题也来了,我们不能像往常一样,通过import/open来编辑编译它;正如刚开始的我,一直在用Sublime来编辑,make命令来编译,手动导包,手动查找Api,那简直是噩梦!
如题,直接进入正文!

说一下我用的环境:Ubuntu14.04、openjdk1.7、Android Studio2.2、Android6.0源码

这里先不说如何下载源码,直接从编译开始

$ source build/envsetup.sh
$ lunch aosp_flounder-userdebug(flounder:Nexus 9 flo Nexus 7二代 grouper Nexus 7一代)
$ make -j8 ( 8代表CPU核数 )

  1. 第一步,这行命令的意思是编译idegen这个项目,生成idegen.jar文件。
    $ mmm development/tools/idegen/
    如果你看到了绿色的 #### make completed successfully ####,说明这步是ok的。
  2. 第二步,这行命令的意思是生成:android.iws, android.ipr, android.iml这个三个文件。
    $ sh ./development/tools/idegen/idegen.sh
    如果你看到类似这样的字样:
    Read excludes: 4ms
    Traversed tree: 14572ms
    说明是ok的,!!!这三个文件在根目录!!!
    android.iws 包含工作区的个人设置,比如打开过的文件,版本控制工具的配置,本地修改历史,运行和debug的配置等。
    android.ipr 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等。
    android.iml 用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。

到了这里,就可以考虑导入到Android Studio中了。

打开Android Studio --> File --> open --> 选中生成的android.ipr文件,确定后就会导入整个源码。

导入之后,可以看到Android Studio下方,Indexing... 在以极慢的速度前进,So,为了加快读取速度,我们定义一些不需要读取的文件夹,比如 build、.repo、device、out 等等。

打开 android.iml 文件。

我们发现有2000~3000行,是非常多的,但是仔细的看,发现大标签只有三种
<sourceFolder />
<excludeFolder />
<orderEntry />

  1. 关于<sourceFolder>标签:
    去除不需要debug的<sourceFolder/>标签内容,通常我们只需要frameworks和packages两个目录,所以保留这两个目录有关的标签就行,其他全部删掉,这样索引的速度就会加快了。
  2. 关于<excludeFolder>标签:
    exclude顾名思义就是不包含的意思。我们有很多目录直接就不想让Studio去管它,不管是索引还是什么等等,所以只需要将这些目录配置到<excludeFolder>中就好了。

** 我这里只保留了framworks和packages模块,将其他模块全部排除了,因此在android.iml中添加了以下配置: 剩下的都删了**

<?xml version="1.0" encoding="UTF-8"?>
<module version="4" relativePaths="true" type="JAVA_MODULE">
  <component name="ModuleRootManager" />
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <!--sourceFolder标签表示需要索引的代码目录-->
      <sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
      <!--excludeFolder标签表示这个目录下所有内容都不索引-->
      <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$/external/bluetooth" />
      <excludeFolder url="file://$MODULE_DIR$/external/chromium" />
      <excludeFolder url="file://$MODULE_DIR$/external/emma" />
      <excludeFolder url="file://$MODULE_DIR$/external/icu4c" />
      <excludeFolder url="file://$MODULE_DIR$/external/jdiff" />
      <excludeFolder url="file://$MODULE_DIR$/external/webkit" />
      <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
      <excludeFolder url="file://$MODULE_DIR$/frameworks/base/tests" />
      <excludeFolder url="file://$MODULE_DIR$/frameworks/base/tools" />
      <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$/platform_testing" />
      <excludeFolder url="file://$MODULE_DIR$/prebuilt" />
      <excludeFolder url="file://$MODULE_DIR$/sdk" />
      <excludeFolder url="file://$MODULE_DIR$/tools" />
      <excludeFolder url="file://$MODULE_DIR$/vendor" />
      <excludeFolder url="file://$MODULE_DIR$/toolchain" />
      <excludeFolder url="file://$MODULE_DIR$/system" />
      <excludeFolder url="file://$MODULE_DIR$/prebuilts" />
      <excludeFolder url="file://$MODULE_DIR$/phoenix" />
    </content>
    
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="inheritedJdk" />
    <orderEntryProperties />
  </component>
</module>

接下来就可以看源码了,而且没有报错,但是没有关联跳转,接下来我们解决这个问题。

修改JDK + SDK

** 如图:我编译的版本是Android6.0,所以用JDK1.7编译,这里默认1.8,所以要换成1.7,删除多余的SDK **

jdk1.8换1.7 - 1

选中ClassPath下所有的内容删除(-号)


jdk1.8换1.7 - 2

修改名称,修改路径


jdk1.8换1.7 - 3

完成

jdk1.8换1.7 - 4

** 修改SDK **
如果这一栏有多余的内容,删除它,保留如图的2个就可以了。


修改SDK-1

这个地方,修改位对应的sdk就可以了!


修改SDK-2

然后就可以痛痛快快的搞源码了!

END##

上一篇下一篇

猜你喜欢

热点阅读