设置环境
在工作目录运行脚本:
$ cd $WORKING_DIRECTORY
$ source build/envsetup.sh
# 或
$ . buuid/envsetup.sh
选择构建目标
使用lunch
命令选择构建目标,例如,构建开启调试功能的模拟器使用版本,使用命令:
$ lunch generic-eng
也可以运行:
$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. generic-eng
2. simulator
3. full_passion-userdebug
4. full_crespo4g-userdebug
5. full_crespo-userdebug
Which would you like? [generic-eng]
然后根据提示选择构建目标,这里选择:1. generic-eng
构建目标参数格式为:BUILD-BUILDTYPE
。其中,BUILDTYPE
有以下三种类型:
编译类型 | 使用场景 |
---|---|
user | 访问受限版本,适用于生产环境 |
userdebug | 类似 user,开启调试功能,拥有 root 权限 |
eng | 开发版本,提供额外的调试工具 |
BUILD
是一个代号,指定了构建目标所包含的特性,一般一个代号对应一个机型,譬如Pixel XL
机型的构建代号为marlin
,那么构建Pixel XL
上的调试版本,配置命令如下:
$ lunch aosp_marlin-userdebug
更多代号参看:运行版本
构建代码
构建命令:
$ make -j4
-jN
选项用来设置构建使用的线程数,一般在硬件支持的线程数量的一到两倍之间,譬如:2cpu/4核/2线程的配置,可以采用-j16
到-j32
之间的设置。
编译中遇到的问题
编译的过程中遇到以下错误提示:
target thumb C++: libmedia <= frameworks/base/media/libmedia/MediaScanner.cpp
frameworks/base/media/libmedia/MediaScanner.cpp: In function ‘bool android::fileMatchesExtension(const char*, const char*)’:
frameworks/base/media/libmedia/MediaScanner.cpp:84: error: invalid conversion from ‘const char*’ to ‘char*’
frameworks/base/media/libmedia/MediaScanner.cpp:90: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [out/debug/host/linux-x86/pr/sim/obj/SHARED_LIBRARIES/libmedia_intermediates/MediaScanner.o] 错误 1
解决的办法,修改frameworkd/base/media/libmedia/MediaScanner.cpp
中的两行,将两处char*
替换为const char*
:
frameworks/base$ git diff media/libmedia/MediaScanner.cpp
diff --git a/media/libmedia/MediaScanner.cpp b/media/libmedia/MediaScanner.cpp
index 6f581d3..c5112a5 100644
--- a/media/libmedia/MediaScanner.cpp
+++ b/media/libmedia/MediaScanner.cpp
@@ -81,13 +81,13 @@ status_t MediaScanner::processDirectory(
}
static bool fileMatchesExtension(const char* path, const char* extensions) {
- char* extension = strrchr(path, '.');
+ const char* extension = strrchr(path, '.');
if (!extension) return false;
++extension; // skip the dot
if (extension[0] == 0) return false;
while (extensions[0]) {
- char* comma = strchr(extensions, ',');
+ const char* comma = strchr(extensions, ',');
size_t length = (comma ? comma - extensions : strlen(extensions));
if (length == strlen(extension) && strncasecmp(extension, extensions, l
extensions += length;