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

随着支持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/,可以作为参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值