当前位置: 首页 > news >正文

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

相关文章:

  • Unity3D研究院之IOS在Windows上查看日志就像Android的adb一样方便(一百零一)
  • 便捷的方式在手机上查看Unity3D的Console Log(调试信息 日志)
  • UE4基础:Do once节点
  • UE4流程控制
  • 【XLua】017-Lua访问C#:基类的属性,方法
  • xLua学习笔记_在C#脚本中使用xLua
  • xLua学习笔记(三) Lua调用C#代码
  • UE4引用资源小结
  • UE4 Rendering Dependency Graph
  • 分析 UObjecBaseUtility
  • 解析PAK文件
  • UE4资源热更打包工具HotPatcher
  • Unity游戏资源逆向工具
  • UE4 Pak 文件格式
  • 更新UnrealPakViewer工具
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【comparator, comparable】小总结
  • android图片蒙层
  • const let
  • javascript 总结(常用工具类的封装)
  • JavaScript函数式编程(一)
  • js递归,无限分级树形折叠菜单
  • spring security oauth2 password授权模式
  • SQLServer之索引简介
  • 阿里云购买磁盘后挂载
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 复杂数据处理
  • 看域名解析域名安全对SEO的影响
  • 利用DataURL技术在网页上显示图片
  • 两列自适应布局方案整理
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微信小程序设置上一页数据
  • 用简单代码看卷积组块发展
  • 优化 Vue 项目编译文件大小
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​卜东波研究员:高观点下的少儿计算思维
  • #1014 : Trie树
  • #考研#计算机文化知识1(局域网及网络互联)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #微信小程序:微信小程序常见的配置传旨
  • (31)对象的克隆
  • (52)只出现一次的数字III
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二十三)Flask之高频面试点
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (过滤器)Filter和(监听器)listener
  • (汇总)os模块以及shutil模块对文件的操作
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (三)模仿学习-Action数据的模仿
  • (转)创业家杂志:UCWEB天使第一步
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇