unity3d android动态更新dll

基本是参考这篇文章: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)

  查询自己Unity对应mono版本的方法:进入目录...\Unity\Editor\Data\Mono\bin,执行monop2 --runtime-version mono.exe,就会打印出来了

  下mono地址:https://github.com/Unity-Technologies/mono ,下对应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 = 0;
    if(strstr(name,"Assembly-CSharp.dll")){
        //重新计算路径
                 const char* _pack = strstr(name,"com.");
            const char* _pfie = strstr(name,"-");
            char _name[512];
            memset(_name,0,512);
            int _len0 = (int)(_pfie - _pack);
            memcpy(_name , "/data/data/",11);
            memcpy(_name + 11, _pack,_len0);
            memcpy(_name + 11 + _len0 ,"/files/Assembly-CSharp.dll",26);

        g_message("momo: path = %s\n", _name);

        char* bytes = ReadStringFromFile (_name,&datasize);//这个自己实现,不贴代码了,文章开始那篇文章有
        if(datasize > 0){
        data = bytes;
        data_len = datasize;
        //data[0] -= (char)getKey();
        //g_message("momo: key = %d\n", getKey());
    }
    }
    //修改结束1
    ...
    //修改开始2
    if(datasize > 0 && data != 0){
    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.这个就是项目的东西了,也只是版本控制的一个小点,比资源版本控制简单多了,可以看一下你所在项目的版本控制代码就好,基本就是把你的dll放到/data/data/packname/files/下让修改后的mono源码使用。

3.这个不用说了吧。

时间: 2024-10-28 09:43:29

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

unity3d android sdk更新下载

unity3d android sdk下载,在国内来说,访问不了外网,下载不到最新的sdk,对很多访问不了外网的开发者来说带来了很多麻烦,导致打版本各种出问题.这里我决定动态更新Android sdk 最新版本. 1> 版本:android-sdk_r24.0.2-windows 链接:http://pan.baidu.com/s/1mggMEko 密码:pn2c

Unity3D Android动态反射加载程序集

这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity工程,并打成assetBundle.(要把缀名改成.bytes,这个类型Unity才识别,才能打成assetbundle) 打bundle代码 #if UNITY_EDITOR [MenuItem("GameObject/BuildAsset")] static void BuildAss

Android ListView动态更新数据

ListView就是可以显示一行行Item的控件,有时候数据非常多,通常需要分页显示,但为了减少用户的输入,我们可以动态更新ListView,把下一页要显示的数据的添加到当前ListView中. 先看看效果: 需要注意的是在什么时候去更新数据 ,listVIew的setOnScrollListener监听是否滚到了最后一条记录, 取到的数据加到list中,最后记得调用adapter的notifyDataSetChanged,通知listview改变. 不废话,上代码. 主文件: mport ja

【腾讯Bugly干货分享】Android UI:机智的远程动态更新策略

Android UI:机智的远程动态更新策略 作者:王金波    腾讯Bugly特约撰稿人 1问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有未读信息提醒这样的"小红点"逻辑:一旦UI变化,"小红点"逻辑也要重新计算.如果不同的RD来维护这些代码,耦合性非常高,出错概率也很大.本文以自选股的个人页卡为例(界面如下图所

Android 动态类加载实现免安装更新

随着Html5技术成熟,轻应用越来越受欢迎,特别是其更新成本低的特点.与Native App相比,Web App不依赖于发布下载,也不需要安装使用,兼容多平台.目前也有不少Native App使用原生嵌套WebView的方式开发.但由于Html渲染特性,其执行效率不及Native App好,在硬件条件不佳的机子上流畅度很低,给用户的体验也比较差.反观Native App,尽管其执行效率高,但由于更新频率高而导致频繁下载安装,这一点也令用户很烦恼.本文参考java虚拟机的类加载机制,以及网上And

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

经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变.增加几行.或者删除几行,这就涉及到ListView数据的更新问题. 接下来通过一个简单的示例程序来学习ListView的数据更新. 继续使用WidgetSample工程,在app/main/res/layout/目录下创建updatedata_layout.xml文件,在其中填充如下代码片段:

Android 多语言动态更新方案探索

本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/jG8rAjQ8QAOmViiQ33SuEg作者:陈龙 最近做的项目需要支持几十种语言,很多小语种在不认识的人看来跟乱码一样,,翻译一般是由翻译gongsi翻译的,翻译完成后再导入到项目里面,这就容易存在一些问题. 一.问题一:翻译容易出错 翻译的流程是客户端开发编写中文文案---翻译成英文----外包翻译根据英文字符串翻译小语种,在这个流程中,有些多义词和一些涉及语境的词就很容易翻译错误.

android中实现service动态更新UI界面

案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务. 注册BroadcastReceiver 在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播. @Override protected void onStart() {//重写onStart方法 dataReceiver = new DataReceiver(); IntentFilter filter = new Intent

android开发中 如何动态更新TextView的内容?

============问题描述============ 我想动态更新TextView内容,但是没有反应.有没有相关代码. ============解决方案1============ 写个定时器.或者写个线程.隔段时间去更新就哦了 ============解决方案2============ 引用 2 楼 tyaathome 的回复: Quote: 引用 1 楼 peijiangping1989 的回复: 写个定时器.或者写个线程.隔段时间去更新就哦了 有没有类似的代码例子给我看看. 新建个线程来