Ubuntu12.04 编译android源代码及生成模拟器经历分享

Ubuntu12.04 编译android源代码及生成模拟器经历分享


废话少说,进入正题

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>
#include <gtest/internal/gtest-internal.h>
#include <cstddef>

4.
/home/t/WORKING_DIRECTORY/external/llvm/lib/Support/Mutex.cpp:143: undefined reference to `pthread_mutex_trylock'
collect2: ld 返回 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/test-librsloader_intermediates/test-librsloader] 错误 1
make: *** 正在等待未完成的任务....
In file included from external/gtest/src/gtest-all.cc:38:0:

在external/llvm/llvm-host-build.mk中增加如下代码:
LOCAL_LDLIBS := -lpthread -ldl



5.
frameworks/compile/slang/slang_rs_export_foreach.cpp:247:23: 错误: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
host C++: llvm-rs-cc <= frameworks/compile/slang/slang_rs_reflection.cpp
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 错误 1

修改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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值