1.so源文件

1.1 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);EXPORT_DLL char* GetPkey();EXPORT_DLL char* GetIVkey();
}#endif

1.2 NaviteCode.cpp

#include "NaviteCode.h"char data[16];
extern "C" {int MyAddFunc(int _a, int _b){return _a + _b;}char* GetPkey() {//return new char[8]{ 'a','b','c','a','s','s','s','s' };data[0] = 'a';data[1] = 'b';data[2] = 'c';data[3] = 'a';data[4] = 's';data[5] = 's';data[6] = 's';data[7] = 's';return data;}char* GetIVkey() {//return new char[16]{ '1','1','1','1','1','1','1','1','8','7','6','5','4','3','2','1' };data[0] = '1';data[1] = '1';data[2] = '1';data[3] = '1';data[4] = '1';data[5] = '1';data[6] = '1';data[7] = '1';data[8] = '8';data[9] = '7';data[10] = '6';data[11] = '5';data[12] = '4';data[13] = '3';data[14] = '2';data[15] = '1';return data;}
}

注意:用 new char 将会导致 生成的 .so 体积变大 

新建一个文件夹native,把 NaviteCode.h 和 NaviteCode.cpp 都丢进去,同时新建两个文件 Android.mk 和 Application.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 arm64-v8a x86

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

成功后会生成 libs 文件夹

复制对呀 .so  到安卓的对应文件夹

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

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

Unity C#调用so文件相关推荐

  1. dll放在unity哪个文件夹下_unity中调用dll文件总结

    unity中调用dll文件总结 根据收集的资料,对unity中调用dll文件进行总结,目前常用的两种,在给出vs中封装dll文件的步骤. 一.调用c#中的dll文件 1.1封装dll文件 首先新建一个 ...

  2. Unity中调用手机中的粘贴功能

    最近有个小需求,就是点击一个按钮,然后复制整个文本中的内容..然后根据网上大神们的教程找到了思路.. https://blog.csdn.net/u011416077/article/details/ ...

  3. Unity PC 打包后文件夹

    1.unity官方文档是这么说的: 以 Windows 独立平台为目标构建 Unity 项目时,Unity 会生成以下文件(其中"ProjectName"为项目名称): Proje ...

  4. Unity资产,特殊文件夹以及重要路径

    本文将介绍Unity中的资产,Unity中的特殊文件夹,Unity的一些路径对应各个平台上的具体路径. 第一部分就是介绍资产Assets--哪些是Assets,Assets类型具体有哪些,如何在编辑器 ...

  5. Unity Android平台读取文件时添加了权限依然报错“Access to the path is denied“

    Unity 调用Android读取文件"Access to the path is denied" 添加权限依然报错 记录一下Unity 调用Android读取文件"Ac ...

  6. photon Unity RPC 调用流程

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51425225 作者:car ...

  7. thinkphp 调用php文件上传,ThinkPHP实现带验证码的文件上传功能实例

    本文实例讲述了ThinkPHP实现带验证码的文件上传功能.分享给大家供大家参考.具体实现方法如下: ThinkPHP上传文件非常的简单我们只要调用一个文件上传类UploadFile就可以快速的实现上传 ...

  8. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  9. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  10. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

最新文章

  1. number to string - LeetCode【数字 = 字符串】
  2. Elasticsearch-06 Spring Boot 2.0.9整合ElasticSearch5.6.16
  3. SAP ERP物料和SAP Cloud for Customer的同步
  4. python中count的作用_python中函数COUNT()的功能是什么
  5. 使用Docker容器和Java EE进行持续交付
  6. JavaScript中的match方法和search方法
  7. cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)
  8. 语音识别电路设计图集锦 - 嵌入式类电子电路图 - 电子发烧友网
  9. tidyverse —— dplyr包
  10. Postman如何生成测试报告
  11. 从发不起工资到融资1650万,逸创创始人叶翔如何熬过来的?
  12. apache mod_rewrite 简略说明
  13. 当“长期主义”遇上“流量生意”,轻松筹与水滴筹谁更胜一筹?
  14. TrustSystem声学测试指导
  15. 华为RH2288 V3服务器新加硬盘不识别
  16. 小程序上线发布后,实现版本自动更新,用户无感知
  17. supermap数据处理
  18. 35岁程序员被公司辞退,生活压力太大痛哭,中年危机如何自救?
  19. Kubernetes(三):k8s集群部署之kubeadm
  20. 飞机上的飞行数据记录处理运算 ReXgen 2 IMU:达到新的高度 惯性导航 航位运算

热门文章

  1. 从娃娃抓起:学习AI的最佳时机是初中时期
  2. MIMO-OFDM1.1无线信道python
  3. c语言输出一个除法的小数点后100位
  4. Codeforces 935 C Fifa and Fafa
  5. 解决Unity3D操作界面字体模糊的问题
  6. java单例模式线程安全
  7. 大数据开发复习第一篇(MySQL篇)
  8. 人工智能学会数学推理了,考试成绩比CS博士还高
  9. 成都市金牛区专利授权资助申报条件奖补
  10. 【大虾送书第十二期】MLOps快速成为机器学习生产落地中不可或缺的关键能力