q666123 发表于 2018-5-5 09:45:57

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

  from:http://blog.csdn.net/yrnaaa/article/details/7745680
  废话少说,进入正题
  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.执行命令【 ./mksdcard4000M .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: *** 错误 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: *** 错误 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: *** 错误 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: *** 错误 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>  所需空间不足
  修改:emulator 加入参数 -partition-size 1024 (大于系统所要求的尺寸)即可,例如 emulator -partition-size 1024
参考:http://www.iyunv.com/os/201205/130064.html
页: [1]
查看完整版本: Ubuntu12.04 编译android源代码及生成模拟器经历分享