废话少说,进入正题
1. 下载源代码。
2. 启动终端,进入android工作目录。
3. 编译手机,make -jN编译,N代表数字,我的cpu是i5,我用的是make -j4,期间出现很多错,下面会一一介绍。
4. 编译模拟器,make sdk -j2。网上抄来的命令,我没改成j4试验。网上说大概30分钟,我这大概编译了1个多小时,期间电脑特卡,基本什么都干不了。
【 source build/envsetup.sh】
【lunch sdk-eng】
【make sdk -j2】
5. 进入out/host/linux-x86/sdk/android-sdk_eng.t_linux-x86/tools$这个目录。
6. 输入【./android list targets】可以察看sdk版本号。
7. 创建avd,【 ./android create avd -n mydroid -t 1】。
8. 执行命令【 ./mksdcard 4000M .img】
9. 运行模拟器【 ./emulator -avd mydroid】。
下面说一下编译android源码错误解决方法:
1. 命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror]
修改 build/core/combo/HOST_linux-x86.mk文件的line 56
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
改为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
2.
In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 错误 1
修改external/oprofile/libpp/format_output.h:94行
mutable counts_t & counts;
改为:
counts_t & counts;
3.
external/gtest/src/../include/gtest/internal/gtest-param-util.h:122:11: 错误: ‘ptrdiff_t’不是一个类型名
In file included from external/gtest/src/../include/gtest/gtest-param-test.h:157:0,
from external/gtest/src/../include/gtest/gtest.h:69,
from external/gtest/src/gtest_main.cc:32:
修改文件external/gtest/include/gtest/internal/gtest-param-util.h中添加#include <cstddef>, 位置如下:
#include <gtest/internal/gtest-linked_ptr.h>修改frameworks/compile/slang/Android.mk文件:
#local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
参考于:
http://blog.csdn.net/zhbpd/article/details/7680835
http://blog.csdn.net/forlong401/article/details/7066893
6.
cts/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java:191: android.app.Activity 中的 onCreateDialog(int,android.os.Bundle) 无法实现 com.android.cts.verifier.PassFailButtons.PassFailActivity 中的 onCreateDialog(int,android.os.Bundle);正在尝试指定更低的访问权限;为 public
private static <T extends android.app.Activity & PassFailActivity>
^
1 错误
make: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar] 错误 41
make: *** 正在等待未完成的任务....
DroidDoc took 2702 sec. to write docs to out/target/common/docs/doc-comment-check
修改cts/Android.mk文件,去掉两行include代码。
#include cts/CtsTestCoverage.mk
#include $(call all-subdir-makefiles)
7. 如果按照google网站的说明下载,编译,解决完上面6个错误就可以编译完成了。我的配置是:
ubuntu12.04
android 4.0.3
如果您和我的配置一样,又想一次编译成功,就直接按上面说的修改这6出文件,make就等着结果吧!
8. 运行 emulator 提示 emulator: WARNING: system partition size adjusted to match image file (166 MB > 66 MB)
所需空间不足
修改:emulator 加入参数 -partition-size 1024 (大于系统所要求的尺寸)即可,例如 emulator -partition-size 1024
参考:http://www.2cto.com/os/201205/130064.html