Android2.3源码学习03 -- 编译源码

设置环境

在工作目录运行脚本:

$ 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;

参看

编译准备工作



—  我的个人空间 |   —