基本是参考这篇文章:http://blog.sina.com.cn/s/blog_9e5d42ee0102vvtg.html,进行了增删一波。

大略说一下基本步骤:1.下载mono源码,修改源码,编译得到libmono.so,替换掉打包机上(开发机就没必要了)unity安装目录下的libmono.so;

          2.在你项目检查版本控制那里,如果dll更新了,把路径"/data/data/packname/files"下的Assembly-CSharp.dll删掉,

           下最新的dll扔到该路径,下完后设置本地版本为最新版本;

          3.调用sdk接口重启游戏。

下面细说:

1.

  1)去github下mono源码(这里要注意,一定要下对应你Unity版本的mono)

  下mono地址:https://github.com/Unity-Technologies/mono ,下对应mono版本。

  (查找自己unity对应mono版本:)

  2)修改mono源码:

  在加载Assembly-CSharp.dll的地方判断如果加载的字节流名字是Assembly-CSharp.dll就加载你所存的dll,
把该dll的字节流换掉传入的Assembly-CSharp.dll的字节流(记得释放内存),代码如下:

MonoImage *
mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy,
      MonoImageOpenStatus *status, gboolean refonly, const char *name)
{
//修改开始1
int datasize = ;
if(strstr(name,"Assembly-CSharp.dll")){
//重新计算路径,把/data/data/packname/files/Assembly-CSharp.dll加载到data中
const char* _pack = strstr(name,"com.");
const char* _pfie = strstr(name,"-");//这个我不清楚,记住即可
char _name[];
memset(_name,,);
int _len0 = (int)(_pfie - _pack);
memcpy(_name , "/data/data/",);
memcpy(_name + , _pack,_len0);
memcpy(_name + + _len0 ,"/files/Assembly-CSharp.dll",); g_message("momo: path = %s\n", _name); char* bytes = ReadStringFromFile (_name,&datasize);//这个自己实现,不贴代码了,本文开头引用的那篇文章有
if(datasize > ){
data = bytes;
data_len = datasize;
//data[0] -= (char)getKey();
//g_message("momo: key = %d\n", getKey());
}
}
//修改结束1
...
//修改开始2
if(datasize > && data != ){
g_free (data);
}
//修改结束2
}

  3)编译得到libmono.so,

  编译可参考(如果下面链接失败了,直接到http://www.luzexi.com/unity3d这里看目录找):

http://www.luzexi.com/unity3d/%E6%B8%B8%E6%88%8F%E6%9E%B6%E6%9E%84/%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF/2015/04/11/Unity3D-%E9%87%8D%E6%96%B0%E7%BC%96%E8%AF%91Mono%E5%8A%A0%E5%AF%86DLL.html

  编译成功后得到libmono.so, 替换掉unity安装目录下的libmono.so,要保证换掉后能用啊,不能用基本是下的mono版本不对,搜索解决。

2.这个就是项目的东西了,也只是版本控制的一个小点,比资源版本控制简单多了,可以看一下你所在项目的版本控制代码就好(版本控制一般包括资源版本,apk版本,dll版本,配置文件版本等),基本就是把你的dll放到/data/data/packname/files/下让修改后的mono源码使用。

3.这个不用说了吧。

unity3d android动态更新dll的更多相关文章

  1. Unity3D Android动态反射加载程序集

    这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...

  2. 在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...

  3. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

  4. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  5. Android Handler传递参数动态更新UI界面demo

    package com.example.demo_test; import android.app.Activity; import android.os.Bundle; import android ...

  6. Android ListView动态更新数据

    ListView就是可以显示一行行Item的控件,有时候数据非常多,通常需要分页显示,但为了减少用户的输入,我们可以动态更新ListView,把下一页要显示的数据的添加到当前ListView中. 先看 ...

  7. Android UI:机智的远程动态更新策略

    问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...

  8. Android零基础入门第44节:ListView数据动态更新

    原文:Android零基础入门第44节:ListView数据动态更新 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是 ...

  9. Android零基础入门第67节:RecyclerView数据动态更新

    列表的数据往往会跟随业务逻辑不断刷新,所呈现出来的数据需要动态更新,那么RecyclerView是如何动态更新数据的呢? 之前在学习ListView的时候如果数据改变,需要调用notifyDataSe ...

随机推荐

  1. Redis服务之高可用组件sentinel

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13419690.html:今天我们来聊一下redis ...

  2. Android VideoView未解决,动态读取权限、BottomNavigationView的用法

    昨天想写的,但是因为Video的毛病,是真找不出为啥了.百度也没用,学长也不清楚. 百度了那么久,大概得出结论,电脑的视频是不能用它来播放的... ..经过两天的奋斗,我居然搞定了,我的视频终于出来了 ...

  3. 034_go语言中的工作池

    代码演示 package main import "fmt" import "time" func worker(id int, jobs <-chan ...

  4. Linux学习笔记之如何设置vim中的格式如行号等

    在我们编写代码程序时,我们时常想追求更好的格式,下面写一下我认为挺实用的格式命令以及如何更改 如果我们打开vim在其命令模式中输入格式命令时,下一次重新打开vim还是会和原先一样,所以我们需更改其配置 ...

  5. PyTorch 学习

    PyTorch torch.autograd模块 深度学习的算法本质上是通过反向传播求导数, PyTorch的autograd模块实现了此功能, 在Tensor上的所有操作, autograd都会为它 ...

  6. XCTF-WEB-高手进阶区-NaNNaNaNNaN-Batman-笔记

    上来直接百度先搜下Batman -_-|| 不存在的传令兵么 本身是下载下来了一个文件web100 打开发现是如下内容 可以看出这个是个脚本语言,因此尝试修改后缀为html,发现是一个OK框 现在是想 ...

  7. 算法学习笔记:最近公共祖先(LCA问题)

    当我们处理树上点与点关系的问题时(例如,最简单的,树上两点的距离),常常需要获知树上两点的最近公共祖先(Lowest Common Ancestor,LCA).如下图所示: 2号点是7号点和9号点的最 ...

  8. Linux探测工具BCC(可观测性)

    BCC(可观测性) 目录 BCC(可观测性) 简介 动机 版本要求 安装 安装依赖 安装和编译LLVM 安装和编译BCC windows源码查看 BCC的基本使用 工具讲解 execsnoop ope ...

  9. C#LeetCode刷题之#788-旋转数字(Rotated Digits)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3967 访问. 我们称一个数 X 为好数, 如果它的每位数字逐个地 ...

  10. openvswitch ovs-appctl 使用

    参考链接:https://www.cnblogs.com/zqyanywn/p/10501590.html 1. fdb/show bridge 列出指定桥上每个MAC直至与VLAN的对应信息,并且包 ...