unity3d android動態更新dll

來源:互聯網
上載者:User

標籤:本地   dll   位元組   編譯   status   .com   位元組流   ima   ems   

基本是參考這篇文章: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.這個不用說了吧。

unity3d android動態更新dll

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.