Java To CSharp源代码转换
前言开发环境客户端:Unity3D开发(C#) 服务器:Java (基于Java7) 日?? 期:2016年09月 需求说明部分服务器的部分逻辑功能在客户端实现一遍,可以简单的理解为服务器的部分逻辑代码搬到客户端来实现一遍。 想到的办法是代码转换。有两个原因:
源代码转换法源代码转换就是指把Java的代码转换成C#的源代码。 这样做的好处是方便后续的开发和调试,有源码更放心。 以下是几个工具,用于Java源码转换到C#源码 Java Language Conversion Assistant文档:https://msdn.microsoft.com/zh-cn/library/1kwtxa08(v=vs.80).aspx 下载:https://www.microsoft.com/en-us/download/details.aspx?id=14349 ? visual studio 2008及之前的老版本集成此工具,但从visual studio2010起已不提供,故放弃之。 j2cstranslator下载:https://sourceforge.net/projects/j2cstranslator/ 介绍:http://www.cnblogs.com/Lawson/archive/2012/02/21/2361827.html ? 开源,免费,但13年至今未更新 octopus .NET Translator官网:http://www.remotesoft.com/octopus/ ? 收费,未进行详细了解 Java to C# Converter官网:http://www.tangiblesoftwaresolutions.com/Product_Details/Java_to_CSharp_Converter.html 介绍:http://www.cnblogs.com/yiyan127/p/CSharp_CrackJava2CSharpConverter.html ? 收费,免费版有1000行代码限制。看了官网介绍后,决定使用它。 XES – Java To C#官网:http://www.euclideanspace.com/software/language/xes/userGuide/convert/javaToCSharp/index.htm 下载:https://sourceforge.net/projects/xes/files/OldFiles/xes_java_runtime_alpha06.zip/download ? 免费,似乎用起来并不那么理想,目前的最新版本是2004年,未有更新,故放弃之。 Java to C# Converter经过对比之后,我选择了Java to C# Coverter,此工具的更多详情,可以在官网的介绍中查看 转换过程中的信息信息,会出现在对话框中,同时也会标注在转换后的代码中。 @L_403_9@ 虚拟机运行法(IKVM)本小节主要是说 IKVM在Unity中的使用。 IKVM下载:https://github.com/Unity-Technologies/kaizen/tree/master/bundles/IKVM.NET IKVM和Unity话题讨论 http://forum.unity3d.com/threads/building-project-with-ikvm-dlls-inside.101097/ ? JavaToDll导出下图中,上图是Java的源代码,下方是转换成Dll后反编译查看的代码。 ? 我的测试引擎版本:Unity 4.0 / Unity 5.3.5 (目标平台测试过 Windows和Android 平台) IKVM:ikvm-7.2.4630.5 OS:Windows 7 x64
下方是我测试过程中出现的Error,出于性能和后期调试考虑,我放弃了此种方式,采用将Java代码转换成C#源码的方式。 已知Error当在脚本的全局变量,返回值,协程中引用了java中的class,method时,就会报以下Error。 private ExampleLibrary exampleLibrary2; IEnumerator CoLog() { int idx = 0; ExampleLibrary exampleLibrary = new ExampleLibrary(); while (idx < 100) { DoLog(exampleLibrary.HelloWorld()); yield return null; idx++; } } 但如果是内部变量则不会有这些Error。 void TestLog() { ExampleLibrary exampleLibrary = for (0; idx < 20; idx++) { DoLog(exampleLibrary.HelloWorld()); } }运行时Error GameObject (named 'Main Camera') references runtime script in scene file. Fixing! The script behavIoUr IKVM_Java_HelloWorld' could not be instantiated! ? Project中选中脚本时的Error TypeLoadException: Could not load type ' from assembly Assembly-CSharp,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null'. System.MonoType.GetFields (BindingFlags bindingAttr) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/MonoType.cs:164) UnityEditor.MonoScriptImporterInspector.ShowFieldInfo (System.Type type,UnityEditor.MonoImporter importer,System.Collections.Generic.List`1 names,System.Collections.Generic.List`1 objects,System.Boolean& didModify) (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:75) UnityEditor.MonoScriptImporterInspector.OnInspectorGUI () (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:117) UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor,Int32 editorIndex,Boolean rebuildOptimizedGUIBlock,System.Boolean& showImportedObjectBarNext,UnityEngine.Rect& importedObjectBarRect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1231) UnityEditor.DockArea:OnGUI() ? 测试代码reviewhttps://github.com/zhaoqingqing/blog_samplecode/tree/master/technical-research/java-to-csharp (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |