为x86进行android NDK程序开发要注意的问题

huaqmffpy 2012-08-01 04:43:57
随着支持Intel Atom处理器的android手机在CES上的面世,android程序开发也将有一些新的变化,开发人员需要考虑相应的移植问题,对于普通的java程序,开发人员不需要关心处理器的细节,所以,主要是那些使用NDK进行native开发的程序的移植。
随着Intel处理器的加入,相信越来越多基于x86的c/c++库将能更容易的被移植到android平台。

对于为x86进行android NDK程序开发,我能想到的问题主要有:
1. 如何让android NDK程序支持x86?
这点在NDK的手册中有说明,只需要在Application.mk中编辑APP_ABI 行加入 x86即可,如:
APP_ABI := armeabi armeabi-v7a x86
这样就能生成支持android x86的.so文件了。
说明:上面三种abi可以任意指定,也可以同时指定多个,默认为armeabi。

2. 如何测试支持x86的android程序?(以windows平台的SDK为例)
要测试支持Intel处理器的android x86程序,就目前而言,只能使用模拟器了。在SDK Tools的Reverion 12版本更新的General Notes中可以看到:
The AVD manager and emulator can now use system images compiled for ARM v7 and x86 CPUs.
从这里看到新版本的SDK工具应该是支持armv7和x86的模拟器的,然而打开SDK Manager更新列表,发现最新的android提供了ARM EABI v7a System Image,这样就能下载支持arm v7a指令的模拟器进行模拟了。根据http://software.intel.com/en-us/articles/installing-the-intel-atom-tm-android-x86-emulator-image-add-on-from-the-android-sdk-manager/的介绍,SDK Manager已经有x86的images下载,但是我的SDK里面居然没有找到这一项!相信在以后的更新中这个问题会得到修正吧。
尽管这里没有提供下载,但是AOSP中的android源码提供了编译android x86的选择项,也就是我们可以自己编译android x86的系统文件。
关于如何编译android源码,可以参考:http://source.android.com/source/building.html(说明:其内容没有完全更新,编译x86和arm的区别在于其中“choose a target”的时候选择full_eng_x86即可。)
在编译源码后,我们可以得到下列文件:ramdisk.img,system.img,userdata.img(在out/target/product/generic_x86中),将上面的三个文件和源码prebuilt/android-x86/kernel中的kernel-qemu文件保存起来,如保存在一个新建的x86文件夹中。
下面就是如何在SDK中添加自己编译的x86模拟器,将上面的x86文件夹复制到:platforms\android-**\images中,同时将原有的文件移动到一个新的arm文件夹,这样,在使用AVD Manager.exe创建模拟器的时候,就会出现target的选择。

说明:对于android-14和android-15,其中没有images文件夹,因为SDK将其移动到SDK根目录的system-images文件夹中了,可以自己新建此文件夹并在其中放置相关模拟器需要的文件即可。
说明:http://software.intel.com/en-us/articles/android-237-gingerbread-x86-emulator-image-add-on/提供了其它一些方法来使用android x86模拟器,可以作为参考。
总之,有多种方法可以对x86的android NDK程序进行模拟器的测试。

3. x86和arm利用NDK移植c/c++程序要考虑的问题
由于指令集等的不同,在用NDK移植某些程序的时候,可能需要考虑程序移植结果的正确性,就arm和x86对比而言,主要需要考虑的是:内存中字节对齐的差异、浮点数操作的差异、向量化指令的差异(NEON和SSE等)等。当然,并不是所有的程序都会在这些方面影响程序的结果。

在Intel官网上,有一些和android x86开发相关的文章:http://software.intel.com/en-us/android/,可以作为参考。
那么,除了上面提到的一些问题,大家觉得x86和arm的NDK程序开发需要注意的问题还有哪些呢?欢迎大家一起讨论。
...全文
587 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧