VS2019 C++安卓控制台程序开发

前言

之前有介绍过在VS上开发安卓的.so, VS也提供了内嵌的项目模板, 非常简单. 唯一的不足之处在于, 开发的.so总得要配合某个APK来调用进行调试, 与我们开发PC应用很不同, 不能在控制台直接观测程序运行结果.

能否在安卓上直接开发控制台应用呢? 答案是肯定行. 这个我也给VS的团队提过意见, 希望能够补充这一块的项目模板, 毕竟安卓的C++和Java应用都有了, C++的.so, .a库也有了, 唯独缺少了控制台应用. 但是人微言轻, 目前也没啥进展, 所以就提供下我自己的方法, 用于安卓的C++控制台应用开发.

另外补充一句: 控制台应用仅适合用作调试目的, 不合适作为产品最终形态开发. 调试完成后需要生成.so或者.a集成到安卓apk中.

准备

虽然题目是VS2019, 但这只是表明我当前的VS版本, 实际需要的是VS的CMake项目模板, 这个应该从VS2017起就开始支持了.

另外由于是开发安卓的控制台应用所以还需要两个东西:

1. NDK(https://developer.android.com/ndk/downloads)

2. ADB(https://developer.android.com/studio/releases/platform-tools)

这两个东西请自行下载.

我这里的版本是 ndkVersion "21.0.6352462", adb使用的是Android Studio自带的. adb在Android studio的程序位置是: C:\Users\<你的用户名>\AppData\Local\Android\Sdk\platform-tools


这里我默认你已经完成了这两个工具的下载. 应该是不需要安装的,直接解压就可以了. 我的ndk和adb如下:

但是为了让VS能知道这两个东西的位置, 我们需要把他们添加到系统环境变量里面:

1. 打开系统环境变量:

2. 添加上面我的两个路径到Path下:

注意看路径, 如果你在对应路径下有以下三个.exe则没问题:

1. make.exe

2. clang.exe clang++.exe clang-cl.exe

3. adb.exe

最后顺便再说一句VS2019或者2017需要安装cmake扩展, 这个在我之前的文章里有介绍, 如果对VS的Cmake流程不清楚的, 建议先看看我之前的文章.


到这里准备工作就结束了, 顺便总结下: 安卓的C++编程属于Native语言, 需要用到NDK(N for native), 这个是安卓的native开发包, 里面主要包括了两个编译器: gcc和clang. 最新的安卓已经不支持gcc了,所以推荐使用clang作为编译器. 编译器编译好以后需要用到 Unix makefile作为程序的生成器, Windows下就用ndk自带的make.exe来替代make.而adb是作为与安卓设备的通讯调试工具, 可以进行文件的传输, 以及用shell启动对应的控制台应用打印出它的控制台输出到PC.

开始

1. 创建一个cmake项目

2. 首先说下代码部分和Windows或者Linux控制台一样的, 没有什么区别:

3. CMakeLists也一样不需要更改:

4. 重点在于修改配置:

a. 点击管理配置

b.这个界面下目前VS只提供了Linux和Windows的配置, Android的配置需要我们自己加

c. 修改Android-v8a-Debug的配置名

d. 清空工具集, 因为这里我们使用的是外部工具集, 不在VS的预定义里面:

下图中的"gcc-arm"改为""

ctrol+S 保存,然后关闭这个json文件

e. 再次打开管理配置, 检查下工具集是否为空

f. 填写工具链的cmake文件位置:

填写到下面:

g. 更新Cmake cache

成功以后这里也会切换成我们的配置名 Android-v8a-Debug:

5. 全部生成:

成功的控制台信息:

6. 发送到Android设备上运行:

a. 找到对应的控制台程序(Cmake的文件结构我之前的文章也有详细说明):

b. 在当前文件夹位置,运行adb push命令:

完整的命令是adb push AndroidTest /data/local/tmp

AndroidTest是当前PC的文件位置, /data/local/tmp是安卓端的目标位置. 注意其他的文件夹可能会有权限问题, /data/local/tmp下是调试安卓控制台程序不错的选择之一.

c. 使用adb shell运行我们push到安卓端的应用程序:

完整的命令是adb shell "cd /data/local/tmp && chmod 777 AndroidTest && ./AndroidTest"

adb shell 后面的""里的字符串就是安卓端的shell命令. &&表示三条命令依次执行: 首先切换路径到/data/local/tmp, 然后更改我push过去的应用程序的权限, 如果出现 permission denied, 那应该和这个chmod 777有关系. 最后./AndroiTest就是运行我们的控制台应用.


到这里, 整个VS生成安卓控制应用的流程就展示完了, 如果你有我之前CMake项目的文章的基础应该觉得很简单, 只是更改了配置文件而已.

另外至于调试的问题, 我在launch.vs.json下面只找到了RemoteLinux的配置, 没有安卓相关的配置, 所以也没继续深入弄下去. 因为VS还有另外一个项目可以实现真机调试安卓的C++代码, 这个就留到下一次的文章来讲.

后话

最后再补充三个cmake的参数, 有些可能是需要的.

-DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=23  -DANDROID_TOOLCHAIN=clang

其中第一个-DANDROID_ABI=arm64-v8a这个很重要, 生成64位arm64-v8a还是32位armeabi-v7a的程序就靠这个宏.

第二个-DANDROID_NATIVE_API_LEVEL=23这个我目前还未发现有用的地方

第三个 -DANDROID_TOOLCHAIN=clang这个应该可以不要, 原来可以在gcc和clang中选择, 现在应该都使用clang了.

如果是32位应用的话就把上面的-DANDROID_ABI=arm64-v8a改为-DANDROID_ABI=armeabi-v7a. 改完后记得保存并更新CmakeCache.

还有CmakeBuildType可以在这里选择:

通过这两种的组合你应该可以新增Android-v7a-Release等等配置.


真是要命, 11点50突然想起写这篇文章, 写完就到一点了. 早点休息吧, 明天还要去练习场, 练练我的一号木.


关闭VS项目的时候, 突然又想起来还有一个事情.

上面还没有用到Make.exe. 上面的生成器是Ninja. 

其实用这个也没啥问题, 现在很多都用这个作为生成器. 但是既然一开始介绍了make, 最后再示范下怎么用makefile作为生成器.

1. 在配置文件中, 展开高级设置:

2. 选中Unix Makefiles:

3. 修改以后, 保存并更新CMake Cache. 再次运行全部生成:

现在这个目录下才是makefile的文件.

你也可以在当前路径下,直接运行make进程生成:

这里和Linux下一样, 修改cpp文件后直接运行make就行了,它会自动编译修改的cpp文件重新链接到程序. 

至于是使用控制台的make命令还是,在VS下运行全部生成就看你个人喜好了.

猜你喜欢

转载自blog.csdn.net/luoyu510183/article/details/107969469