fedroa16 编译android 4.0.1

1. JDK 6

 这个需要到sun的网站下载一个安装即可: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

  下载完之后chmod再运行安装

2. 最新的android源码要求make的版本为3.81, make3.82的版本貌似有些兼容性的问题,试了下需要做些手脚才能顺利地downgrade回旧的版本

运行命令

  1. sudo yum downgrade make --releasever=13  

结果出现错误提示
  1. ====================================================================================================================================================  
  2.  Package                         Arch                            Version                                   Repository                          Size  
  3. ===================================================================================================================================================  
  4. Downgrading:  
  5.  make                            i686                            1:3.81-19.fc13                            updates                            385 k  
  6.   
  7. Transaction Summary  
  8. ====================================================================================================================================================  
  9. Downgrade     1 Package  
  10.   
  11. Total size: 385 k  
  12. Is this ok [y/N]: y  
  13. Downloading Packages:  
  14. warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID e8e40fde: NOKEY  
  15. Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-i386  
  16.   
  17.   
  18. The GPG keys listed for the "Fedora 13 - i386 - Updates" repository are already installed but they are not correct for this package.  
  19. Check that the correct key URLs are configured for this repository.  

这是因为gpg key是fedora16版本的,降级回13的话需要用到13的key,上网搜索了下找到了之后放到/etc/pki/rpm-gpg/覆盖RPM-GPG-KEY-fedora-i386之后再重新运行上面的命令即可(记得备份原文件,降级完成后要把文件还原的,要不然系统升级会有问题)。


最后为了防止系统每次自动把make更新回3.82,我们在/etc/yum.conf里再添加一行来过滤掉make的自动升级

  1. exclude=make  


3. 缺失的系统工具

 我的fedora16安装的时候选择的是softwaredevelopment的配置安装的,编译的时候出错需要安装的工具包括

  1. sudo yum install gperf  

4. 编译过程中的错误

a) perl错误

  1. Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
  2. BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
  3. make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2  
  4. make: *** Waiting for unfinished jobs....  
  5. target Generated: libwebcore <= external/webkit/Source/WebCore/platform/ColorData.gperf  
  6. Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
  7. BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
  8. make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error 2  
  9. target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in  
这个错误是由于fedora16中新的perl版本将switch的module拿掉了,需要修改webkit的源码来编译通过:
  1. 进入external/webkit的目录,打下面的patch  
  1. diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl  
  2. index 37639eb..2968beb 100644  
  3. --- a/Source/WebCore/make-hash-tools.pl  
  4. +++ b/Source/WebCore/make-hash-tools.pl  
  5. @@ -20,7 +20,8 @@  
  6.  #   Boston, MA 02110-1301, USA.  
  7.    
  8.  use strict;  
  9. -use Switch;  
  10. +# use Switch;  
  11. +use feature qw(switch);  
  12.  use File::Basename;  
  13.    
  14.  my $outdir = $ARGV[0];  
  15. @@ -28,9 +29,9 @@ shift;  
  16.  my $option = basename($ARGV[0],".gperf");  
  17.    
  18.    
  19. -switch ($option) {  
  20. +given ($option) {  
  21.    
  22. -case "DocTypeStrings" {  
  23. +when ("DocTypeStrings") {  
  24.    
  25.      my $docTypeStringsGenerated    = "$outdir/DocTypeStrings.cpp";  
  26.      my $docTypeStringsGperf        = $ARGV[0];  
  27. @@ -40,7 +41,7 @@ case "DocTypeStrings" {  
  28.    
  29.  } # case "DocTypeStrings"  
  30.    
  31. -case "ColorData" {  
  32. +when ("ColorData") {  
  33.    
  34.      my $colorDataGenerated         = "$outdir/ColorData.cpp";  
  35.      my $colorDataGperf             = $ARGV[0];  

b) mutable错误

  1. external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]  

解决方法:

external/oprofile里打patch或者自己手动修改文件

  1. diff --git a/libpp/format_output.h b/libpp/format_output.h  
  2. index b6c4592..4efdbb1 100644  
  3. --- a/libpp/format_output.h  
  4. +++ b/libpp/format_output.h  
  5. @@ -91,7 +91,8 @@ protected:  
  6.                 symbol_entry const & symbol;  
  7.                 sample_entry const & sample;  
  8.                 size_t pclass;  
  9. -               mutable counts_t & counts;  
  10. +//             mutable counts_t & counts;  
  11. +               counts_t & counts;  
  12.                 extra_images const & extra;  
  13.                 double diff;  
  14.         };  

c) gtest错误

  1. external/gtest/src/../include/gtest/internal/gtest-param-util.h:122:11: error: ‘ptrdiff_t’ does not name a type  
解决:

external/gtest里打patch或者自己手动修改

  1. diff --git a/include/gtest/internal/gtest-param-util.h b/include/gtest/internal/gtest-param-util.h  
  2. index 5559ab4..b964c45 100644  
  3. --- a/include/gtest/internal/gtest-param-util.h  
  4. +++ b/include/gtest/internal/gtest-param-util.h  
  5. @@ -37,6 +37,7 @@  
  6.  #include <iterator>  
  7.  #include <utility>  
  8.  #include <vector>  
  9. +#include <cstddef>   
  10.    
  11.  #include <gtest/internal/gtest-port.h>  
  12.    

d) werror错误

  1. frameworks/compile/slang/slang_rs_export_foreach.cpp:247:23: error: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]  


解决:

进frameworks/compile/slang打patch或者手动修改

  1. diff --git a/Android.mk b/Android.mk  
  2. index fce3637..aff5b7d 100644  
  3. --- a/Android.mk  
  4. +++ b/Android.mk  
  5. @@ -19,7 +19,8 @@ ifeq ($(TARGET_BUILD_APPS),)  
  6.    
  7.  LOCAL_PATH := $(call my-dir)  
  8.    
  9. -local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror  
  10. +#local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror  
  11. +local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter  
  12.  ifneq ($(TARGET_BUILD_VARIANT),eng)  
  13.  local_cflags_for_slang += -D__DISABLE_ASSERTS  
  14.  endif  


e) libx11错误

  1. /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o: undefined reference to symbol 'XInitThreads'  


解决:

进development打patch或者手动修改

  1. diff --git a/tools/emulator/opengl/host/renderer/Android.mk b/tools/emulator/opengl/host/renderer/Android.mk  
  2. index 55fcb80..5e4d0bb 100644  
  3. --- a/tools/emulator/opengl/host/renderer/Android.mk  
  4. +++ b/tools/emulator/opengl/host/renderer/Android.mk  
  5. @@ -5,6 +5,7 @@ $(call emugl-begin-host-executable,emulator_renderer)  
  6.  $(call emugl-import,libOpenglRender)  
  7.  LOCAL_SRC_FILES :main.cpp  
  8.  LOCAL_CFLAGS    += -O0 -g  
  9. +LOCAL_LDLIBS += -lX11  
  10.    
  11.  #ifeq ($(HOST_OS),windows)  
  12.  #LOCAL_LDLIBS += -lws2_32  

你可能感兴趣的:(android,perl,Build,webkit,reference,patch)