Fedora16_x64编译Android4.0.3源码
2012-02-06 06:46 onm 阅读(322) 评论(0) 编辑 收藏 举报这个勉强算是How,但是我无法准确的说出Fedora16编译Android4.0.3源码的整个过程,按步骤一步一步的该怎么做,因为我的编译过程是跌跌撞撞的,并且一些细节我可能现在写的时候也忽略甚至遗忘,我只是想分享编译Anrdoid源码过程中遇到的一些问题的解答,官方给出的编译流程对于Linux是针对Ubuntu发行版的,Fedora细节上有一些不同,以下内容大多并非原创,只是摘自网络,大多来自android-building group,更多问题或许可以在那找到答案。
准备工作,在编译源码之前,建议还是到andriod open source project上去看看,那里可以了解到一些基本的知识,尽管实践起来Fedora的一些细节可能不同,但是对于一些注意事项,基本的理解还是有好处的。另一方面,建议不要下载最新版本的android源码,而是下载稳定的branch,比如android-4.0.3_r1,这样可能会更顺畅一些。
在编译之前我们需要做一些准备,下载必要的开发包,这个链接http://rootzwiki.com/topic/8037-compile-android-on-fedora-1516-by-xoomdev/,说明了针对Fedora发行版的Linux操作系统该怎么做一些准备。
我简要叙述一下,
下载sun-java-jdk6,注意一定不要使用openjdk,如果使用openjdk之后的编译会出现问题。
123cd
~
/Downloads
sudo
sh jdk-6u27-linux-amd64.rpm
sudo
ln
-s
/usr/java/default/bin/javah
/usr/bin/javah
然后安装必要的开发包
1sudo
yum
install
-y zip curl
gcc
gcc
-c++ flex bison gperf glibc-devel.{x86_64,i686} \
1zlib-devel.{x86_64,i686} ncurses-devel.i686 libX11-devel.i686 libstdc++.i686 libsx-devel \
123readline-devel.i686 libXrender.i686 libXrandr.i686
sudo
yum
install
git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev \
1gcc
-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev \
1libx11-dev lib32readline5-dev lib32z-dev libX11-devel.i686
然后安装make3.81,(注意,Fedora16的make是3.82,编译Android会出现问题,所以需要降级安装3.81)
1sudo
yum downgrade
make
--releasever=13
但是按照这种降级方法我也没有安装成功,最后我选择了下载3.81版本的源码自己编译安装的,方法
从http://www.gnu.org/prep/ftp.html下载"make-3.81.tar.gz到/tmp目录
1234567su
cd
/usr/local
tar
-zxvf
/tmp/make-3
.81.
tar
.gz
cd
.
/make-3
.81
.
/configure
.
/sh
build.sh
.
/make
install
然后配置PATH环境变量
12PATH=$PATH:
/usr/local/make-3
.81
export
PATH
(当然为了永久生效,可以放到~/.bashrc)
但是这样并没有好,Fedora16上一些包的版本和Android源码不太兼容,需要对Android源码作出一些更改,https://groups.google.com/forum/#!msg/android-building/gIC_t7GXzQ4/1l7Se9Mb910J这个链接给出了大部分方法,
12345678910111213141516171819202122232425262728293031321.
in
.
/build/core/combo/HOST_linux-x86
.mk
replace : HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
with : HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
2.
in
.
/development/tools/emulator/opengl/host/renderer/Android
.mk
add : LOCAL_LDLIBS += -lX11
3.
in
.
/external/gtest/include/gtest/internal/gtest-param-util
.h b/
include
/gtest/internal/gtest-param-util
.h
after : [CODE]
#include <vector>[/CODE]
add : [CODE]
#include <stddef.h>
#include <cstddef>[/CODE]
4.
in
.
/external/gtest/src/Android
.mk
replace (this is
done
in
2 places with the same line) :[CODE]LOCAL_CFLAGS += -O0[
/CODE
]
with : [CODE]LOCAL_CFLAGS += -O0 -Wno-missing-field-initializers[
/CODE
]
5.
in
.
/external/llvm/llvm-host-build
.mk
add : [CODE]LOCAL_LDLIBS := -lpthread -ldl[
/CODE
]
6.
in
.
/external/mesa3d/src/glsl/linker
.cpp
after : [CODE]
#include <climits>[/CODE]
add : [CODE]
#include <stddef.h>[/CODE]
7.
in
.
/external/oprofile/libpp/format_output
.h
replace : [CODE]mutable counts_t & counts;[
/CODE
]
with : [CODE]counts_t & counts;[
/CODE
]
8.
in
.
/frameworks/compile/slang/slang_rs_export_foreach
.cpp
replace (line 249 - be careful, there are 2 line the same, the other
one is required) : [CODE]llvm::StringRef ParamName = PVD->getName();[
/CODE
]
with :[CODE]
//
llvm::StringRef ParamName = PVD->getName();[
/CODE
]
另外我编译的过程还遇到了
12345host SharedLib: libGLES_CM_translator (out
/host/linux-x86/obj/lib/libGLES_CM_translator
.so)
/usr/bin/ld
: skipping incompatible
/usr/lib64/libGL
.so when searching
for
-lGL
/usr/bin/ld
: cannot
find
-lGLcollect2: ld 返回 1
make
: *** [out
/host/linux-x86/obj/lib/libGLES_CM_translator
.so] Error 1
make
: *** Waiting
for
unfinished jobs….
解决方法是
1sudo
yum
install
libgle.i686 libgle.x86_64 libgle-devel.i686 libgle-devel.x86_64 yum
install
mesa-libGL-devel.i686
又遇到
12345678910111213Java: CtsVerifier
(out
/target/common/obj/APPS/CtsVerifier_intermediates/classes
)
cts
/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons
.java:
191: onCreateDialog(int,android.os.Bundle)
in
android.app.Activity
cannot implement onCreateDialog(int,android.os.Bundle)
in
com.android.cts.verifier.PassFailButtons.PassFailActivity;
attempting to assign weaker access privileges;
was public private static <T extends android.app.Activity &
PassFailActivity>
^
1 error
make
: ***
[out
/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-
debug.jar]
有人说是使用openjdk,没有使用sun-jdk的原因,但是我使用的确实是sun-jdk,我采取了有人说的方案,从PassFailActivity接口中删除掉Dialog onCreateDialog(int id, Bundle args)
有了这些修补后,就可以正式开始编译了,
source build/envsetup.sh
lunch full-eng(注:这个属于没有设备专有驱动的配置,实际的机器比如Nexus S,你要到官网下载相应的驱动包,具体见这里)
make -j4(注:-jN可以加快编译速度,但是数值不要过大,推荐值是电脑CPU线程的1或2倍)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述