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


Android环境配置

1.先打开VS installer

2.选中C++移动开发

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

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


创建.so安卓项目

1.

2.创建好后如下所示

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

3.配置项目属性:

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

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"#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这个库,否则会有如下的链接错误:

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

上面的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)

VS2019 C++的跨平台开发——Android .so开发相关推荐

  1. 基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础

    一.引言 首先,来聊聊我们现实中的QQ聊天,如下图所示,两个客户端分别表示聊天的两方,那么可能有人会想为什么中间多了个腾讯公司的服务器呢?因为我们的QQ软件是从腾讯公司下载下来的,它其实起到了中转站的 ...

  2. 基于VS2019 C++的跨平台(Linux)开发(1.2.2)——设备管理及文件IO

    接上一篇文章,我们来回顾作业以及学习其他的一些系统调用等等 Linux--设备管理及文件IO(一) 一.回顾作业 1.知识点 1.文件IO分类 ①纯文本文件:不能进行任何修饰,且只有文字的文件;如.c ...

  3. 基于VS2019 C++的跨平台(Linux)开发(1.5)——管道

    一.管道概述 1.1.管道概念 管道是Unix中最古老的进程间通信的形式.我们把从一个进程连接到另一个进程的一个数据流(文件IO流)称为一个"管道". 1.2.管道特点 管道是半双 ...

  4. 基于VS2019 C++的跨平台(Linux)开发(1.3.3)——进程管理

    接上一篇文章,先来回顾作业,再来学习守护进程 基于VS2019 C++的跨平台(Linux)开发(1.3.2)--进程管理 一.回顾作业 详解见以下链接 c++ 文件拆分与合并--结合linux进程管 ...

  5. 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)

    在写这篇文章之前,xxx已写过了几篇关于改音乐应用开发主题的文章,想要了解的朋友可以去翻一下之前的文章 Android应用开发--MP3音乐播放器界面计划(2) 2013年5月25日 简.美音乐播放器 ...

  6. Android游戏开发Android软件开发【教程三十篇】

    Android软件开发之发送短信与系统短信库解析(三十)  New Android软件开发之获取通讯录联系人信息(二十九)  New Android软件开发之PreferenceActivity中的组 ...

  7. android 计步器 开发,Android计步器开发

    本文只赘述Android计步器开发里计步的原理. 在Android4.4版本之后,新增了STEP_COUNTER和STEP_DECTECTOR STEP_COUNTER表示自从开机以来,你走的步数累计 ...

  8. android开发高级开发,Android多媒体开发高级编程 (Shawn Van Every) pdf扫描版

    <android多媒体开发高级编程--为智能手机和平板电脑开发图形.音乐.视频和富媒体应用>使用清晰.直观的示例介绍了android sdk中丰富的多媒体功能,有助于您开发能够创建.播放和 ...

  9. air 开发 android,简介开发运行于Android的AIR程序

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 简介开发运行于Android的AIR程序 最近终于有一些时间来玩玩,透过Flash CS5撰写一些AIR的程序放置到An ...

最新文章

  1. html标签库jar包,struts2的s标签库jar包
  2. 除了 MySQL 数据库,你还要了解的一些数据库
  3. C#中使用SendMessage进行进程通信,可发送字符串,结构体(不能发送类类型)。
  4. git编辑器选哪个_[Git]Git创建和修改代码库
  5. 提交本地项目到github
  6. 日期传递过程_买东西别再只看生产日期和保质期了!快算算你一天吃了多少添加剂?...
  7. 组合框载入数据库的内容
  8. python连接oracle报错tns_Python3操作oracle数据库及遇到的报错
  9. Maven学习总结(17)——深入理解maven灵活的构建
  10. hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计
  11. 基础html的网页,[网页设计]HTML基础(五)——
  12. 【排错】exchange2013不能显示所有OU
  13. CTP:rust封装找不到thostmduserapi_se、thosttraderapi_se问题
  14. 按首字母排序(汉字、英文、数字)简单实现
  15. Android多媒体框架
  16. Markdown+Flowchart流程图语法
  17. sudo进入root权限时,sudo :unable to resolve host me(此为你的Linux登录用户名): Connection timed out.
  18. BZOJ1415【NOI2005】聪聪和可可
  19. 期初余额录入功能暂时不能执行
  20. html5 游戏 算法,台球类html5游戏的AI设计与核心算法的实现

热门文章

  1. Visual Studio滚动条设置
  2. 网络ioctl实践1:获取网卡的MAC和IP
  3. DDoS攻击模拟与Metasploitable渗透
  4. 顺丰快递取件的产品流程bug,产品优化建议
  5. plotjuggler安装
  6. VIP之Clipper
  7. 百度地图开发之——百度地图鹰眼轨迹管理台DEMO-v3部署到服务器上
  8. 澳大利亚公司称与中石油达成巨额售气协议
  9. 万能 Makefile 模板
  10. 数据结构与算法-单链表的常见面试题(单链表的长度,单链表倒数第k个数据)