随着支持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. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android文件下载之进度检测
  6. android sharedUserId sharedPreferences
  7. Android(安卓)使用 ios中的部分Emoji表情(也可以替换任意系统的em
  8. CyanogenMod源码下载和编译(Android(安卓)ROM定制基础篇)
  9. ant编译android

随机推荐

  1. Android——高德地图设置中心点和缩放比
  2. [Android] Android(安卓)Tweened Animati
  3. Android:实现两个数相加的例子
  4. Android仿抖音App 列表滑动 PagerSnapHel
  5. Android一款界面良好使用简单的弹出框
  6. 第一章:android串口开发so库生成
  7. Android知识体系
  8. centOs7安装Android(安卓)Sdk详细教程
  9. Android(安卓)两种方式优雅实现按钮防重
  10. Android(安卓)STB ROM体积精简