Android的模拟器是基于qemu的基础上修改的,代码在 external/qemu下。
怎么根据我的项目来定制skin呢?
比如我的项目是 : LCD 800x480 WVGA
6个键,分别是上,下,左,右,OK ,Back
portrait 竖屏
landscape 横屏
这是针对手机,比如手机的屏幕QVGA (320x240) ,横屏的时候就是 240x320
(一) 对于应用开发人员,在SDK中修改定制
1)在android-sdk-linux_86/platforms/android-2.1/skins目录下
cp -r WVGA800 MySkin
2) 修改layout , 把keyboard删除掉,以及一些其他的不用的control key删除掉
3) 修改位置,把竖屏,横屏调换,我的想法是我竖屏为800x480,横屏为480x800,和手机的屏不一样
4) 然后用android 添加一个avd ,名字为test ,皮肤为 MySkin (这个保存在~/.android/avd下面)
5) emulator -avd test 测试
修改的layout文件为:
parts {
portrait {
background {
image background_port.png
}
}
landscape {
background {
image background_land.png
}
}
device {
display {
width 800
height 480
x 0
y 0
}
}
controls {
background {
image controls.png
}
buttons {
back {
image button.png
x 112
y 142
}
dpad-up {
image arrow_up.png
x 77
y 53
}
dpad-down {
image arrow_down.png
x 77
y 106
}
dpad-left {
image arrow_left.png
x 53
y 53
}
dpad-right {
image arrow_right.png
x 123
y 53
}
dpad-center {
image select.png
x 77
y 81
}
}
}
}
layouts {
portrait {
width 853
height 761
color 0xe0e0e0
event EV_SW:0:1
part1 {
name landscape
x 0
y 0
}
part2 {
name portrait
x 1000
y 0
}
part3 {
name device
x 27
y 27
}
part4 {
name controls
x 335
y 507
}
}
landscape {
width 853
height 761
color 0xe0e0e0
event EV_SW:0:0
dpad-rotation 3
part1 {
name portrait
x 900
y 0
}
part2 {
name landscape
x 0
y 0
}
part3 {
name device
x 26
y 509
rotation 3
}
part4 {
name controls
x 539
y 556
}
}
}
keyboard {
charmap qwerty2
}
network {
speed full
delay none
}
测试好了后,同时配置eclipse , 在[Run]->[Run Configurations] 建一个测试程序的时候, Target选择 test 就可以了
对于SDK的emulator ,所用的缺省kernel为platforms/android-2.1/images/kernel-qemu,rootfs 为system.img
(二)对于android系统开发者
下载源码编译后,
export PATH=$PATH:/media/H/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/media/H/android/out/target/product/generic
export ANDROID_SWT=/media/H/android/out/host/linux-x86/framework/
然后 emulator
缺省用的kernel为./prebuilt/android-arm/kernel/kernel-qemu,所用的rootfs为 ./out/target/product/generic/system.img
我们为它定制一个符合我们项目的avd,和上面一样,我们建立了一个定制的皮肤MySkin,然后
在~/.android/avd仿照其他的avd新建一个real avd .
添加文件 real.ini 和目录 real.avd
修改real.avd/config.ini ,如下:
skin.name=MySkin
hw.lcd.density=160
image.sysdir.1=/media/H/android/out/target/product/generic/
skin.path=/media/H/opensrc/android-sdk-linux_86/platforms/android-2.1/skins/MySkin/
这样皮肤用的是我下载的SDK里面的MySkin,而system.img用的是我从源码里编译的
运行 emulator -avd real -kernel /media/H/android/prebuilt/android-arm/kernel/kernel-qemu
此时,就可以看到符合我们项目的模拟器了。
但是我用s3c64100编译了一个zImage ,然后用emulator -kernel 去跑,发现不成功。
emulator -qemu -M ?
Supported machines are:
android_arm ARM Android Emulator (default)
而我用android的goldfish编译出来的zImage可以跑, 可见emulator 只能跑android的goldfish ,而实际的设备的kernel不可以跑。
应此 emulator不能用来调kernel相关的一些东西,可以用来调试上层应用。