在下载编译android源码的过程中,将碰到的问题整理如下:
一.
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<:string8 android::sp> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error 1
解决办法:
引起此问题的大致原因是编译器是不识别某些nonconformance code,解决办法是在相应位置加上-fpermissive来屏蔽编译器对此类代码的排斥。
frameworks/base/tools/aapt/Android.mk
Add '-fpermissive' to line 31:
LOCAL_CFLAGS += -Wno-format-y2k -fpermissive
但是继续报错:cc1plus: warning: unrecognized command line option "-Wno-format-y2k-fpermissive"
解决办法:
这类错误是找不到所需要的库文件:cannot find -lxxxxx ,其中lxxxxx代表的是libxxxxx.so,引起的原因一般有两个方面:
a)由于.so是编译临时生成的文件,如果前面的文件编译出错,libxxxxx.so没有生成,就会报错。
b)由于本机环境所造成的:
1.系统缺乏对应的库文件-->下载相应的库文件,ubuntu一般通过命令apt-get install libxxxxx-dev来安装
2.版本不对应----------------->同上
3.库文件的链接错误-------->通过find或者locate指令定位到链接文件,查看链接文件是否正确的指向了我们希望的lib,如果不是,用 ln -sf */libxxx.so.x */libxxx.so 指令修改它。
4.库文件路径设置问题------>如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存
三.
host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
frameworks/base/tools/obbtool/Main.cpp:1:0: note: this is the location of the previous definition
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
解决办法:
原因是GCC版本太高,需要吧GCC版本修改为4.4.6
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
在ubuntu上将默认的GCC和G++版本改为4.4使用以下命令
1.sudo rm/usr/bin/gcc
2.sudo ln-s/usr/bin/gcc-4.4/usr/bin/gcc
四.
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] Error 1
解决办法:
因为GCC4.4版本在编译时不支持const char* 和char*的转换,在其它的GCC版本上应该都能编译过。具体解释http://gcc.gnu.org/gcc-4.4/porting_to.html
frameworks/base/media/libmedia/MediaScanner.cpp:84&90:
-char*
+const char*
五.
development/simulator/app/DeviceManager.cpp:8: fatal error: wx/wxprec.h: No such file or directory
compilation terminated.
development/simulator/app/DeviceWindow.cpp:8: fatal error: wx/wxprec.h: No such file or directorymake: *** [out/host/linux-x86/obj/EXECUTABLES/simulator_intermediates/DeviceManager.o] Error 1
ubuntu13.04无法支持libwxgkt2.6-dev 所以需要安装高版本的wx2.8
解决办法:
apt-file search wxprec.h
sudo apt-get install wx2.8
wx-config --cflags
六.同步内部环境
. build/envsetup.sh
lunch
Lunch menu... pick a combo:
1. generic-eng
2. simulator
3. full_passion-userdebug
4. full_crespo-userdebug
choose 2
make -j4