用Android Studio 把C++转 SO文件 供unity调用

参考链接:https://blog.csdn.net/cqjianx/article/details/79626374

使用的Android Studio 版本是3.5.2,使用CMakeLists.txt的方式.

1.新建Native c++工程 

用Android Studio 把C++转 SO文件 供unity调用_第1张图片

2.确认是已经安装了ndk , File->ProjectStructure,没有的话到SDKManager下载

用Android Studio 把C++转 SO文件 供unity调用_第2张图片

用Android Studio 把C++转 SO文件 供unity调用_第3张图片

3.新建Module

用Android Studio 把C++转 SO文件 供unity调用_第4张图片

4.新建JIN文件夹存放C++文件,并新建CMake文件,把工程自带的CMake文件内容复制过来并做修改

用Android Studio 把C++转 SO文件 供unity调用_第5张图片

用Android Studio 把C++转 SO文件 供unity调用_第6张图片

用Android Studio 把C++转 SO文件 供unity调用_第7张图片

5.新建Java类,代码如下

用Android Studio 把C++转 SO文件 供unity调用_第8张图片

6.修改build.gradle,添加以下两处

用Android Studio 把C++转 SO文件 供unity调用_第9张图片

7.直接build,然后再build/intermediates/cmake/debug/obj/armeabi-v7a 下找到so文件,复制到Unity工程的Plugins/armeabi-v7a目录下,并修改设置如下:

用Android Studio 把C++转 SO文件 供unity调用_第10张图片

8.测试脚本内容如下:

using UnityEngine;
using System.Runtime.InteropServices;
using System;

public class TestSo : MonoBehaviour {
    [DllImport("TestSo", CharSet = CharSet.Ansi)]
    public static extern IntPtr MyLog([MarshalAs(UnmanagedType.LPStr)]string content);

    private string m_ShowContent;

    void OnGUI() {
        if (GUI.Button(new Rect(100, 100, 200, 200), "Test so")) {
            m_ShowContent = Marshal.PtrToStringAnsi(MyLog(" hello world !"));
        }

        GUI.Label(new Rect(100, 50, 200, 50), m_ShowContent);
    }
}

9.打包的安卓平台测试

用Android Studio 把C++转 SO文件 供unity调用_第11张图片

 

补充:build.gradle的sdk版本应该尽量用低版本,否则低版本安卓系统会报错

用Android Studio 把C++转 SO文件 供unity调用_第12张图片

你可能感兴趣的:(用Android Studio 把C++转 SO文件 供unity调用)