今天突发奇想,既然U3D能跨平台,而基于U3D的程序又只是个C#dll,沙盘是U3D写的,那能不能把win上的沙盘直接移植到其他平台?![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
-----xx-----
-
-
-
-
-
-
网上查了下U3D生成Android工程的例子,发现几乎都是直接导出,无需修改代码,这更加坚定了我的想法。
于是直接撸起袖子开始干,先下了个U3D编辑器,版本2017.3.1p1,沙盘版本选择当前的UP20.5.1。
根据以往写MCPE脚本加载器的经验,我的思路是用AndroidStudio建个Android工程,在下载的U3D程序中找到安卓的native库文件并复制到工程。
native库肯定有入口,所以还会有类文件,同样找到并添加进工程。
再到网上随便找个已经编译好的U3D游戏作为文件结构参考,为此我下了个神庙逃亡。![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
刚装完编辑器还是一脸懵逼,在安装文件夹翻了很久也没找到我要的,于是想着先导个安卓工程看看。
导出过程就不说了,MDZZ,忙活半天文件夹还是空的。
过程中下了个安卓支持插件,这才是关键。
安装完插件在安装目录搜索,找到了libunity.so、libmono.so等库文件,分armv7跟x86俩版本,全部复制到安卓工程。同时在附近找到了classes.jar/dex,在apk文件夹下找到了manifest.xml跟一些资源文件,免编译的节奏...
就差一个资源表,不然真的免编译。![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
classes.jar放进libs,so库放进JniLibs
类\库备齐,就差U3D的资源文件了。右键打开神庙APK,在assets/bin/Data下找到了跟沙盘Data目录下极其相似的结构。于是复制乎,然后发现太大了,足有1GB,改用符号链接。
一切就绪,点击AS里的构建按钮,1m55s后构建失败,log里红字显着JAVA堆炸了,瞥了眼任务管理器,进程内存都超3G了,然而vm设置中的最大内存只有1.2GB,这很JAVA。
把文件链接删了,再次构建,出来个50M的APK。用压缩软件打开,把Data拖进去,50M的APK变成500M,签个名扔进安卓虚拟机。
虚拟机内安装之后自动打开,显示无法初始化U3D引擎。打开logcat,显示无法读取某文件,因为构建目标不一致,当前目标是API19。
经多次尝试,确认其读取的是globalgamemanagers文件。现在开始又懵了,这个怎么改?
在网上查了下自定义资源的打包方法,将同一资源打包成两个版本来比较差异,最后发现就一个字节不同,位于引擎版本后面,把0x13改成0xD即可(我以前用这个办法搞定了网易MCPE更新包中的PYC脚本,把它反成PY源码
)。
修改完再装进虚拟机,这回显示的错误又不同了:引擎版本不对,下载的引擎是2017.3.1p1,而沙盘引擎是2017.2.1p3。鉴于文件格式应该不会频繁改动,再次修改文件,把所有文件的版本都改成2017.3.1p1。
...这次的错误是内存申请失败,程序试图申请1.8G的内存用于字符串,然后炸了。
1.8G的字符串?事觉蹊跷,但我还是把虚拟机关了并满上4G内存,空闲3.7内存,结果还是申请失败。
估计就是改文件版本的办法不行,重新下个对应版本的引擎吧。
在官网下了个U3D 2017.2.1p3的安装器,打开后全部勾去掉,只留安卓支持插件。
令人欣慰的是,这安装器居然能选择下载目录,那我就不用安装了。
下载完是个exe,7z打开,除了一级目录名比较奇葩,剩下的就跟压缩包一样。
找到里面的库文件给APK换血,把资源文件改一下,再上虚拟机。
这次的错误看起来更像是java的错误,于是把apk中的classes.dex直接用U3D里的换了。
终于!迎来了振奋人心的时刻![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
【出现FBI警告】
![](https://imgsa.baidu.com/forum/w%3D580/sign=f0bb97655582b2b7a79f39cc01accb0a/af04f839b6003af36b78d301392ac65c1238b6ec.jpg)
程序要求的硬件不支持,点击继续
点击之后就卡了,然后我在上面划了划
![](https://imgsa.baidu.com/forum/w%3D580/sign=f2e6409a0646f21fc9345e5bc6246b31/08588dec08fa513d03bb62bf316d55fbb3fbd991.jpg)
感觉这巨型画板还挺不错的![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
内存占用1G,WTF?一开始我以为是100M
![](https://imgsa.baidu.com/forum/w%3D580/sign=6c0b5981fb03918fd7d13dc2613d264b/9edf05381f30e924b7b5925040086e061c95f791.jpg)
logcat里全是着色器错误
其实我在研究到一半的时候就预料到了,我只是不甘心,万一成了呢?(啪!沙盘作者都没成)![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
以前A19汉化的时候就看到沙盘资源里有很多着色器,但是显示不出来,这就说明编译过了。
如果有人能把着色器反编译成源码,也许这事就真成了![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
但我以前找过,最多反成着色器汇编。
so,此贴终结。
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
-----xx-----
-
-
-
-
-
-
网上查了下U3D生成Android工程的例子,发现几乎都是直接导出,无需修改代码,这更加坚定了我的想法。
于是直接撸起袖子开始干,先下了个U3D编辑器,版本2017.3.1p1,沙盘版本选择当前的UP20.5.1。
根据以往写MCPE脚本加载器的经验,我的思路是用AndroidStudio建个Android工程,在下载的U3D程序中找到安卓的native库文件并复制到工程。
native库肯定有入口,所以还会有类文件,同样找到并添加进工程。
再到网上随便找个已经编译好的U3D游戏作为文件结构参考,为此我下了个神庙逃亡。
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
刚装完编辑器还是一脸懵逼,在安装文件夹翻了很久也没找到我要的,于是想着先导个安卓工程看看。
导出过程就不说了,MDZZ,忙活半天文件夹还是空的。
过程中下了个安卓支持插件,这才是关键。
安装完插件在安装目录搜索,找到了libunity.so、libmono.so等库文件,分armv7跟x86俩版本,全部复制到安卓工程。同时在附近找到了classes.jar/dex,在apk文件夹下找到了manifest.xml跟一些资源文件,免编译的节奏...
就差一个资源表,不然真的免编译。
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
classes.jar放进libs,so库放进JniLibs
类\库备齐,就差U3D的资源文件了。右键打开神庙APK,在assets/bin/Data下找到了跟沙盘Data目录下极其相似的结构。于是复制乎,然后发现太大了,足有1GB,改用符号链接。
一切就绪,点击AS里的构建按钮,1m55s后构建失败,log里红字显着JAVA堆炸了,瞥了眼任务管理器,进程内存都超3G了,然而vm设置中的最大内存只有1.2GB,这很JAVA。
把文件链接删了,再次构建,出来个50M的APK。用压缩软件打开,把Data拖进去,50M的APK变成500M,签个名扔进安卓虚拟机。
虚拟机内安装之后自动打开,显示无法初始化U3D引擎。打开logcat,显示无法读取某文件,因为构建目标不一致,当前目标是API19。
经多次尝试,确认其读取的是globalgamemanagers文件。现在开始又懵了,这个怎么改?
在网上查了下自定义资源的打包方法,将同一资源打包成两个版本来比较差异,最后发现就一个字节不同,位于引擎版本后面,把0x13改成0xD即可(我以前用这个办法搞定了网易MCPE更新包中的PYC脚本,把它反成PY源码
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
修改完再装进虚拟机,这回显示的错误又不同了:引擎版本不对,下载的引擎是2017.3.1p1,而沙盘引擎是2017.2.1p3。鉴于文件格式应该不会频繁改动,再次修改文件,把所有文件的版本都改成2017.3.1p1。
...这次的错误是内存申请失败,程序试图申请1.8G的内存用于字符串,然后炸了。
1.8G的字符串?事觉蹊跷,但我还是把虚拟机关了并满上4G内存,空闲3.7内存,结果还是申请失败。
估计就是改文件版本的办法不行,重新下个对应版本的引擎吧。
在官网下了个U3D 2017.2.1p3的安装器,打开后全部勾去掉,只留安卓支持插件。
令人欣慰的是,这安装器居然能选择下载目录,那我就不用安装了。
下载完是个exe,7z打开,除了一级目录名比较奇葩,剩下的就跟压缩包一样。
找到里面的库文件给APK换血,把资源文件改一下,再上虚拟机。
这次的错误看起来更像是java的错误,于是把apk中的classes.dex直接用U3D里的换了。
终于!迎来了振奋人心的时刻
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
【出现FBI警告】
![](https://imgsa.baidu.com/forum/w%3D580/sign=f0bb97655582b2b7a79f39cc01accb0a/af04f839b6003af36b78d301392ac65c1238b6ec.jpg)
程序要求的硬件不支持,点击继续
点击之后就卡了,然后我在上面划了划
![](https://imgsa.baidu.com/forum/w%3D580/sign=f2e6409a0646f21fc9345e5bc6246b31/08588dec08fa513d03bb62bf316d55fbb3fbd991.jpg)
感觉这巨型画板还挺不错的
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
内存占用1G,WTF?一开始我以为是100M
![](https://imgsa.baidu.com/forum/w%3D580/sign=6c0b5981fb03918fd7d13dc2613d264b/9edf05381f30e924b7b5925040086e061c95f791.jpg)
logcat里全是着色器错误
其实我在研究到一半的时候就预料到了,我只是不甘心,万一成了呢?(啪!沙盘作者都没成)
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
以前A19汉化的时候就看到沙盘资源里有很多着色器,但是显示不出来,这就说明编译过了。
如果有人能把着色器反编译成源码,也许这事就真成了
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
但我以前找过,最多反成着色器汇编。
so,此贴终结。
![](http://imgsrc.baidu.com/forum/pic/item/b7ec6fdb81cb39dbc5d7ea48d8160924ab183046.jpg?v=tbs)