这篇介绍下怎么用VS开发Android使用的.so动态链接库文件。


Android环境配置

1.先打开VS installer

VS2019 C++的跨平台开发——Android .so开发_第1张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.选中C++移动开发VS2019 C++的跨平台开发——Android .so开发_第2张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.如果VS没有下载NDK和SDK的,需要在VS里面配置

VS2019 C++的跨平台开发——Android .so开发_第3张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

VS2019 C++的跨平台开发——Android .so开发_第4张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

我这里用的是Unity下载的NDK,SDK,JDK。路径大概在:Unity\xxxxxxxx\Editor\Data\PlaybackEngines\AndroidPlayer


创建.so安卓项目

1.

VS2019 C++的跨平台开发——Android .so开发_第5张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.创建好后如下所示

VS2019 C++的跨平台开发——Android .so开发_第6张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

这时候先不要急着开发,需要手动运行一次重定向到你的NDK版本,如下:

VS2019 C++的跨平台开发——Android .so开发_第7张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.配置项目属性:

VS2019 C++的跨平台开发——Android .so开发_第8张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

一般就会修改上面的三个属性。

3.再简单介绍下怎么链接其它.so文件,这里和Windows开发有点区别。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////SharedObject4.cpp/////////////////////////////////////////////////////////////////////////////////////////////////////////#include "SharedObject4.h"#include  //增加math头文件#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "SharedObject4", __VA_ARGS__))#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "SharedObject4", __VA_ARGS__))extern "C" {/*此简单函数返回平台 ABI,此动态本地库为此平台 ABI 进行编译。*/const char * SharedObject4::getPlatformABI(){#if defined(__arm__)#if defined(__ARM_ARCH_7A__)#if defined(__ARM_NEON__)#define ABI "armeabi-v7a/NEON"#else#define ABI "armeabi-v7a"#endif#else#define ABI "armeabi"#endif#elif defined(__i386__)#define ABI "x86"#else#define ABI "unknown"#endifLOGI("This dynamic shared library is compiled with ABI: %s", ABI);float t = sqrtf(12.f);//使用math.h中的数学函数return "This native library is compiled with ABI: %s" ABI ".";}void SharedObject4(){}SharedObject4::SharedObject4(){}SharedObject4::~SharedObject4(){}}

如上所示,在Windows平台下的C++开发只需要一个math.h头文件就可以使用sqrtf这个函数了。但Android里面不一样,需要链接m.so这个库,否则会有如下的链接错误:

在项目属性中,添加上第三方库的依赖:

VS2019 C++的跨平台开发——Android .so开发_第9张图片

上面的m就是链接了 libm.so。

还有一种方式:

VS2019 C++的跨平台开发——Android .so开发_第10张图片

4.记得更改平台配置:

VS2019 C++的跨平台开发——Android .so开发_第11张图片

5.最后生成解决方案:

VS2019 C++的跨平台开发——Android .so开发_第12张图片


查看.so的接口

我这里用的是Linux nm命令查看的。建议有开发需求的,在win10上安装一个ubuntu系统。

VS2019 C++的跨平台开发——Android .so开发_第13张图片

Win10上Ubuntu可以直接访问Win10的硬盘资源,比较方便,如下,我先进入Windows的D盘目录:

VS2019 C++的跨平台开发——Android .so开发_第14张图片

Windows的路径只需要加上/mnt/就行了。

查看mn的命令用法:

VS2019 C++的跨平台开发——Android .so开发_第15张图片

最后查看.so的导出符号,这里为了方便,我把生成的libSharedObject4.so放在D盘根目录下:

VS2019 C++的跨平台开发——Android .so开发_第16张图片


使用.so

1.在Android Studio里面就使用JNI加载。

2.如果是另一个C++ Android项目,那么直接参照上面的链接器部分,把SharedObject4加入到依赖项里。

3.如果是Unity的Android C#项目,操作基本和上一篇文章一样,只需要[DllImport("SharedObject4")]就行。注意,Java使用JNI可以导入.so的类结构,C#里面还是按照上一篇文章的方式去解析.so。(VS2019 C++的跨平台开发——C# WPF)

更多相关文章

  1. Android ListView滑动过程中图片显示重复错乱闪烁问题解决
  2. Android平台架构
  3. Visual Studio 跨平台開發實戰(5) - Xamarin Android 多頁面應用
  4. Android Studio2.3+AndroidSDK安装【图文教程】附资源链接
  5. Visual Studio 跨平台開發實戰(4) - Xamarin Android 基本控制項
  6. Android TextView使用HTML处理字体样式、显示图片等
  7. Android处理大图片
  8. 制作 Nine-Patch 图片

随机推荐

  1. JavaScript打印任意奇数行菱形
  2. Java 网络 IO 模型
  3. 解决Eclipse建立Maven项目后无法建立src/
  4. JAVA WEB 实现第三方登录 -- qq篇
  5. 在docker上编译openjdk8
  6. 教您使用java爬虫gecco抓取JD全部商品信
  7. C#/Java 调用WSDL接口及方法
  8. 数据结构:关于重建二叉树的三种思路
  9. 记录一次LinkError排错:
  10. 201521123112《Java程序设计》第5周学习