博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mac OS 10.6(Snow Leopard)编译Android源代码
阅读量:6074 次
发布时间:2019-06-20

本文共 3245 字,大约阅读时间需要 10 分钟。

最近在看,准备把Android源代码研究一下。做net开发时,就是通过microsoft symbol server取得net framework的源代码加载到debugger调试程序的,这种方式对于框架的学习是最方便不过的。很多时候,我也养成了习惯了随手打开源文件而不是API文档的习惯。Android源代码需要在*nix系统下编译,正好手头有个macbook,于是打算在Mac OS下编译。本文参考了android官网以及部分网友的blog,文中如引用均给已出相应连接。

一.配置环境

   笔记本:Macbook MC207CH/A  2.26GHz Intel Core 2 Duo

   内存:2GB 1067MHz DDR3

   OS : Snow Leopard 10.6

   XCode :  4.0 with ios sdk 4.2 (有问题,后面有解决方案)

   JDK : 1.6 

   Eclipse :  Indigo (Java EE)

二.设置Mac OS 编译环境

   参照官网,不再赘述。

   1.特别强调Android源代码必须在大小写敏感的文件系统下编译,而Mac OS默认不是大小写敏感的,因此需要创建一个大小写敏感的磁盘镜像文件。

   具体方法进入应用程序/实用工具/磁盘工具,选择文件->新建->新建空白映像:

    

  2. 使用make 3.81 (revert from make3.82)

      强调在mkdir /Users/Shared/dports后需要使用cd /Users/Shared/dports切换到该文件夹下执行svn co,这里我刚开始没有注意无法安装gmake 3.81

三. 下载Android源代码

   参照官网

   1. 特别强调在Initializing a Repo client 一节,应该把当前目录设置为前文创建的大小写敏感的文件系统下,比如我把新创建的dmg挂载到/Users/basilwang/android,那么需要执行$cd /Users/basilwang/android  源代码才能放到新创建的这个路径下

      我刚开始没有注意,直接执行了

      $ repo init -u

  结果把源代码下载到其他路径下,白白浪费我2个多小时的时间,而后我把下载的文件扔到了回收站了,结果出了一个错误,害的我又花了一些时间排除这个错误(后面详述)

   2. 这里推荐使用一书提供的一段防止下载异常的脚本

   #!/bin/bash

   #FileName
   PATH=./bin:$PATH
   repo init -u -b android-2.3.3_r1.1
   repo sync
   while [ $? = 1 ]; do
   echo "================sync failed, re-sync again ====="
   sleep 3
   repo sync
   done

    这里下载的是2.3.3 gingerbread版本

四. 编译Android源代码(Gingerbread)

    Gingerbread的编译还依赖于MacOSX10.5.sdk,但本机是10.6,于是下载Xcode 3.25,安装的时候选择另外的路径比如Developer325,安装完毕后Xcode4和Xcode325共存

    另外修改两个地方

   1 external/qemu/Makefile.android,其中第72行,LEOPARD_SDK:= /Developer/SDKs/MacOSX10.5.sdk,将其修改为:

LEOPARD_SDK:= /Developer325/SDKs/MacOSX10.5.sdk

   2 build/core/combo/HOST_darwin-x86.mk,其中第29行,

sdk_105_root := /Developer/SDKs/MacOSX10.5.sdk 改为

sdk_105_root := /Developer325/SDKs/MacOSX10.5.sdk

   现在可以开始编译源代码

   $make,需要很长时间,我大概用了2个多小时才编译完成

   此处报了两个错误,耽误了我很长时间

   1 执行make后

find: `frameworks/base/frameworks/base/docs/html': No such file or

directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory

dot_clear.gif

Jean-Baptiste Queru在回答

  2

.Trashes/501/bionic/libc: MODULE.TARGET.STATIC_LIBRARIES.libc_common already defined by bionic/libc.  Stop.

    开始我一直在检查为什么会重复定义(already defined),make clean也不管用,最后发现原来编译时找到了回收站.Trashes我删除过的文件,郁闷,清空回收站就ok.

五.将源代码导入Eclipse

   1. 新建Java Project将路径指向Gingerbread目录, 此处为~/android

   2. 拷贝.classpath

       $sudo cp ~/android/development/ide/eclipse/.classpath   ~/android/.classpath

       $chmod +w  ~/android/.classpath    将.classpath设置为可写

   3. build 出现如下错误

      

      整理报错信息,集中在com.android.common包中

com.android.common.ArrayListCursor;

com.android.common.speech.LoggingEvents;

com.android.common.Rfc822InputFilter;

com.android.common.Rfc822Validator;

com.android.common.Search;

com.android.common.userhappiness.UserHappinessSignals

     在Java Build Path界面下

    

    移除出错jar包,并且选择Add JARs 增加out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar

   

   至此编译成功。

转载地址:http://myngx.baihongyu.com/

你可能感兴趣的文章
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>