来自 Google 的新工具集,有助于开发基于 Android 的 C/C++ 应用程序

  • Sergio De Simone
  • 李士窑

2014 年 12 月 30 日

话题:持续集成C++Android语言 & 开发

Fplutil 是一套来自 Google 乐趣推进实验室的程序库和工具,该套工具旨在使得开发基于 Android 的 C/C++ 应用变得更加容易。

Fplutil 由四个主要部分构成:build_all_android.py、buildutil、libfplutil 和 android_ndk_perf.py。

build_all_android.py

该构建脚本使得开发者能够通过命令行构建、安装和运行原生应用程序。该脚本可以基于 Android NDK 构建 C/C++ 应用程序,有助于实现构建的自动化,并简化开发者的编译 / 运行循环流程。

该脚本还支持通过命令行设定构建的相关设置,如设置调试模式、优化级别等等。并且它还支持多设备的同时使用。

buildutil

buildutil 是一套 Python 模块,这些模块能够简化使用编译工具 CMake 编写持续集成自动化脚本的过程。使用 Buildutil 构建 / 归档 Android 应用程序的例子如下:

  1. 第一步是创建一个 android.BuildEnvironment 实例,该实例用来执行剩余部分的构建操作,代码如下:
    parser = argparse.ArgumentParser()buildutil.android.BuildEnvironment.add_arguments(parser)
    args = parser.parse_args()
    env = buildutil.android.BuildEnvironment(args)
    
  2. 一旦该步完成,接下来要做的是使用支持构建原生(C/C++)组件的 ndk-build 和支持构建 Java 组件和 APK 的构建工具 Ant 来构建应用程序,代码如下。
    (rc, errmsg) = env.build\_all()
  3. 最后,APK 文件就可以归档为一个 ZIP 文件
    env.make\_archive([‘apks'],‘output.zip',exclude=[‘objs', ‘objs-debug'])

除了支持基于 Android 的 NDK 构建外,该工具还支持 Linux、OS X 和 Windows 环境下的构建。

libfplutil

libfplutil包含着一个原生的 Android NDK 模块,该模块构成了两个静态程序库,即 libfplutil_main 和 libfplutil_print, 它们将使 C/C++ 应用程序的编写变得更加容易:

  • libfplutil_main 实现了一个 Android NativeActivity 的入口点 android_main(),该入口点调用了传统 C/C++ 的入口点 int main(),这样就使得使用入口点 int main()(就像任何一个标准的 C 应用程序一样)编写应用程序、连接到该程序库(参考 Linking)并使其运行在 Android 上成为可能。
  • libfplutil_print 实现了一套功能的包装,这些功能能够将信息写到标准输出流。这就使得使用 printf 往终端环境进行写操作的应用程序能够将自己的输出重定向到 Android 日志中。

通过连接到 libfplutil,典型的 Hello,World 程序无需任何改变就能够在 Android 上进行编译及运行。

android_ndk_perf.py

android_ndk_perf.py 是一个桌面工具,该工具能够帮助原生(C/C++)开发者测量基于 Android 的应用程序的 CPU 利用率,从而指导他们的优化工作。Android_ndk_perf 能够运行在开发者的工作站上,以收集运行在 Android 设备上应用程序的运行轨迹。应用程序的轨迹被收集后,就能够使用 Linux Perf 的命令来检测收集的数据,或者生成一个在 Web 浏览器中显示、用于检测数据的 HTML 可视化视图。

Libfplutil 可从GitHub上下载,并且 GitHub 上还提供了相关文档

乐趣推进实验室是一个 Google 的团队,该团队致力于推进基于 Android 和其他平台下的游戏开发。今年早些时候,他们开源了一个 2D 物理引擎LiquidFun 1.1,该引擎包含流体模拟功能。

查看英文原文:New Tools from Google to Help Developing C/C++ Applications on Android


感谢邵思华对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

持续集成C++Android语言 & 开发