Mono for android绑定jar包报错解决办法

前面讲过,通过EmbeddedJar方式可以绑定jar包,这个在实践中已经证明没有问题了,但是绑定的过程中,可能会出现一些小错误,我在绑定讯飞语点的jar包的时候,就报了如下的错误: Error message: obj\Debug\generated\src\Com.Iflytek.Speech.SpeechRecognizer.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?) obj\Debug\generated\src\Com.Iflytek.Speech.SpeechSynthesizer.cs(8,70,8,81): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?) obj\Debug\generated\src\Com.Iflytek.Speech.SpeechUnderstander.cs(8,71,8,82): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?) obj\Debug\generated\src\Com.Iflytek.Speech.TextUnderstander.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?) IDE Version: xamarin.studio 4.0.3 当时几乎觉得无望的时候,给xamarin公司发了邮件,过了两天,他们回复了解决办法。他们的邮件说:这是mono for android的一个bug。幸亏给了解决办法: 在创建的类库(引用了jar包的类库)的Transforms文件夹下有个Metadata.xml,在这个文件里加入: public OnVolumeChangedEventArgs 就可以解决问题了,我相信其他类似的jar包也可以通过这种方式解决。 这也算是我为开源做的一次贡献,发现了一个bug,挺开心的! 另外,估计xamarin公司会在下一个版本解决这个bug,坚信他们能解决。

April 20, 2013

Mono for android中使用WebView,并显示加载百分比,返回按钮使用

WebView是一个非常重要的控件,移动开发过程中会经常使用WebView来显示数据。WebView的使用非常简单,创建相应的对象,使用LoadData或者LoadUrl方法加载html数据,前者是价值html字符串,后者是加载一个可访问的URL地址。 这是基本应用,WebView还有两个高级应用,一个是显示加载的百分比,另外一个是支持返回按钮。 1、如何加载百分比 这里需要对WebView的方法进行重写,如下所示: private class AwesomeWebClient : WebViewClient { } private class AwesomeWebChromeClient : WebChromeClient { private Activity mParentActivity; private string mTitle; public AwesomeWebChromeClient(Activity parentActivity) { mParentActivity = parentActivity; mTitle = parentActivity.Title; } public override void OnProgressChanged(WebView view, int newProgress) { mParentActivity.Title = string.Format(“Loading {0}%”, newProgress); mParentActivity.SetProgress(newProgress * 100); if (newProgress == 100) mParentActivity.Title = mTitle; } } 然后,调用相应的WebView方法: newsWebView = FindViewById(Resource.Id.newsWebView); newsWebView.Settings.JavaScriptEnabled = true; newsWebView.Settings.SetSupportZoom(true); newsWebView.Settings.BuiltInZoomControls = true; newsWebView.Settings.LoadWithOverviewMode = true; //Load 100% zoomed out ...

April 11, 2013

设置Mono for android启动页

移动应用都有应用启动页,在mono for android里,设置应用启动页非常简单。 1、在Style.xml里添加设置: 2、在需要的启动Activity里设置: [Activity(Label = “我读报”, MainLauncher = true, Theme = “@style/Theme.Splash”, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, NoHistory = true)] public class SplashActivity : Activity{ }

April 10, 2013

Mono for android中js与c#代码的交互

移动互联网的开发包中有大量的功能是设计到显示网页的,有些甚至是直接调取远程的网页,主要依赖于WebView这个控件,而实际的开发过程中,我们需要在js代码中调用c#里面的代码,或者在c#代码里直接调用相关的js方法,以完成更好的交互效果。 android sdk提供了非常简便的办法来实现这一的功能,而Mono for android也提供了相关的方法,步骤如下: step1:首先要在创建一个类,这个类是用于与js代码交互的,如下所示 public class Wodubao : Java.Lang.Object { Context context; public Wodubao (Context context) { this.context = context; } public Wodubao (IntPtr handle, JniHandleOwnership transfer) base (handle, transfer) { } [Export (“Article”)] // to become consistent with Java/JS interop convention, the argument cannot be System.String. public void Article (Java.Lang.String articleid) { ArticleActivity currentArticle = (ArticleActivity)context; currentArticle.Finish (); Intent intent = new Intent (context, typeof(ArticleActivity)); intent.PutExtra (“articleid”, articleid.ToString ()); context.StartActivity (intent); } } 说明:Wodubao是一个用于与js代码交互的类,在这个类里定义了一个方法Article ,这个就是js代码里的方法,方法需要一个参数 articleid,这个方法可以调用当前activity里的所有方法,以实现相应的效果。 ...

April 9, 2013

Mono for android中MD5加密的方法

其实和C#的代码是一样的,完全可以复用,这里给出相应的代码 /// /// MD5 /// /// /// public string MD5Hash(string strText) { MD5 MD5 = new MD5CryptoServiceProvider(); byte[] datSource = encoding.GetBytes(strText); byte[] newSource = MD5.ComputeHash(datSource); string byte2String = null; for (int i = 0; i < newSource.Length; i++) { string thisByte = newSource[i].ToString(“x”); if (thisByte.Length == 1) thisByte = “0” + thisByte; byte2String += thisByte; } return byte2String.ToUpper(); }

April 2, 2013

Mono for android中使用sqlite

小型数据库的使用在移动开发过程中非常方便,Mono for android提供了多种数据库访问方式,可以使用sqlite、使用WCF直接访问数据库,sqlite的访问非常简单,下面是一个使用monodroid(或者Mono for andorid访问数据库的方法): /// /// A helper class for working with SQLite /// public static class Database { private static string db_file = “database.db3”; public static SqliteConnection GetConnection () { var dbPath = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), db_file); bool exists = File.Exists (dbPath); if (!exists) SqliteConnection.CreateFile (dbPath); var conn = new SqliteConnection (“Data Source=” + dbPath); if (!exists) CreateDatabase (conn); return conn; ...

March 28, 2013

Mono的早期历史

Mono的早期历史 Miguel de Icaza 2003.10.13 Q: 你好,冒昧地问一下,是否在dotGnu of .NET 之前Mono项目就已经开始了?我很好奇。 我在那时候开始着手Mono项目的开发,对于Mono,事情大概是这样的: 2000年9月份,当.NET的文档出现的时候,我就开始对这个技术充满了兴趣,然后和所有人一样开始对字节码解释器进行研究,但是我面临一个问题:没有详细描述metadata的说明。 .NET的最终文档是在2001年1月22日的时候发布了,那段时间我开始写信给.NET的相关人员,希望能得到那份遗漏的关于metadata的文档。 我一边等待回复,一边开始开发自己的C#编译器,顺便当作第一个学习C#的练习工作,然后开始写解释器。 写编译器的这段时间,Rhys联系了我,他已经通过反编译获得了一些早期的metadata代码格式,这是一项非常有趣的工作,那时候我们小组只有三个人一起努力:Rhys、Saurik和我。 Sam Ruby发布了ECMA委员拥有的C#的二进制文档,虽然这并不是本来的安排。我并不知道事情会朝哪个方向发展,但是在2001年4月份,ECMA委员会发布了那份遗漏的文档。 这就意味着我自己的C#编译器可以完成解析器的工作了,然后我开始在周围让大家试用我的编译器,同时我们可以开始完整地学习文档,用于构建一个开源项目。 我们的研发工作包括:构建一个metadata读取器,这个工作人让我们很痛苦,因为Saurik已经做了一个了,他感觉他的代码没有被利用,而Rhys也有一个读取器,我个人并不是很喜欢(因为它不是基于Linux/Gnumeric代码风格)。 从2000年9月份开始,我就感叹.NET框架的魅力,当我们在Ximian内部讨论它的优点的时候,我们会跟其他人的工作联想起来,比如“Labs”组织的CORBA、SOAP和Perl团队为Gnome绑定基础服务(别忘记了:支撑我们工作的动力是我们希望我们的APIs只需要编写一次,就可以使用任何语言来调用) “Labs”组织的努力工作最终结果是:Bonobo-conf,ORBit2, bonobo-activation, Soup, 和Perl/Gtk绑定,目的是希望创建工具提高我们的生产力:用更少的时间开发更多的应用,提升更高的抽象和标准在桌面应用上,以节省我们的时间和开发成本。 他们的产品是积极有效的,但是所有这些用.NET框架都可以轻易实现。 但是当我们完成学习的时候,我很清楚地知道是有可能去构建这样一种技术,他可以成为未来linux桌面的高效开发工具。请记住:从这个角度说,我们正在开发一个最大的桌面应用程序,随着时间的向前发展,最终都会开源(比如Mozilla和OpenOffice最开始也是收费产品,后面也变得开源了)。 虽然我们已经拥有在构建开源项目的经验,但还要处理一些相对重要的代码还是很痛苦。 Nat Friedman强力支持我们,希望我们的努力能获得更大的突破,我们获得了在Ximian实验室的管理权,大部分在Ximian实验室的开发人员都加入了Mono团队。我们团队的目标就是希望能创造出一个工具以提高开发人员的工作效率。 我们保持平静,让我们的团队慢慢迁移到Mono项目中,大家逐步收缩自己手头上的项目,仅仅有两位保留在原来的项目,最后,Dietmar, Paolo, Dick和我都开始为Mono项目工作。 Ravi马上就会加入我们,他会帮助我们开发C#编译器。 很显然,一个小团队是不可能开发出一个完整的.NET框架的替代品的,所以我计划把Mono变成一个开源的项目。负责市场推广的Jon Perr知道我们把项目推广出去。 我们原来计划在2001年7月19日公开发布,这样我们就可以赶上O’Reilly会议,Tim O’Reilly一直都很支持我们的项目,他从一开始就帮助Mono,当它还是一个很小项目的时候。当我们发布我们的项目的时候,我们同时发布了metadata框架、C#编译器和一些初始类库。 所以官方地说,Mono的发布日期是那天,但是它酝酿了很久。 对我来说,什么最重要并不是关键,因为Mono项目之于我意味着:一项帮助Linux在桌面获得成功的技术。当然,它有自己的生命发展周期,Mono并不是因为Ximain/Novell选择它所以才有它,对它的贡献和选择来自它的贡献者和选择者。所以,Mono要变得强大和壮大也要靠它的使用者。 希望这样能回答你的问题。 英文源地址 http://lists.ximian.com/pipermail/mono-list/2003-October/016345.html

January 29, 2013

开源Mono

1、 Mono是什么 Mono诞生于2001年,他的创始人是全球开源世界排名第5的墨西哥传奇程序员Miguel de Icaza和他的朋友。Mono最开始的团队Ximian被Novell收购,所以Mono项目一直是由Novell赞助。2011年Novell被收购,Mono的团队濒临被解散,Mono处于非常危险的境地。这时候,拥有大将风范的Miguel de Icaza领导团队自立门户,创办了Xamarin(http://www.xamarin.com/)公司,并担任CTO,Mono免于灾难。目前Xamarin公司发展迅猛,2012年7月获得了一笔1200万美金的风险投资,公司现在致力于开发出好用、高效、好玩的移动应用平台。 Mono是.NET Framework 的一种开源实现。 Mono项目将使开发者使用C#写的.NET应用程序,能在任何Mono支持的平台上运行, 包括Linux、 Unix、FreeBSD和Windows。Mono项目将使大家能开发出各种跨平台的应用程序, 并能极大提高开源领域的开发效率。 作为一个有机的.NET整体, 它包括一个C#编译器, 一个公用语言运行时环境,以及相关的一整套类库,他甚至还包括IDE、调试工具和文档浏览器。 Mono项目的网址是:http://www.mono-project.com 2、 Mono的意义 Miguel de Icaza希望Mono希望实现“一次编写,到处运行”。Mono的目标是跨平台,跨语言。如果Mono成功的话,语言和平台对开发者的影响将变的很小,这也是Miguel de Icaza在创建Mono的时候就希望的——Linux的普通用户可以编写自己的程序(详《Mono的一些早期故事》见http://lists.ximian.com/pipermail/mono-list/2003-October/016371.html )。Miguel de Icaza是GHOME的创始人,他自己深知要想让现代程序员采用c、c++语言为linux家族创建普通的应用程序太难了,这也是为什么他致力于推进Mono的原因,因为C#确实是目前最伟大最优美的语言,简单、易学,既可以快速开发出应用程序,也可以写出有深度的程序。目前Miguel de Icaza的目标在移动,他相信目前是移动互联网发展的高潮期,操作系统没有稳定,未来会诞生出操作系统层面的开发工具,他知道可能不会是java、也可能不会是object c,他希望是Mono,这也是为什么出现了MonoTouch和Mono for android。 当然Miguel de Icaza对C#也是很有感情的,从C#诞生之日就一直在推动C#语言的发展,他还亲自编写C#的编译器(这个编译器是基于gun的)。 3、 Mono 的未来 未来有无限种可能,而Mono的未来相信Miguel de Icaza自己很清楚,并且他会为此不断奋斗,他希望更多开源世界的人一起进来推动Mono。他并不是不喜欢c和c++,但是这两门语言不是桌面需要的;而java确实不怎么样,更何况现在活在oracle下面。C#是标准的、开放的(这也许是得益于它的创始人安德森),Miguel de Icaza基于它写出了Mono,相信Mono会有一个伟大的未来,即使不伟大,我们也可以用它来做伟大的事。

January 25, 2013

我们团队决定采用Mono进行移动开发

经过一个多月时间的深思熟虑,我还是决定和团队的成员选择Mono作为我们的移动开发框架,理由有三个:C#太优美了;我们希望跨平台跨语言开发程序;为开源世界贡献力量。 我在2010年下半年开始参与ios应用的开发,现学了object-c,开发出了一个应用,当时公司还有团队在开发android的应用,2010年正直移动开发的爆发前夜。2011年的时候有同事聊过想一起出去做点事情,而移动互联网肯定是重点。于是开始着手做一些准备,无意间了解到了Mono的创始人开始创立自己的公司了,公司全力投入MonoTouch(Mono在很久以前也听说过)的研发,并且知道Mono for android正在开发中,很兴奋。我写信给Miguel de Icaza,咨询他关于他们产品的研发时间,他很快做了回复,并且说未来几个月时间就会推出产品。可惜后面公司变动,我去了百度,专注于LAMP下的开发。 2012年中,我辞掉百度的工作,开始热血沸腾的“创业”,中途历经挫折,差点“未成创业,已经失业”,最后找到一个避风港,继续编写代码。到今天,终于再次有机会做移动端的开发了。我最后还是选择了Mono!

December 22, 2012

“画一个火柴人”史诗版发布iphone、ipad和win8版本

激动人心的一款游戏:“画一个火柴人”(Draw A Stickman EPIC) 游戏已经发布ios(ipad、iphone)和windows8的产品,去年他们发布网页版的时候,24小时获得了100w用户。在app产品里,开发团队融入了更多的场景,并且让玩家能大量地发挥自己的想象力。令人惊喜的是,这款游戏完全采用Mono来开发,主要基于MonoGame来开发,代码共享达到95%。他们的android版本也会在最近推出。 如果你很喜欢,可以他们的官网http://www.drawastickman.com/体验这款富有想象力的游戏。 更多信息可以查看:http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/

November 2, 2012