如果没整编过源码,可以直接执行如下命令单编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代码跳转了,方便阅读代码了。