编译Windows版Android Emulator(Cupcake)

本文介绍在Windows环境下使用MinGW/MSYS编译Android模拟器的方法,涉及环境搭建、源码获取及编译测试等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译Windows版Android Emulator(Cupcake)

Android SDK提供了一个基于Qemu的模拟器来模拟Android系统的智能手机,得益于Qemu的跨平台特性,不论是Linux、Mac OS还是Windows的用户都可以通过模拟器大大提高开发效率。不过归根结底,Qemu还是在类Unix平台上发展起来的项目,所以在Windows平台上的编译还是值得一看。Google在git上描述如何编译Android Eclipse插件ADT的时候顺带提到了如何构建Windows版的Android SDK,国内也有朋友写了构建Windows版的Android SDK(此为转帖,原作者blog已无法访问)的文章,但是对于如何单独构建Windows版的Android模拟器目前并没有任何官方的文档提及,William只是在网络上找到一些零碎的讨论,今天就结合自己的实践整理出来和大家共享。
" S, @% Y( d8 {! u8 }2 i3 m
# Y0 P. z, C; W1 g
3 ?/ v+ L9 E. ^在Windows下编译Android模拟器的两种方法
! @( N4 d- x5 u0 X+ s1 `+ TAndroid给出的构建Windows版SDK的make_windows_sdk.sh脚本中,包含有make -j 4 emulator,即编译模拟器的命令,所以看起来模拟器能在Cygwin环境下构建出来的。另外,由于Android模拟器是基于Qemu,Android只是在其基础上添加了新的虚拟设备,定义了自己的skin机制等,所以只要是标准Qemu能够正常编译的环境,Android模拟器也就没有问题。The QEMU forum有一篇很详尽的关于在Windows环境编译Qemu的文章,Step-by-step QEMU compilation under Windows ,是在MinGW/MSYS下完成的,因而在MinGW/MSYS环境下构建看来也可行。- z4 y  ]7 y8 T+ m! /. o! F& U
既然使用make_windows_sdk.sh依赖的Cygwin看起来更像是官方制作SDK发布的环境,那么它应当是几乎100% working,下面还是先来尝试一下非官方的做法吧。7 C# @+ d; ~4 a# U/ [( z5 j
MinGW/MSYS环境的准备
7 X/ Y5 n8 b4 n) z5 HMinGW和MSYS的环境不算复杂,官方网站也有详细的帮助文档,下面就说说我的安装过程。
# J: ]# Z# ^) C7 ~需要下载的安装包包括:5 ~! u3 K& /2 B# {" h4 G$ N
1、MinGW-5.1.4.exe, 这是MinGW的自动安装工具(Automated MinGW Installer)
, v) X% k) c% Z$ p% Q2、MSYS-1.0.11.exe3 M* ~, /; L: /# R* t: j
3、msysDTK-1.0.1,MSYS Developer Tool Kit,包括autoconf、automake、libtool、cvs等工具* }* a. J4 o8 i4 ^( F7 F$ Y0 a
4、pthreads-w32-2-8-0-release.exe,emulator所需要的pthread库。
5 K9 l7 I0 J4 y7 |! i; Lzlib、libpng、SDL以及它依赖的directx-devel库就不需要下载了,zlib和libpng已经包含在Android Emulator源码包中,SDL我们也可以用Android Prebuilt中提供的binary,稍后会给出链接。
8 y# ?2 u/ T) g1 L安装MinGW时,除非有特别的需要,我们安装常用的gcc core、g++编译器就行。如果网络条件实在不好,可以打开mingw.ini找出文件名,然后通过下载工具到MinGW网站下载。另外值得一提的是,MinGW为了更好的管理软件包的发布,使用了current、previous和candidate来区分不同版本软件包的组合,这里我选择的是current,gcc版本为3.4.5。安装路径随意,这里假设是c:/mingw。
3 I3 R% G. ~# ]安装MSYS时会询问是否有安装MinGW,选择Y的话会要求输入MinGW的安装路径,输入之后很快就可以完成MSYS安装。这里我们假设MSYS的安装路径是c:/msys。接下来安装好msysDTK-1.0.1,我们就可以通过桌面上的快捷方式来进入MSYS了。这里我们要通过“ls /mingw”命令确认一下MinGW是否被正确挂载到MSYS的/mingw目录,如果可以看到bin、doc、include等目录就说明挂载成功,否则请检查MSYS安装目录中etc下的fstab文件,格式请参考fstab.sample。挂载成功以后,试试“gcc -v”,能够正常返回gcc version 3.4.5等字样,我们就可以进入到下一步了。
( Q/ U8 a" w8 n6 G3 O+ C取得Android Emulator源代码和Prebuilt中的SDL库/ M4 c3 X* N4 U( f$ C
请参考我之前的文章Git和Repo扫盲——如何取得Android源代码来取得Android Emulator源代码和Prebuilt中的SDL库,或者你也可以简单的从GitWeb下载Emulator和Prebuilt的snapshot版本。" I6 s9 r) d# R) l1 R
下载完成以后,把Emulator解压缩到c:/msys/home/< 当前登陆的用户名 >目录下,Prebuilt我们只需要其中Windows目录下的sdl目录就可以了,同样放到c:/msys/home/< 当前登陆的用户名 >目录。
; J+ n6 ~/ S" Y6 B这里有必要提一下Android Emulator的build system,在Google发布的源码包android-emulator-1.0_r2.tar.bz2中,我们可以很方便的使用build-emulator.sh脚本来编译(中间可能会遇到些问题),在这个脚本中我们可以看到,构建Emulator的脚本是 android-rebuild.sh,而它则会调用同一目录下的android-configure.sh来完成configure。回到 Cupcake中的External/qemu目录,我们可以看到android-rebuild.sh和android-configure.sh这两个脚本同样存在(一开始我确实是以为只有以源码包形式发布的Emulator中才包含了这几个脚本),所以我们可以在编译整个Android Cupcake代码树时编译Emulator,同样也利用这个平行的build system来单独的构建Emulator。从这个角度来说,单独的构建Emulator,无论是Cygwin还是MinGW/MSYS,方法就不会有什么差别了。) ?; J( Z% }$ b
编译Android Emulator的过程
! m& H8 I+ e  @2 r% g" U2 N做好前面的几步之后,打开MSYS,进入到Emulator(qemu)目录,执行./android-rebuild.sh –sdl-config=/home/< 当前登陆的用户名 >/sdl/bin/sdl-config 命令即可,它会自动调用android-configure.sh脚本进行configure,随后开始编译,–sdl-config则指定了sdl库的路径。- y3 Y+ X& n! L% @  ?1 n7 {
这里我们可能遇到的问题是缺少libpthread,如果遇到的话解开pthreads-w32-2-8-0-release.exe,把Pre- built.2中的libpthreadGC2.a改名为libpthread.a复制到c:/mingw/lib目录,pthread.h复制到c: /mingw/include目录即可解决
. L! l/ [4 [3 f- t+ ?: Z  F, p0 t+ ~除此之外,编译Cupcake中的Android Emulator相当的顺利,之前编译android-emulator-1.0_r2.tar.bz2时遇到过的“unsupported cpu”, “bad ELF header”等错误都没有遇到。
* @' f% m7 g6 J6 ~% }0 g3 n6 Y测试生成的Android Emulator
9 W! t- e7 {. G8 l. s/ j4 U8 i测试生成的emulator.exe能否正常工作,最简单的办法就是把它复制到当前安装好的Android SDK的tools目录下,连-kernel,-ramdisk,-system这些参数都省的加了。新建一个avd,比如“test_avd”,然后在控制台运行“emualtor.exe @test_avd” 即可,如果有什么不正常,加上-debug-all和-show-kernel参数可以有助debug。
+ {& |: `- _  p) {* L好了,有图有真相!标题栏中的“Build with MSYS/MINGW”是我自己加的。

未命名5.jpg (47.73 KB)

 

未命名5.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值