Android开发知识小集

Android源码阅读平台搭建(基于Android Studio

2018-11-27  本文已影响87人  凤凰花开那一天

阅读Android源码的方式一般有以下几种:
1.搭建Samba服务,在windows平台上利用source Insight工具阅读
2.在Linux上安装wine工具,然后再安装source Insight工具阅读

  1. win端利用Android Studio载入相应代码,利用SSH工具,同步修改代码。
  2. 在Linux上安装android studio,导入生成android.ipr,android.iml。
    这里,我们将使用第4种方案来搭建Android源码的阅读平台。

Step 1:首先,需要下载Android源码,并编译成功。

具体可以参考:


[ 99% 107/108] Install system fs image: out/target/product/generic/system.img
WARNING: out/target/product/generic/system.img+ approaching size limit (1610612736 now; limit 1610612736)
[100% 108/108] Create system-qemu.img
1+0 records in
2048+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0040105 s, 261 MB/s
1536+0 records in
1536+0 records out
1610612736 bytes (1.6 GB, 1.5 GiB) copied, 58.744 s, 27.4 MB/s
1048576+0 records in
1048576+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 1.52265 s, 689 kB/s
Creating new GPT entries.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Setting name!
partNum is 0
REALLY setting name!
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

#### build completed successfully (05:31 (mm:ss)) ####

编译完成后,在out/target/product/generic/目录下,将存在system.img,userdata.img和ramdisk.img等文件,如下所示。

akira@ubuntu:~/android/aosp/out/target/product/generic$ l
advancedFeatures.ini   hardware-qemu.ini               system/
android-info.txt       installed-files.json            system.img
build.avd/             installed-files.txt             system-qemu.img
build_fingerprint.txt  installed-files-vendor.json     system-qemu.img.qcow2
build_thumbprint.txt   installed-files-vendor.txt      userdata.img
cache/                 kernel-ranchu-64                userdata-qemu.img
cache.img              module-info.json                userdata-qemu.img.qcow2
cache.img.qcow2        obj/                            vbmeta.img
clean_steps.mk         previous_build_config.mk        vendor/
config.ini             product_copy_files_ignored.txt  vendor.img
data/                  ramdisk.img                     vendor-qemu.img
dex_bootjars/          recovery/                       vendor-qemu.img.qcow2
fake_packages/         root/                           version_num.cache
gen/                   symbols/

Step2: 编译idegen模块,生成Android Studio配置文件(*.ipr)

利用mmm指令编译idegen模块,mmm指令后跟着模块相对路径名,这是Android 源码平台环境初始化后的一个快捷命令。

mmm development/tools/idegen/

若没有查找到命令,需要先设置环境

. build/envsetup.sh
. lunch aosp_arm-eng

执行成功后,将生成目标jar文件:idegen.jar。


Step 3: 执行idegen.sh脚本,生成android.ipr,android.iml等工程配置文件。

该脚本需要在AOSP源码根目录下执行。

development/tools/idegen/idegen.sh 

执行完成后,将提示:

Read excludes: xxx ms
Traversed tree: xxxxxx ms 

这过程中,可能会出现Permission Denied的提示,这时候先中断脚本执行,找到提示目录,将读取目录权限添加到当前用户上,再继续编译。编译后生成的android.ipr和android.iml文件位于AOSP根目录下。

akira@ubuntu:~/android/aosp$ ls
Android.bp       bootstrap.bash  frameworks            out
android.iml      build           gen                   packages
android.iml.bak  compatibility   hardware              pdk
android.ipr      cts             hs_err_pid119705.log  platform_testing
android.ipr.bak  dalvik          hs_err_pid120447.log  prebuilts
android.iws      developers      hs_err_pid12568.log   sdk
aosp-latest.tar  development     kernel                system
art              device          libcore               test
bionic           download.sh     libnativehelper       toolchain
bootable         external        Makefile              tools

Step 4: 编辑android.iml,导入指定模块代码阅读。
Android Studio的代码导入操作需要建立索引等,代码量大的时候将非常慢。所以,一般不可能一次性将所有源码到导入进去,而是只导入感兴趣的源码模块。这需要修改android.iml文件。记得操作前先做个备份。
该文件有2个标签

<?xml version="1.0" encoding="UTF-8"?>
<module version="4" relativePaths="true" type="JAVA_MODULE">
  <component name="FacetManager">
    <facet type="android" name="Android">
      <configuration />
    </facet>
  </component>
  <component name="ModuleRootManager" />
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">      
<sourceFolder url="file://$MODULE_DIR$/./frameworks/base/core/java" isTestSource="false"/> 
<excludeFolder url="file://$MODULE_DIR$/./external/emma"/>
<excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/>
<excludeFolder url="file://$MODULE_DIR$/out/eclipse"/>
<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolder url="file://$MODULE_DIR$/external/chromium"/>
<excludeFolder url="file://$MODULE_DIR$/external/icu4c"/>
<excludeFolder url="file://$MODULE_DIR$/external/webkit"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/host"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/product"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilt"/>

    </content>
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="inheritedJdk" />
    <orderEntryProperties />
  </component>
</module>

而后使用android studio打开现有的工程,选择.ipr文件导入,而后将是漫长的等待时间....



代码可以搜索与正常跳转,但是也可以看到代码有些错误,aidl接口相关的代码会有问题,但不影响我们阅读。

上一篇下一篇

猜你喜欢

热点阅读