之前在Android Studio中编写NDK C/C++相关代码,通过Gradle和CMake编译成动态库,然后再利用JNI的方式进行调用。现在需要编译Android C/C++可执行程序,通过运行程序做一些小实验,而这些小实验都是纯C/C++编写,不包含任何Java代码,那么是否可以利用现成的环境进行开发呢?本文将一步步讲解怎样使用CMake编译Android可执行程序。
编译环境
- 通过Android Studio内置的SDK Manager下载NDK和CMake,可参考:下载NDK和构建工具;
- 把环境变量
ANDROID_SDK_HOME
指向Android SDK目录,并把ANDROID_SDK_HOME
添加到PATH
环境变量中。
HelloWorld
HelloWorld是每个程序员编写的第一个程序,因此本例也从HelloWorld开始。这里为了便于后续项目的编译和管理,首先新建文件夹helloworld,然后在此文件夹下编写helloworld_main.c源文件:
1 | #include <stdio.h> |
CMakeLists.txt
由于使用CMake进行编译可执行程序,需要配置文件CMakeLists.txt。在helloworld文件夹下编写CMakeLists.txt:
1 | # CMake最低版本号要求 |
build脚本
在执行cmake
命令生成Android可执行文件时需要带上长长的参数,为了简化此步骤,这里编写一个脚本build.bat:
1 | set abi=armeabi-v7a |
脚本中的3.10.2.4988404
指的是CMake的版本,需要根据实际下载的CMake版本进行修改。执行此脚本,将在helloworld/armeabi-v7a目录下生成helloworld可执行文件。
由于使用的是Windows系统,这里给出的是bat脚本,Linux/Mac的shell脚本可根据bat脚本进行相应的修改。
运行测试
使用Android手机通过USB数据线连接电脑,或者使用模拟器。将生成的helloworld可执行文件通过adb命令push到设备上:
1 | adb push helloworld /data/local/tmp |
使用adb shell
命令进入Android命令终端,在运行helloworld之前,先为helloworld文件添加可执行权限:
1 | chmod +x /data/local/tmp/helloworld |
执行helloworld
命令可以看到如下输出:
1 | /data/local/tmp/helloworld |
总结
编译Android可执行程序可以使用ndk-build,不过官方已经不推荐使用了;也可在Android源码的中进行编译,可是Android源码的编译环境也不容易搭建,如果已有编译环境的情况下另当别论;因此本例利用Android Studio中的CMake和NDK进行编译可执行文件,对于Android应用开发者来说是最便利的方法之一。