Unity Android调用动态库so

本文主要是在Android环境下,调用so库,下面就来看下调用动态库so的步骤。

一、生产so库

1.用的代码和Windows篇的产不多,不过稍作修改,不需要导出dll了,
NaviteCode.h
 
   
AخA
 
1
    #ifndef __NativeCode_H__
2
    #define __NativeCode_H__
3
    #if 0
4
    #define EXPORT_DLL __declspec(dllexport) //导出dll声明
5
    #else
6
    #define EXPORT_DLL 
7
    #endif
8
    extern "C" 
9
        EXPORT_DLL int MyAddFunc(int _a, int _b);
10
    
11
    #endif

NaviteCode.cpp
 
   
7
 
1
    #include "NaviteCode.h"
2
    extern "C" 
3
        int MyAddFunc(int _a, int _b)
4
        
5
            return _a + _b;
6
        
7
    

2.新建一个文件夹native,把 NaviteCode.h 和 NaviteCode.cpp 都丢进去,同时新建两个文件 Android.mk 和 Application.mk(ndk编译需要的文件)
Android.mk
 
   
8
 
1
LOCAL_PATH := $(call my-dir)
2
include $(CLEAR_VARS)
3
LOCAL_MODULE     :=  NativeCode
4
LOCAL_C_INCLUDES := $(LOCAL_PATH)
5
LOCAL_SRC_FILES  := NaviteCode.cpp
6
LOCAL_LDLIBS     := -llog -landroid
7
LOCAL_CFLAGS    := -DANDROID_NDK
8
include $(BUILD_SHARED_LIBRARY)
生成的so全名是 libNativeCode.so,但在c#中加载还是按 NativeCode 加载

Application.mk
 
   
6
 
1
APP_STL := gnustl_static
2
APP_CPPFLAGS := -frtti -std=c++11
3
APP_PLATFORM := android-19
4
APP_CFLAGS += -Wno-error=format-security
5
APP_BUILD_SCRIPT := Android.mk
6
APP_ABI := armeabi-v7a x86
指定生产的不同cpu架构的so库 armeabi-v7a 和 x86,(其实APP_CPPFLAGS 中没用到c++11的东西和运行时识别rtti,不过无妨)

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

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

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

5.然后在c#脚本中调用下这个方法
 
   
9
 
1
public class testDll : MonoBehaviour 
2
    [DllImport("NativeCode")]
3
    public static extern int MyAddFunc(int x, int y);
4
    // Use this for initialization
5
    void Start () 
6
        int ret = MyAddFunc(200, 200);
7
        Debug.LogFormat("--- ret:{0}", ret);
8
    
9

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

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

三、设置打包参数

1.File->Build Settings

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

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

四、生产apk


五、测试以下

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

从输出日志上看调用成功
完成

六、遇到的小坑

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

2.Android Studio 连接不上 夜神模拟器 调试
解决办法:
  • 打开到夜神安装目录(如cd D:\Program Files\NOX\Nox\bin)
  • 执行命令:nox_adb.exe connect 127.0.0.1:62001,连接模拟器
www.nainaitea.com
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值