启动自己编译的sdk(avd)

来源:互联网 发布:i miss you网络歌曲 编辑:程序博客网 时间:2024/06/06 09:36

  1.  编译Android模拟器

  在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别。

  编译Android模拟器的步骤和编译Android系统很相似:

  Ø source build/envsetup.sh

  Ø lunch sdk-eng

  Ø make sdk

  在每次执行make的时候,编译系统会自动的验证上次编译项和这次编译项,如果两次不一样,会删除所有的目标代码,其实现在./build/core/main.mk

  71 # This allows us to force a clean build - includedafter the config.make

  72 # environment setup is done, but before we generateany dependencies. This

  73 # file does the rm -rf inline so the deps which areall done below will

  74 # be generated correctly

  75 include $(BUILD_SYSTEM)/cleanbuild.mk

  我们将第75行注释掉,这样就不会每次都自动删除上次编译的中间代码重新编译了。

  编译完之后效果如下图所示:

  sdk安装在了下面的目录里:

  WORKING_DIRECTORY/out/host/linux-x86/sdk

  在该目录下有一个压缩包,里面就是我们从eclipse里更新下载指定Target的sdk包。

  如果你做过app开发都会知道,我们只有下载了不同版本的sdk之后才能创建不同版本的模拟器。当我们编译完sdk之后就可以创建并运行Android4.0的模拟器了。

  $ cd WORKING_DIRECTORY/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools

  首先,查看当前编译出来的sdk的id号,用于创建一个模拟器:

  $ ./android list targets

  Available Android targets:

  ----------

  id: 1 or "android-14"

  Name:Android 4.0

  Type:Platform

  API level:14

  Revision: 2

  Skins:WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA,WSVGA

  ABIs : no ABIs.

  创建一个模拟器

  $ ./android create avd -n mydroid -t 1 

  注:-n 表示指定模拟器的名字, -t表示指定创建模拟的版本id,-p 指定avd生成后所放目录, --force强制

  启动模拟器

  $ ./emulator -avd mydroid &

  由于模拟器要启动android系统,它要使用几个映像文件,分别是:kernel-qemu , system.img, userdata.img, ramdisk.img

  Ø kernel-qemu:内核映像文件,它是linux操作系统针对qemu模拟器编译的内核文件,里面安装有qemu的仿真硬件驱动,如果将来在开发板或手机上移植android,那么,第一步就是要先make出一个支持开发板或手机的kernel来。

  Ø system.img:是android系统的文件系统,里面包含了android系统的应用程序(apk),系统用到的各种库(jar, so, a)和资源,配置文件(etc目录下),系统命令(bin,usr/bin, xbin),该映像文件是由out/target/product/PRODUCT/system目录打包生成的,我们可以对这个目录里的东西进行定制化,比如,你要想让android系统默认为安装一个应用程序,那么可以将要安装的apk文件拷贝到out/target/product/PRODUCT/system/app目录下

  Ø userdata.img:用户数据映像,里面包含有程序安装信息,好比如是windows的C:/Program Files/目录

  Ø ramdisk.img:内存磁盘映像,这个文件对于没有做过Linux移植的人来说,不好理解,linux内核启动起来,要挂载一个文件系统作为自己的根文件系统,通常文件系统是存放在块设备上的,也就是硬盘或flash上的,里面含有Linux内核启动过程中依赖的一些程序和配置文件,前面所述的userdata.img和system.img映像,在linux系统启动起来后挂载到其data,system目录下。

  我们可以通过下面的脚本run_emulator.sh,来指定Android模拟器来加载指定的映像文件:

  #!/bin/bash

  PWD_PATH=`pwd`

  IMG_PATH=$PWD_PATH/out/target/product/generic

  exportPATH=$PWD_PATH/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools:$PATH

  exportANDROID_PRODUCT_OUT=$PWD_PATH/out/target/product/generic

  export ANDROID_SWT=$PWD_PATH/out/host/linux-x86/framework

  emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage

  注:

  ANDROID_PRODUCT_OUT:环境变量必须指定,emulator就是从该环境变量下查找所有的映像文件的

  -kernel:指定内核映像

  当然也可以分别指定每个映像文件,通过下面的命令:

  $ emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage

  -image $IMG_PATH/system.img

  -data $IMG_PATH/userdata.img

  -ramdisk $IMG_PATH/ramdisk.img

  注:

  -system指定system.img

  -data指定userdata.img

  -ramdisk指定ramdisk.img

  如果将来要运行adb shell连接模拟器的话,我们都要使用root权限,否则会出现:error:device not found的错误。

  通过启动起来的Android系统->System Settings->About phone,可知使用的是我们自己编译的内核启动的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机上的相机找不到了怎么办 有刘鑫这样的闺蜜该怎么办 电脑开机网络初始化失败怎么办 电脑放音乐没有声音怎么办 苹果手机gprs信号弱怎么办 苹果导航gprs信号弱怎么办 au没有波形 没有声音怎么办 屏幕驱动板坏了怎么办 安吉星流量超了怎么办 网络被伪基站覆盖怎么办 骨头渣子卡嗓子里怎么办 执法仪记录仪关不了机怎么办 执法记录仪开不了机怎么办 华为警务通丢了怎么办 华德安执法记录仪死机怎么办 行车仪内存满了怎么办 海康威视摄像头没有通道怎么办 电脑屏膜变大了怎么办 手机2g模块坏了怎么办 腾讯大王卡是2g怎么办 华为手机4g坏了怎么办 优盘中毒打不开怎么办 vr头戴链接不起怎么办 人在缺氧的时候怎么办 脑缺氧供血不足怎么办 睡多了大脑缺氧怎么办 吃了过期的东西怎么办 吃了过期的牛肉怎么办 生存战争肉腐烂了怎么办? 家里进了蝙蝠找不到了怎么办 方舟手游恐龙找不到了怎么办 这是我的战争怎么办 小孩吃坏东西呕吐发烧怎么办 睿芽密码忘了怎么办 做绿豆糕太稀了怎么办 自热火锅吃完后怎么办 自煮火锅吃完了怎么办 自热火锅没熟怎么办 厕所被米饭堵了怎么办 减完肥肉特别松怎么办 新开的熟食店没人光顾怎么办