Ubuntu14.04 32bit编译Android2.3.4源码全过程记录
来源:互联网 发布:高仿耐克鞋淘宝店 编辑:程序博客网 时间:2024/05/16 18:03
在Ubuntu 14.04 32bit麒麟版上编译Android2.3.4源码全过程
真正地体会到:编译真是个苦力活,耗费一天的时间,终于将android2.3.4源码编译成功!为此将此过程中遇到的问题详细记录如下,特供大家参考!
环境:Android2.3.4源码+Ubuntu14.04 32 位+jdk1.6(现在官网上要注册才能下载,为此将jdk安装包贡献给大家)
源码和jdk请见附件,有需要的可以自行下载!
本人以root权限登录的,所以涉及到权限的问题,命令前面无须添加sudo。
问题列表:
PS:android源码编译需要Ubuntu 64bit环境,因此需要修改,方法很简单,在此不啰嗦了,请google即可。
[1] 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]
ssize_t i = indexOfKey(key);
cc1plus: warning: unrecognized command line option "-Wno-format-y2k-fpermissive" [enabled by default]
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] 错误 1
Fix:
frameworks/base/tools/aapt/Android.mk
在第31行后面增加一行:
LOCAL_CFLAGS += -fpermissive
[2] /bin/bash: flex: 未找到命令
缺什么命令,就添加什么命令!
Fix :apt-get install flex
[3] build/tools/merge-event-log-tags.py 权限不够
chmod 777 build/tools/merge-event-log-tags.py
[4] Error:
external/srec/tools/thirdparty/OpenFst/fst/lib/cache.h:136:11: note: use ‘this->SetState’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] Error 1
Fix:
cd external/srec
wget "https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"
patch -p1 < 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
rm -f 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
cd ../..
[5] /usr/bin/ld: cannot find -lncurses
host Executable: adb (out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb)
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1
解决方法:sudo apt-get install libncurses5-dev
[6] 错误1:out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o
解决方法:
vm/native/dalvik_system_Zygote.c
#include "Dalvik.h"
#include "native/InternalNativePriv.h"
下面加上一行:
#include <sys/resource.h>
[7] arm-eabi-gcc: error trying to exec 'cc1': execvp: No such file or directorymake: *** [out/target/product/generic/obj/lib/crtbegin_dynamic.o] 错误 1
Fix:gcc g++版本过高,应该都降级为4.4才行
$sudo apt-get install g++-4.4
$sudo apt-get install g++-4.4-multilib
$sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 40
$sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 60
$sudo update-alternatives --config g++
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/g++-4.6 60 auto mode
1 /usr/bin/g++-4.4 40 manual mode
2 /usr/bin/g++-4.6 60 manual mode
选择1.
如果想改为高版本的随时用update-alternatives --config 命令切换!
修改后第一次编译仍然存在错误,第二次编译就没有错误了,具体原因我也不清楚。
[8] 没有规则可以创建“out/target/product/generic/obj/SHARED_LIBRARIES/libcameraservice_intermediates/LINKED/libcameraservice.so”需要的目标“out/target/product/generic/obj/lib/libcamera.so”。 停止
修改/home/Android-2.3.4/frameworks/base/services/camera/Android.mk
LOCAL_PATH:= $(call my-dir)
# Set USE_CAMERA_STUB if you don't want to use the hardware camera.
# force these builds to use camera stub only
ifneq ($(filter sooner generic sim,$(TARGET_DEVICE)),)
USE_CAMERA_STUB:=true
endif
USE_CAMERA_STUB:=true
ifeq ($(USE_CAMERA_STUB),)
USE_CAMERA_STUB:=true
endif
[9] sh: 1: gperf: not foundcalling gperf failed: 32512 at ./makeprop.pl line 96.
Fix:apt-get install gperf
[10] out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/HTMLNames.h
Fix:sudo apt-get install libswitch-perl
[11] out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/BufferQueue_test.o
Fix:
其实是读取错文件了,你把正确文件拷贝过去就ok了
# cp system/media/opensles/libopensles/OpenSLESUT.h system/media/opensles/include/SLES/OpenSLESUT.h
[12] target Executable: BufferQueue_test (out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test)
out/target/product/generic/obj/lib/libOpenSLES.so: undefined reference to `typeinfo for android::SortedVectorImpl'
out/target/product/generic/obj/lib/libOpenSLES.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
collect2: ld returned 1 exit status
make: *** [out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] 错误
Fix:change system/media/opensles/libopensles/IAndroidEffect.c to IAndroidEffect.cpp
$mv IAndroidEffect.c IAndroidEffect.cpp
Android.mk change IandroidEffect.c to IAndroidEffect.cpp
Generated: (out/target/product/generic/android-info.txt)
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt
执行make sdk 将编译后的代码打包成sdk
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86.zip
运行android模拟器
过程虽然简单,但是遇到各种问题,也花了将近2个小时,不过最后还是成功了!
我执行了如下的代码
首先配置环境变量:
gedit /etc/profile
export ANDROID_BUILD_TOP=/home/Android-2.3.4/
export ANDROID_PRODUCT_OUT=/home/Android-2.3.4/out/target/product/generic
export ANDROID_PRODUCT_OUT_BIN=/home/Android-2.3.4/out/host/linux-x86/bin
export PATH=$PATH:/home/Android-2.3.4/out/host/linux-x86/
source /etc/profile
启动模拟器:
由于模拟器的默认kernel路径有问题,所以需要加上正确的kernel路径才能成功启动。
root@user:/home/Android-2.3.4# emulator
emulator: ERROR: bad workspace: cannot find prebuilt kernel in: /home/Android-2.3.4//prebuilts/qemu-kernel/arm/kernel-qemu
root@user:/home/Android-2.3.4# emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu
- Ubuntu14.04 32bit编译Android2.3.4源码全过程记录
- ubuntu14.04-64编译android2.3.4源码
- 在Ubuntu10.04下编译android2.3.7源码全过程
- Android2.3源码下载编译全过程
- Android2.3源码下载编译全过程
- VM Ubuntu14.04 64位 编译Android2.3.5源码
- Ubuntu14.04 64位编译Android2.3源码
- 【Android源码】Ubuntu14.04编译Android2.2.1详细过程
- Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
- ubuntu14.04 32bit下编译protobuf-2.6.0
- Ubuntu10.04系统 32位机上安装编译Android2.3源码
- Ubuntu10.04系统 32位机上安装编译Android2.3源码
- Android2.3.4内核编译完整记录
- Ubuntu10.04 32bit Compile Android2.2
- Android2.3在Ubuntu9.10(32bit)上的编译
- ubuntu11.10 32bit 下android2.3 编译环境配置
- ubuntu11.10 32bit 下android2.3 源码下载
- ubuntu11.10 32bit 下android2.3 源码下载
- Probability Through Experiments
- Android中资源文件夹res/raw和assets的使用
- svn status 返回值详解
- 提高程序运行效率的10个简单方法
- hdoj.2083 简易版之最短距离 20140801
- Ubuntu14.04 32bit编译Android2.3.4源码全过程记录
- 指针的应用
- Android事件处理(章节摘要)
- 设置VS2010中自带的ActiveX控件测试容器TstCon
- 递归实现strlen函数
- hdu 1058 Humble Numbers dp基础
- HDU 2041 超级楼梯【递推】
- 蛇形填数
- [HDOJ 4896] Minimal Spanning Tree [最小生成树]