- 为了能够同时开发iPhone
- 应用程序和Android
- 应用程序,我将所有的开发环境都集成到了自己的Macbook
- 上,虽然用Macbook
- 开发普通的Android
- 应用程序没什么问题,但是你要是想用Eclipse
- 浏览和编译Android
- 源代码并且对其SDK
- 进行调试,就是很麻烦的事情了。通过Google
- 发现绝大部分Android
- 源代码的编译和开发环境都是在Ubantu
- 系统上,虽然Android
- 官网提供了在MacOS
- X
- 上编译源码的方式,但是尝试了多次总是发现有问题。
- 刚好这段时间Android
- 源码网站被黑,终于找了一个方法能够下载到完整的代码,于是就借此机会再次尝试一下编译源码,同时在Eclipse
- 里面调试成功,记录下来整个过程方便以后查阅。
- 一.
- 设置MacOS X
- 编译环境
- 这一点是根据Android
- 提供的方法来设置的,我这里只做了一些翻译和解释工作。我自己的Macbook
- 已经升级到了Lion
- ,对于操作系统配置什么就不用去担心了。直接上吧。
- 1.
- 创建一个大小写敏感的磁盘镜像文件
- 由于编译Android
- 源代码需要将代码存放在大小写敏感的磁盘当中,所以我们需要首先创建一个大小写敏感的磁盘镜像文件(如果你的磁盘已经是大小写敏感的,则省略这个步骤,直接进入步骤2
- ).
- 进入应用程序/
- 实用工具/
- 磁盘工具,选择文件->
- 新建->
- 新建空白映像:
- 其中名称可以随意,大小可以选择自定义30G
- ,格式选用MacOs
- 扩展(区分大小写),映像格式选择稀疏磁盘映像,这样文件的大小会随着文件的多少而增长,不用一上来就搞30G
- 那么大,其它都是默认选项。
- 同时,你还可以通过命令行方式生成该磁盘镜像:
- $hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 30g /
- path-to-image
- /AndroidDisk.sparseimage
AndroidDisk.sparseimage
- 生成的硬盘镜像文件名就是
- 了。似乎创建完以后OS
- 会自动把这个镜像加载上去,挂载点是/Volumes/android
- ,其中android
- 就是上面我们为磁盘镜像设置的名称
- 。
- 另外也可以将如下一行代码加入到~/.profile
- 当中,function mountAndroid { hdiutil attach /
- path-to-image
- /AndroidDisk.sparseimage
- -mountpoint /Volumes/android; }
- 这样以后每次用mountAndroid
- 命令就行了。
- 2.
- 安装所需要的包
- 1
- )首先你要安装的就是
- ,由于我的机器本身就是用来开发iPhone
- 应用程序的,所以我的Xcode
- 是最新的版本,如果你没有Xcode
- ,可以到苹果的官网注册一个appleid
- ,然后可以免费下载最新的Xcode
- 工具和MacOS
- SDK
- 。
- 2
- )从
- 安装MacPorts
- 工具
- 安装MacPorts
- 之前需要确认环境变量PATH
- 中,/opt/local/bin
- 出现在/usr/bin
- 之前,可以运行一下这行来确认:
- $echo $PATH
- 否则,就将如下代码加入~/.profile
- 当中。
- export PATH=/opt/local/bin:$PATH
- 3
- )从MacPorts
- 安装make,git, and GPG packages
- :
- $POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
- 4
- )将gmake3.82
- 还原到3.81
- gmake3.82
- 版本存在一个Bug
- ,所以我们要将其还原为3.81
- 版本。
- $sudo vim /opt/local/etc/macports/sources.conf
- 然后在rsync
- 那行的上面一行加上:
- file:///Users/Shared/dports
- 然后按照下面的步骤依次执行:
- $mkdir /Users/Shared/dports
- $cd /Users/Shared/dports/
- $svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/devel/gmake/
- $portindex /Users/Shared/dports
- $ sudo port install gmake@3.81
- 执行完成后,检查一下gmake
- 的版本:
- $gmake –version
- GNUMake 3.81
- 5
- )修改文件标识符限制
- 于是最后下载Android
- 源码前的最后一步就是,修改文件标识符限制:
- 由于MacOS
- 默认将同时打开的文件标识符数量限制得太小,并行编译处理时可能会超出这个限制。所以在~/.profile
- 里加上这么一段:
- #set the number of open files to be 1024
- ulimit -S -n 1024
- 二.
- 下载gingerbread
- 源代码
- Android
- 源代码网站
- 已经被黑了很长一段时间,后来在网上另外找到一网站提供源代码下载。
- 1.
- 创建~/bin/
- 目录
- $mkdir ~/bin
- $PATH=~/bin:$PATH
- 2.
- 安装repo
- $curl http://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo
- 3.
- 设置repo
- 可执行权限
- $chmoda +x ~/bin/repo
- 4.
- 修改~/bin/repo
- 文件将第五行
- REPO_URL='https://code.google.com/p/git-repo/'
- 改为
- REPO_URL='http://code.google.com/p/git-repo/'
- 5.
- 新建目录gingerbread
- ,并进入该目录
- $mkdir android_gingerbread_src
- $cd android_gingerbread_src
- 6.
- 执行repoinit
- $repo init -u git://Android.git.linaro.org/platform/manifest.git -b gingerbread
- 7.
- 找到android_gingerbread_src
- 目录中的.repo
- 下面的manifest.xml
- 文件,该文件只是一个链接,实际上是manifest
- 目录下面的default.xml
- 文件,将
- fetch="git://Android.git.kernel.org/"
- 改为
- fetch="git://Android.git.linaro.org/"
- 8.
- 回到android_gingerbread_src
- 目录下,执行reposync
- $repo sync
- 这一步需要很长时间,喝杯茶等吧。
- 三.
- 编译gingerbread
- 源代码
- 1
- )设置必要的编译环境
- 编译gingerbread
- 首先需要jdk1.6
- 版本,不过Mac
- 上已经自带了,所以省却这个步骤。
- 其次是gingerbread
- 的编译还依赖于MacOSX10.5.sdk
- ,但是我安装Xcode
- 最新版本后,始终都无法通过编译,后来自己看了一下编译脚本配置文件external/qemu/Makefile.android
- ,其中第72
- 行,LEOPARD_SDK:=
- /Developer/SDKs/MacOSX10.5.sdk
- ,将其修改为:
- LEOPARD_SDK:= /Developer/SDKs/MacOSX10.6.sdk
- ,即可通过编译。
- 初始化编译环境:
- $source build/envsetup.sh
- 2
- )选择编译目标
- $lunch full-eng
- 3
- )开始编译代码
- $make
- 如果运气好的话,你可以看到最终成功的提示,goodluck
- !
- 四.
- 将源代码导入Eclipse
- 1.
- 拷贝.classpath
- 进入gingerbread
- 源代码目录,也就是上面的android_gingerbread_src
- 。
- $cd android_gingerbread_src
- $cp ./development/ide/eclipse/.classpath ./
- 将.classpath
- 设置为可写
- $chmod +w .classpath
- 2.
- 新建Eclipse
- 工程
- 运行Eclipse
- ,选择File->New->Java Project
- ,项目位置就选择android_gingerbread_src
- 根目录,导入成功以后,Eclipse
- 开始编译源代码,不过会报告两个错误,如下:
- Project'gingerbread' is missing required library:'out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar'
- Project'gingerbread' is missing required library:'out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar'
- 删除.classpath
- 中的这两行路径:
- 添加
- <classpathentrykind="lib"path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>
- 然后重启Eclipse
- ,即可解决。
- 五.
- 利用Eclipse
- 调试gingerbread
- 代码
- 通过对gingerbread
- 源代码的调试,我们可以更为清晰的了解Android
- 的内部工作机制,也可以省却大量的阅读代码的时间,提高学习效率。
- 如果要想通过Eclipse
- 来调试gingerbread
- 代码,我们必须首先能够成功通过编译,编译以后,会生成几个系统文件,其中包括system.img
- ,userdata.img
- 和ramdisk.img
- ,三个文件位于源码目录下的out/target/product/generic
- 子目录下,如果熟悉Android
- 系统开发的朋友应该知道,一个完整的Android
- 映像应该还包括一个叫kernel-qemu
- 的文件,这就是Linux
- 内核镜像,不过我们并没有编译内核,所以这里没有生成这个文件。
- 要想成功调试,我们还需要安装androidsdk
- ,网上此类文章很多,这里就不多说了。将上述三个文件拷贝到/path-androidsdk/platforms/android-10/images
- 目录下,替换该目录下的三个同名文件(由于gingerbread
- 代码版本是2.3.3
- ,这个版本对应的就是android—10
- ,一定不要搞错了)。
- 创建一个新的avd
- 虚拟设备,Target
- 选择Android2.3.3
- ,如图,并启动模拟器。
- 我们可以看出,Android
- 的版本是2.3.5
- ,Build
- number
- 是full-eng
- 2.3.5 GINGERBREAD eng,
- 编译时间是2011.10.15
- 日。确实是我们自己编译的镜像。
- 启动Eclipse
- ,选择gingerbread
- 源码工程后,选择Run->Debug
- Configurations
- ,在左边列表中选择"Remote
- Java Application"
- ,并创建一个新的项目gingerbread
- ,将端口(Port
- )设置为8700
- ,其它保持缺省,如图所示:
- 在eclipse
- 中,选择DDMS
- 视图,并选中你要调试的进程,如图:
- 回到上面的Remote
- Java Application
- 界面,点击"Debug"
- 按钮来启动调试,此时再打开DDMS
- 视图,可以看到我们要调试的进程显示一个绿色的小图标:
- 你可以在eclipse
- 中下断点开始调试了。
来源: http://lib.csdn.net/article/android/47222