編譯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':
瞭解了一下,大概說是交叉編譯的問題


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章