unity-调用动态库so-android篇
来源:互联网 发布:ubuntu 界面时钟 编辑:程序博客网 时间:2024/05/16 07:20
- 在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 #endif extern "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.h 和 NaviteCode.cpp 都丢进去,同时新建两个文件 Android.mk 和 Application.mk(ndk编译需要的文件)
Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := NativeCodeLOCAL_C_INCLUDES := $(LOCAL_PATH)LOCAL_SRC_FILES := NaviteCode.cppLOCAL_LDLIBS := -llog -landroidLOCAL_CFLAGS := -DANDROID_NDKinclude $(BUILD_SHARED_LIBRARY)
生成的so全名是 libNativeCode.so,但在c#中加载还是按 NativeCode 加载
Application.mk
APP_STL := gnustl_staticAPP_CPPFLAGS := -frtti -std=c++11APP_PLATFORM := android-19APP_CFLAGS += -Wno-error=format-securityAPP_BUILD_SCRIPT := Android.mkAPP_ABI := armeabi-v7a x86
指定生产的不同cpu架构的so库 armeabi-v7a 和 x86,(其实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
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、遇到的小坑
Found plugins with same names x86_64
出现原因可能是之前有导出过x84的dll,而且存放so也不是在Android(大意了没照官方规则)Android Studio 连接不上 夜神模拟器 调试
解决办法:- 打开到夜神安装目录(如cd D:\Program Files\NOX\Nox\bin)
- 执行命令:nox_adb.exe connect 127.0.0.1:62001,连接模拟器,
- unity-调用动态库so-android篇
- Unity Android调用.so文件
- android 中调用 so 动态链接库
- Android app调用动态库so
- android java 调用 .so 动态库实例
- JNI调用动态库.so
- 动态库(.so)函数调用
- 动态库.so调用实例
- linux调用.so动态库
- 调用动态链接库*.so
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Android下使用dlopen函数动态调用.so链接库
- Android下使用dlopen函数动态调用.so链接库
- Android下动态链接库.so调用的简单例子
- 在android里调用第三方动态链接库.so
- Android studio通过JNI调用动态链接库SO
- Android下使用dlopen函数动态调用.so链接库
- 14. Yii 2.0 数据缓存
- 机器学习导论
- 【华为OJ】DNA序列
- MySQL多表查询
- Android开发笔记
- unity-调用动态库so-android篇
- centos7 删除mysql
- OC文件操作
- 网络爬虫简单功能工具类
- centos6中安装mysql
- JAVA学习笔记15:动态代理
- CentOS7用yum安装、配置MariaDB 10
- 在微服务架构中,我们还需要ESB吗?
- 大白话:DDD、微服务和容器技术三者的关系