Framework编译并使用Android studio阅读源码指导

本文详细介绍了如何在AndroidStudio中编译idegen模块,包括设置文件权限、排除不必要的源码目录、调整inotify配置以及处理编译过程中遇到的问题,最终实现成功编译和启动模拟器的过程。
摘要由CSDN通过智能技术生成

如果没整编过源码,可以直接执行如下命令单编idegen模块:

source build/envsetup.sh

make idegen

如下截图:

如上截图可以看出,idegen模块编译成功

idegen模块编译成功后,会在 out/host/linux-x86/framework目录下生成idegen.jar

执行如下命令:

sudo development/tools/idegen/idegen.sh

这时会在源码根目录生成android.iml 和 android.ipr 两个文件,这两个文件一般是只读模式,这里建议改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况。如下截图:

sudo chmod 777 android.iml

sudo chmod 777 android.ipr

执行之后,如下截图,android.iml 和 android.ipr已经设置可读可写了。 

由于要将所有源码导入AS会导致第一次加载很慢,可以在android.iml中修改excludeFolder配置,将不需要看的源码排除掉。

在android.iml中搜索excludeFolder,在下面加入这些配置。

<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$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />

如下截图:

Exclude不需要的代码目录

File -> Project Structure -> Modules中可以通过Excluded来筛选代码目录,比如我们选择bionic目录,点击Excluded,bionic目录会变为橙色,bionic字段会出现在右侧视图中,说明该目录已经被Excluded掉,通俗来讲就是被排除在工程之外。如果不希望bionic目录被Excluded掉,再次点击Excluded,bionic目录会变为灰色。如下截图:

从源码目录可以看出,部分目录会变为橙色说明该目录已经被Excluded掉,通俗来讲就是被排除在工程之外。 

Build framework源码之后会发现类名出现橘黄色J的警告并提示如下提示: 

打开terminal,检查当前配置。

cat /proc/sys/fs/inotify/max_user_watches

65536

当前值太小,需要修改 /etc/sysctl.conf 文件,修改这个文件需要Root权限。

第一步:在 /etc/sysctl.conf 文件的最后添加一行代码

1.使用 vim 编辑
vim /etc/sysctl.conf 

2.最后一行添加代码
fs.inotify.max_user_watches = 524288 

3.该文件是只读文件,保存到只读文件
:w !sudo tee % 

4.会提示一个警告,大致是说 文件 /etc/sysctl.conf 已变动,并且在 Vim 中的缓冲区也已变动,确定([O]), 加载文件((L)),按 [O] ,之后按 [Enter],完成修改。

5.最后退出 vim,由于是只读文件,使用强制退出:
:q!

第二步:运行此命令将刚才的修改生效
sudo sysctl -p

第三步:重启 Android Studio

源码整编

source build/envsetup.sh

lunch

使用make -j8执行编译。

编译过程当中可能会出现编译不通过,如下几个问题进行应对:

执行make update-api命令:

需要安装m4、gperf

命令如下:

sudo apt-get install m4

sudo apt install gperf

再次执行make update-api命令,结果如下图:

如果执行make -j8命令后仍然出现如下编译问题:

首先安装apt-file

sudo apt-get install apt-file

安装完成后,可能需要提示更新。

执行sudo apt-file update命令

使用sudo apt-file search命令查找库所在的包,安装对应的包。

通过上面可以看到,libncurses.so对应的是lib32ncurses-dev。需要执行如下命令进行安装:

sudo apt-get install lib32ncurses-dev

继续执行如下make -j8进行编译仍然出现编译问题,如下截图:

继续通过apt-file search命令查找库所在的包,安装对应的包,后续就不继续截图了。

经过漫长等待,编译后可能出现如下情况:

若出现上述错误,需要切换python2.7。

1).查看ubuntu下的所有python版本

ls /usr/bin/python*

2)切换python版本

sudo update-alternatives --config python

如下截图:

 上图可看出,已切换到phthon相应的版本,再次执行make -j12如下图:

上述提示build completed successfully,说明编译成功。

编译成功后,执行emulator命令启动模拟器,执行后可能出现如下情况:

问题:

在window系统下,用VMware搭建ubuntu系统,在ubuntu系统搭建安卓emulator,启动emulator时报错如上截图。

解决方法:

  1. 关闭ubuntu系统;
  2. VMware右击ubuntu虚拟机名字,选择设置;
  3. 虚拟机设置界面选择【硬件】下的【处理器】,勾选虚拟化引擎下的【虚拟化Intel VT-x/EPT或者AMD-V/RVI(V)】,点击确定;
  4. 重启ubuntu系统。

 

继续emulator命令启动模拟器,如下图: 

emulator模拟器正式启动。

 如上述,类名没有出现橘黄黄色J的警告了,可以正式阅读源码了,和普通项目一样,可以进行Java代码跳转了,方便阅读代码了。 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值