英特尔®Android*培训议程认识AndroidforX86x86上Android移植方法英特尔AndroidNDK开发英特尔软件工具其他主题(WIDI、游戏引擎)2认识Androidforx86•与传统Android应用开发的相同之处?•开发方法和思想•开发工具集•开发流程•SDK、虚拟机和相关文档的使用•与传统Android应用开发的不同之处?•模拟器和真实目标设备是基于x86指令集(IA架构)的•相比传统技术,通过x86指令集和KVM技术,模拟器可以获得更高的性能支持•基于NDK实现的库需要被重新编译•如果使用了汇编语言,那么这些汇编指令必须属于x86指令集(IA架构的指令集)•Androidforx86针对Dalvik虚拟机、Javascript引擎、C库、媒体库、图形、SDK、NDK、模拟器等方面做了大量的和深度的优化•许多Intel的特别优化技术能够被应用于Androidforx86应用的开发•提供更好的x86平台间的兼容性•总而言之,开发者将面对一个新的环境和新的机会,可以花费很少的精力来获取更好的体验和利益3NDK与Dalvik*应用•Android*Dalvik*应用–这些应用将“正常工作”,Dalvik已针对英特尔®平台进行优化。•Android本机(NDK)应用程序–其中大多数在消费者平台上都无需重新编译即可运行…–自2011年以来,AndroidNDK提供了一条x86工具链–使用AndroidNDK的简单重新编译带来了最佳性能–如果存在依赖于特定处理器的代码,则可能需移植Android运行时内核库Dalvik虚拟机4搭建开发环境•安装开发软件(Eclipse&plug-in,SDK,etc.)•构建Androidx86模拟器•将Eclipse与模拟器集成5搭建开发环境(开发软件)•官方SDK-•如何安装和配置SDK,请参考:•如何开发一个简单的应用,请参考:••开发Androidforx86的应用,支持x86的模拟器需要被添加,详细的信息请阅读后面的主题“搭建x86模拟器”•官方NDK-•什么是NDK?:•如何使用NDK,请参考后面的主题“如何开发带NDK的应用”6搭建开发环境(开发软件)•Eclipse-(SDKbundle中已经包含)•推荐使用EclipseClassic版,因为许多基础库在该版本中已经内建•ADT-AndroidDevelopmentTools(SDKbundle中已经包含)••CDT–C/C++DevelopmentTooling••该工具在开发NDK应用时将被使用•Cygwin-•该工具将被使用在Windows下开发NDK应用•出于开发的目的,当安装Cygwin时,“Devel”包应该被置为Install状态,如下图所示:•Console-•一个比Windows自带的CMD更好用的控制台程序7•预编译好的x86模拟器(推荐)•VirtualBox-•一款著名的基于x86架构的开源虚拟机,由于利用了KVM技术,该模拟器在Linux下的性能要远远好于Windows下,同时也明显地好于Linux下其他架构的Android官方模拟器,所以该模拟器更被推荐在Linux下使用•Android-x86-•一个著名的Android移植到x86的开源项目•VirtualBox+Android-x86搭建了一条使用Androidx86模拟器的新途径,关键之处是它可以在Windows环境下获得很高的性能,更详细的信息请参阅“搭建x86模拟器”•Google官方的Androidx86模拟器•最新的AndroidSDK(Revision21.1)中包含2.3.3以及4.0.3以上各个版本的X86的img,直接从SDK中自带的工具SDKmanager中下载安装,并且可以直接用AVDmanager来创建基于X86的模拟器。改方式操作更为简单,不过模拟器性能不如预编译好的X86模拟器强劲8搭建开发环境(x86模拟器)•预编译好的x86模拟器•非常详细的图文并茂资料请参阅•相较于以上资料,我们需要注意以下关键点:•当前,Android4.2已镜像可以被使用•在VirtualBox中,为获取更好的性能,RAM可以设置为1G及以上,磁盘的空间可以设置为32G及以上•虚拟SDCard的大小应该设置为最大值,可以方便安装更多应用•如果要模拟的设备是Tablet,其分辨率和色深可以设置为1280x800x16,方便接近真实环境调试应用•该解决方案既可以在Windows环境下使用,也可以在Linux环境下使用9搭建开发环境(x86模拟器)•Google官方的Androidx86模拟器•先决条件:AndroidSDK已经被正确安装,这里用Android-SDK-Root代表其安装后的根路径;•启动SDKManager.exe,下载x86android的img;10搭建开发环境(x86模拟器)该示例描述了如何配置x86的AVD:Name:x86-4.2(可以是你喜欢的任意名称)Target:NexusS(套用哪一个设备的硬件特征)Target:Android4.2.2–APILevel10CPU/ABI:IntelAtom(x86)SDCard:256MBUseHostGPU点击OK点击Start…在AndroidSDK和AVDManager上点击Launch等待模拟器的启动……接下来的开发和调试步骤与传统的基于Android官方模拟器的应用开发是完全相同的•启动AVDManager.exe,创建并且启动x86模拟器;11搭建开发环境(x86模拟器)搭建开发环境(Eclipse与模拟器集成)•先决条件:Eclipse,AndroidSDK以及ADT已经正确安装•预编译好的x86模拟器与Eclipse集成•ALT+F1进入模拟器shell,然后netcfg得到模拟器IP12搭建开发环境(Eclipse与模拟器集成)•在Eclipse中开启ADBHOST的选项•选择Eclipse菜单Window-Preferences-Android-DDMS•勾选UseADBHOST•设置ADBHOSTvalue为第一步骤中得到的模拟器IP•点击Apply和OK•打开DDMS视图•点击Devices工具条中的Resetadb,得到如下所示信息13搭建开发环境(Eclipse与模拟器集成)•Google官方的Androidx86模拟器与Eclipse集成•Eclipse工具选项中Window-ShowView-other调出Android调试相关的选项Devices,Logcat,FileExplorer,etc.•在Eclipse调出的Devicetab中选择对应的模拟器,就可以在LogCat的tab中看到Log信息,其他的tab也可以看到对应的debug信息。此时若Eclipse中选择运行一个Android项目,就可以在此模拟器中进行调试14如何开发带NDK的应用•创建HelloJni•编译和运行工程•调试工程15开发带NDK的应用(创建HelloJni)•在Eclipse中以NDK自带的sample为基础新建一个简单的NDK应用16开发带NDK的应用(创建HelloJni)•创建好以后,PackageExplorer中将会添加对应的项目17开发带NDK的应用(编译和运行工程)•第一步:完善makefile文件•在JNI目录下创建Application.mk,并且填上“APP_ABI:=x86”的字串18开发带NDK的应用(编译和运行工程)•第二步:对工程添加Native支持•右击项目,选择AndroidTools-AddNativeSupport19开发带NDK的应用(编译和运行工程)•第三步:右击项目,进行编译•此时项目会进行Native和Java部分的编译,并打包apk20开发带NDK的应用(编译和运行工程)•第四步:运行项目•在Eclipse菜单栏里面点击运行按钮,此时工程将会运行到当前连接上的模拟器中。21开发带NDK的应用(调试)•随着Android的不断进步,我们x86Android的相关开发工具也在不断的完善和进步,NDK的调试也取得了突破性的进展,如今,我们已经不再需要通过繁琐的命令行来进行调试,取而代之的是一套成熟的GUI调试工具。22开发带NDK的应用(调试)•第一步:在NDK源代码中加入断点23开发带NDK的应用(调试)•第二步:右击工程,选择DebugAs-AndroidNativeApplication24开发带NDK的应用(调试)•第三步:跟踪调试目标代码段25开发基于Androidforx86应用的拇指法则•鉴别和归类Android应用•只基于Dalvik的应用:•除了对显示适配的调整(包括分辨率,方向,UI等方面),几乎不用花费任何精力就可以将应用部署到Androidforx86设备上•带NDK的应用,除了上面所做的,还要注意:•“APP_ABIforx86(APP_ABI:=x86)”必须被添加•使用C/C++撰写的库文件必须被重新建立,一些基于硬件平台的底层API可能需要被调整•IA-32架构使用LittleEndian模式,而其他架构可能使用LittleEndian模式或者BigEndian模式,因此对于数据的存储,数据的传输和数据类型的转换的实现要注意架构的差异•带NDK的应用,并且内嵌了汇编语言,除了上面所做的,还要注意:•汇编语言必须使用合法的x86指令集(IA指令集)的指令26通过ICC和IPP来优化您的NDK库•ICC-Intel®C/C++编译器•高度的优化•对IntelAtom处理器的完全支持•兼容GCC•高达30%的性能提升,并延长了电池的使用时间•专为IntelAtom处理器的顺序调度器的优化•多遍(MultipassProfiling)优化技术•IPP-Intel®IntegratedPerformancePrimitives•高度优化的多媒体能力•针对IntelAtom处理器进行了专门的优化•IPP为许多关键的应用提供了优化的性能,模块化的功能,其中包括:多媒体回放/记录,编辑,图像处理,声音/语音/信号处理,还有网络数据通信•使用ICC和IPP来替换Android官方所提供的GCC编译器和有关库,可以帮助建立有着更高性能和更