• 在Android环境下,调用so库
  • Windows编

1、生产so库

  • 用的代码和Windows篇的产不多,不过稍作修改,不需要导出dll了,
    NaviteCode.h

        #ifndef __NativeCode_H__#define __NativeCode_H__#if 0#define EXPORT_DLL __declspec(dllexport) //导出dll声明#else#define EXPORT_DLL #endifextern "C" {EXPORT_DLL int MyAddFunc(int _a, int _b);}#endif

    NaviteCode.cpp

        #include "NaviteCode.h"extern "C" {int MyAddFunc(int _a, int _b){return _a + _b;}}
  • 新建一个文件夹native,把 NaviteCode.hNaviteCode.cpp 都丢进去,同时新建两个文件 Android.mkApplication.mk(ndk编译需要的文件)
    Android.mk

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)LOCAL_MODULE     :=  NativeCode
    LOCAL_C_INCLUDES := $(LOCAL_PATH)
    LOCAL_SRC_FILES  := NaviteCode.cpp
    LOCAL_LDLIBS     := -llog -landroid
    LOCAL_CFLAGS    := -DANDROID_NDKinclude $(BUILD_SHARED_LIBRARY)

    生成的so全名是 libNativeCode.so,但在c#中加载还是按 NativeCode 加载

    Application.mk

    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti -std=c++11
    APP_PLATFORM := android-19
    APP_CFLAGS += -Wno-error=format-security
    APP_BUILD_SCRIPT := Android.mk
    APP_ABI := armeabi-v7a x86

    指定生产的不同cpu架构的so库 armeabi-v7ax86,(其实APP_CPPFLAGS 中没用到c++11的东西和运行时识别rtti,不过无妨)

  • cmd中cd到native目录下,运行命令编译
    ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk

    生产两个so
    C:\Users\Wilker\Desktop\native\libs\armeabi-v7a\libNativeCode.so
    C:\Users\Wilker\Desktop\native\libs\x86\libNativeCode.so

  • 附,在Linux中查看一下这个so中的函数
    libNativeCode.so 对到Linux中,输入命令 # nm -D libNativeCode.so

  • 然后在c#脚本中调用下这个方法

    public class testDll : MonoBehaviour {[DllImport("NativeCode")]public static extern int MyAddFunc(int x, int y);// Use this for initializationvoid Start () {int ret = MyAddFunc(200, 200);Debug.LogFormat("--- ret:{0}", ret);}
    }

2、拷贝 libs 目录到 Assets\Plugins\Android 目录下

动态库不同平台的存放规则,请看官网,https://docs.unity3d.com/Manual/PluginInspector.html


3、设置打包参数

File->Build Settings

然后点击 Player Settings,设置详细参数

其他的就没什么好设置的了,自己慢慢玩,这里只测试so用


4、生产apk


5、测试以下

我是安装到 夜神模拟器 上测试的,然后用 Android Studio 调试

从输出日志上看调用成功

done


6、遇到的小坑

  1. Found plugins with same names x86_64
    出现原因可能是之前有导出过x84的dll,而且存放so也不是在Android(大意了没照官方规则)

  2. Android Studio 连接不上 夜神模拟器 调试
    解决办法:

    1. 打开到夜神安装目录(如cd D:\Program Files\NOX\Nox\bin)
    2. 执行命令:nox_adb.exe connect 127.0.0.1:62001,连接模拟器,

unity-调用动态库so-android篇相关推荐

  1. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  2. 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )

    文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...

  3. 【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )

    文章目录 一.Windows 动态库简介 二.Visual Studio 调用动态库 一.Windows 动态库简介 在 C:\Windows\System32 目录中 , 存放着 Windows 中 ...

  4. linux用c++调用动态库

    1.3 用c++静态方式调用动态库libsthc.so: /*cpptest.cc*/    //linux下的c++后缀有cc,cxx, cpp #include "libsthc.h&q ...

  5. C#.net调用动态库dll注意事项

    C#.net调用动态库dll注意事项 本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案 场景 公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID ...

  6. Java调用动态库(转载)

    记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码.比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 M ...

  7. 利用JNative实现Java调用动态库

    由于项目要求,需要用Java调用windows的dll文件,查了一下,如果用JNI的话是比较麻烦的,在sourceforge.net上搜索了一下 "Java dll",首先出现的是 ...

  8. 动态调用动态库方法 .so

    2019独角兽企业重金招聘Python工程师标准>>> 关于动态调用动态库方法说明 一.       动态库概述 1.  动态库的概念 日常编程中,常有一些函数不需要进行编译或者可以 ...

  9. Java调用动态库 缺点,Java调用动态库所需要关心的有关问题

    Java调用动态库所需要关心的问题 标签: 无标签 利用JNative实现Java调用动态库(转) http://cctv663.blog.163.com/blog/static/1011921220 ...

  10. qt调用import sys库_QTCreator调用动态库实例

    在 linux 中, qt 里面已经集成了最新的开发平台 QT Creator ,下面是我练习调用动态 库( .so 文件)的例程: 1 .打开 QT Creator ,点击 File -> N ...

最新文章

  1. ceph存储 PG的状态机 源码分析
  2. 那个博士生以死控告的教授,被ACM撤销了会员资格
  3. OpenCV Cut Image via ROI 根据兴趣区域剪裁图片
  4. 用ByteArrayOutputStream解决IO流乱码问题
  5. cocos2d-x关于CCTableView的“乱序问题”的理解
  6. python实现通讯录代码
  7. ucgui添加自定义汉字库
  8. 12306网上买火车票怎么选择上中下铺
  9. python pip安装镜像源
  10. 慢慢说计网:HTTP 长短连接
  11. excel单元格内容拆分_Excel技巧:如何批量合并相同内容单元格?
  12. CFI Flash, JEDEC Flash ,Parellel Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系
  13. ElasticSearch(6.3.0)的配置和使用全过程
  14. OMAP3530资料
  15. 如何把项目上传到Gitee(全网最细)
  16. 小程序 朋友圈,点赞 ,评论,发布动态,功能,局部刷新数据之 -----评论
  17. Hexo博客主题Next添加动态线条背景canvas_nest
  18. 能否构成三角形的条件代码_平面几何之三角形篇
  19. 前58技术委员会主席多次强调的Java核心,你精通吗?
  20. 扫盲啦!!!回囙囜囝回囟因囡団囤囥囦囧囨囩囱囫回囮国困囱囲図囵囶囷囸囹

热门文章

  1. 吴恩达对话刘慈欣:让科幻更有勇气,让人工智能更有想象力
  2. ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)
  3. element-icon 图标大全
  4. STM32F767--->时钟
  5. 如何评价CVPR 2022的best paper?
  6. 共享单车、公交车辆位置、地铁等50+个交通数据集
  7. fedora19下修复grub——生命不息,折腾不止
  8. [TYVJ] P1423 GF和猫咪的玩具
  9. php程序主入口,主:(index.php)入口
  10. 朴实无华的取证 (数字取证)