VS2019 C++的跨平台开发——Android .so开发

VS2019 C++的跨平台开发——Android .so开发

https://blog.csdn.net/luoyu510183/article/details/94590497

Android环境配置

1.先打开VS installer

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

2.选中C++移动开发wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

我这里用的是Unity下载的NDK,SDK,JDK。路径大概在:Unity\xxxxxxxx\Editor\Data\PlaybackEngines\AndroidPlayer
创建.so安卓项目

1.

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

2.创建好后如下所示

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

3.配置项目属性:

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​

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

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

   
    //SharedObject4.cpp/
   
    #include "SharedObject4.h"
    #include <math.h> //增加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"
        #endif
            LOGI("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这个库,否则会有如下的链接错误:

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

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

还有一种方式:

4.记得更改平台配置:

5.最后生成解决方案:

查看.so的接口

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

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

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

查看mn的命令用法:

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

使用.so

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

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

3.如果是Unity的Android C#项目,操作基本和上一篇文章一样,只需要[DllImport("SharedObject4")]就行。注意,Java使用JNI可以导入.so的类结构,C#里面还是按照上一篇文章的方式去解析.so。(VS2019 C++的跨平台开发——C# WPF)
————————————————
版权声明:本文为CSDN博主「Mr_L_Y」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoyu510183/article/details/94590497

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值