如何在我的跨平台项目中使用单声道

Posted

技术标签:

【中文标题】如何在我的跨平台项目中使用单声道【英文标题】:how to use mono in my cross platform project 【发布时间】:2013-01-21 06:11:01 【问题描述】:

我一直在为我的企业应用寻找解决方案,至少需要支持 3 个平台,即 iosandroid 和 Window Phone。经过一整天的搜索,我终于将目光投向了两种有前途的跨平台解决方案,一种是单声道,另一种是phonegap。 monocross 似乎完全使用 c# 和 .net,是否可以访问本机库和语言?我在某处读到它直接编译成可以在目标平台上执行的二进制文件。 而关于phonegap,它使用每个平台上的webviews来提供向最终用户展示用户界面的能力。由于它是通过解释语言和高级api实现的,性能可能无法满足我们的需求。 最后,我们(我的团队)决定尝试一下 mono,架构如下图所示:

++++++++++++++++++++++表示层++++++++++++++++++++++++++ [monotouch,monodroid,silverlight] 或 [本机 gui 调用] 或 [html5/js/css]

+++++++++++++++表示控制器/业务逻辑层+++++++++++++++++ [单声道/c#] ++++++++++++++++++++++++++++++服务器端+++++++++++++++++++++++++++ [云]

我想用mono/c#写一些通用的业务逻辑和数据结构,说到一些通用的平台特性,比如存储服务,通知,我想把它们包起来放在各个平台上公开供 c#(业务逻辑层)使用的统一 api。至于表示层,我们决定从上面列出的 3 个可选解决方案中进行选择。

要做到这一点,首先我必须弄清楚是否可以调用原生框架。 所以,我的问题是: 1、mono是如何工作的,我的意思是c#代码编译成二进制可以直接在iOS、Android和Windows Phone上执行吗? 2,是否有一种机制来进行本机调用?和cocos2d-x一样,我可以通过JNI调用java方法,而在iOS中,c++可以直接调用oc。我可以用 c# 在单声道中调用可可触摸的东西吗? 3、是否可以在一个项目中管理所有这些东西,以及如何构建它们? 4、有没有更好的解决方案?

如有任何建议,我们将不胜感激,感谢您的耐心等待!

【问题讨论】:

【参考方案1】:

我想知道为什么 Xamarin 没有出现在您的搜索结果的第一页,

http://xamarin.com/features

但这正是 Mono 开发人员为希望针对移动平台的 C# 开发人员创建的内容。 MonoTouch 和 Mono for Android 均具有与 Microsoft .NET 相同的库基础,以及特定于平台的绑定。

您的非 UI 代码应该能够在可移植库中使用并在它们之间共享。 Microsoft 的便携式库是 Windows 特定的,现在我不确定 Mono 的人能接受多少,但即使 PCL 失败,您也可以基于源文件的相同副本创建多个特定于平台的项目(我在 #SNMP 中做过)。剩下的任务是为 Windows Phone、iOS 和 Android 开发特定于平台的 UI。

有很多文章展示了这些功能,

http://docs.xamarin.com/

还有许多成功的应用程序

http://xamarin.com/apps

学习产品的最佳方式是试用(在 Xamarin 的案例中是免费的)。这也适用于 MonoCross(基于 Mono 构建的框架)。

我不熟悉 PhoneGap,所以你需要有人对此提出建议。

【讨论】:

谢谢 Lex,我想你已经为我指出了正确的方法,事实上,我确实搜索过 Xamarin,但我很困惑,认为 monocross 和 Xamarin 是一回事。跨度> 在这种情况下,Xamarin 应被视为基础架构供应商,他们为非 Microsoft 平台构建了 CLR。 MonoCross 似乎是 Xamarin 提供的一个非常有前途的框架,而 Xamarin 本身推出了 Xamarin.Mobile (xamarin.com/mobileapi)【参考方案2】:

免责声明:这不是一个完整的答案 - 但我确实希望它至少能回答您的部分问题


我在 18 个月前开始使用 Mono 产品进行跨平台开发时遇到了类似的问题。

从那以后我建立的方法称为 MvvmCross - 它很久以前从 MonoCross 分叉出来 - 现在不与它共享任何代码(但也许有一天我们会再次合作!)。

该方法使用 PCL 来共享代码。这并非完全无痛,但在您完成一些设置步骤后很容易 - http://slodge.blogspot.co.uk/2012/12/cross-platform-winrt-monodroid.html

您可以在此视频中了解有关此方法的更多信息:http://slodge.blogspot.co.uk/2012/12/mvvmcross-video-presentation-xaminar.html

【讨论】:

感谢您提供的建设性信息,在项目开始之前,我可能有机会在所有这些选项上做很多功课

以上是关于如何在我的跨平台项目中使用单声道的主要内容,如果未能解决你的问题,请参考以下文章

将单声道编译为静态库

AVPlayer 播放单声道音频立体声->单声道

如何在 Python 中将 WAV 从立体声转换为单声道?

如何将我的单声道程序添加到启动中?

如何在我的单点触控项目中使用 JdSoft.Apple.Apns.Notifications

以编程方式检测音频文件是立体声还是单声道?