编译Android源码总结

首先得感谢这位老师在知乎上的回答,让我多年想有机会一览android源码的心愿总算有了开头。

然后顺着里边的步骤。我浏览了下邓凡平老师的博客,顺便买了他的两本《深入理解Android》卷一和卷二,最开心的是老师已经把源码下载好放到网盘上了,不然按我的速度估计要下好几天。

然后跟着知乎上的答案,我已经装好了Ubuntu开发环境。并且将代码下载好了,这里有一个问题,注意下载好的代码是.tar.gz格式的。不要尝试在windows系统下进行解压阅读,会发生文件名重复的问题,我放到ubuntu系统下解压就没有这个问题了。

第二个问题是,我是从邓老师那里下载好的android5.0的源码,已经不再适合用知乎大神里说的使用oracle java6进行编译了。在makefile里(build/core/main.mk)有这样一段话

意思是如果java7,我们需要OpenJdk在linux系统上。oracle jdk在mac上。
如果是java6,我们在所有系统上均适用
但是默认是java7
因为我是ubuntu系统,属于linux,所以要安装openjdk7

# Check for the correct version of java, should be 1.7 by
# default, and 1.6 if LEGACY_USE_JAVA6 is set.
ifeq ($(LEGACY_USE_JAVA6),)
required_version := "1.7.x"
required_javac_version := "1.7"
java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.7[\. "$$]')
javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.7[\. "$$]')
else # if LEGACY_USE_JAVA6
required_version := "1.6.x"
required_javac_version := "1.6"
java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.6[\. "$$]')
javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.6[\. "$$]')
endif # if LEGACY_USE_JAVA6

ifeq ($(strip $(java_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of java.)
$(info $(space))
$(info Your version is: $(java_version_str).)
$(info The required version is: $(required_version))
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/initializing.html)
$(info ************************************************************)
$(error stop)
endif

# Check for the current JDK.
#
# For Java 1.7, we require OpenJDK on linux and Oracle JDK on Mac OS.
# For Java 1.6, we require Oracle for all host OSes.
requires_openjdk := false
ifeq ($(LEGACY_USE_JAVA6),)
ifeq ($(HOST_OS), linux)
requires_openjdk := true
endif
endif


# Check for the current jdk
ifeq ($(requires_openjdk), true)
# The user asked for java7 openjdk, so check that the host
# java version is really openjdk
ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
$(info ************************************************************)
$(info You asked for an OpenJDK 7 build but your version is)
$(info $(java_version_str).)
$(info ************************************************************)
$(error stop)
endif # java version is not OpenJdk
else # if requires_openjdk
ifneq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
$(info ************************************************************)
$(info You are attempting to build with an unsupported JDK.)
$(info $(space))
$(info You use OpenJDK but only Sun/Oracle JDK is supported.)
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
$(info ************************************************************)
$(error stop)
endif # java version is not Sun Oracle JDK
endif # if requires_openjdk


我是三系统的电脑 (xp win7 ubuntu 工作需要)。所以文件系统是ntfs。这会导致在make命令时权限不够
http://blog.csdn.net/xww810319/article/details/17375201参考这篇文章
我们需要对其进行提权操作
chmod a+x 文件路径 
(可以将gcc/bin目录 下全部提权,以防止再出现这个问题 chmod a+x *就可以了

进行提权之后问题解决 。还没解决的可以试试下面这个方案


这个没有解决问题,
 sudo apt-get install ntfs-3g      //这个12.04已经有了。
 sudo apt-get install ntfs-config  //这个是个图形界面的NTFS权限配置程序。
然后使用输入命令:ntfs-config(NTFS写入支持配置程序)直接勾选配置即可使得挂载的盘符获得可执行权限。

如果你之前安装错java环境了
这里是卸载所有jdk的命令
根据需要删除一切用于匹配的字段即可

1、 移除所有 Java相关包 (Sun, Oracle, OpenJDK, IcedTea plugins, GIJ):

(1) apt-get update

(2) apt-cache search java | awk '{print($1)}' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e 'java-common' | xargs sudo apt-get -y remove

(3) apt-get -y autoremove

2、清除配置信息:  dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge

3、清除java配置及缓存:  bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf

4、手动清除JVMs:  rm -rf /usr/lib/jvm/*


第三个问题 x86_64-linux-gcc: error trying to exec 'cc1':
了解了一下,大概说是交叉编译的问题


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值