android5.0 模块编译--art的模块编译小发现

Posted zero9988

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android5.0 模块编译--art的模块编译小发现相关的知识,希望对你有一定的参考价值。

讲道理,编译好安卓系统以后,进行模块修改,再重新mmm x模块 因该是一件特别快速的事情.


问题:

在编译android 5.0的art模块时发现存在两个问题:

1,无法进行单独的模块编译,且提示缺少各种各样的库.

2,能成功编译后,编译速度及其缓慢.


调查:

1,根据错误的信息可以发现都是形如 libgtest_host_intermediates 类似的文件夹中缺少库文件,和export_includes等文件.

2,编译慢,肯定是编译的东西多了,既然是编译上的问题,直接查看art目录下的android.mk文件,有众多test有关的语句,以及test相关的mk文件

include $(art_path)/build/Android.common_test.mk
include $(art_path)/build/Android.gtest.mk
include $(art_path)/test/Android.run-test.mk

对比,android5.x和android6.x版本的 art/Android.mk文件

可以发现
# test rules

# host test rules

# target test rules

等test相关的编译语句,

在仔细看android6.x中的Android.mk文件发现多了几行代码

# Don't bother with tests unless there is a test-art*, build-art*, or related target.
art_test_bother := false
ifneq (,$(filter %tests test-art% valgrind-test-art% build-art%,$(MAKECMDGOALS)))
  art_test_bother := true
endif


ifeq ($(art_test_bother),true)

...............

...............

endif  # art_test_bother


因此,我们可以发现,test部分的编译是可以取消,关闭的


猜测:

1,既然缺少文件,肯定是相关部分没有,那么可能是 第一次make时,没有去编译相关的和test有关的模块,这些模块最可能存在的就是external目录下了

2,编译慢,就是多编译了test有关的部分内容


解决:

1,根据提示查找external目录 libcore目录下的相关文件,然后先编译 这些test用到的相关模块,当相关模块都编译好后,就可以编译art模块了.

2,直接去掉

# test rules

# host test rules

# target test rules

这三块内容,然后编译即可.


以上是关于android5.0 模块编译--art的模块编译小发现的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 是不是 100% 兼容 Android 上的 ART?

笔记·Android体系与系统架构

android5.0源码编译错误小结

art-template引擎模板

art-template引擎模板

Android中的Dalvik和ART的区别