编者语:相信大家看到这个文章的时候,会是通宵看完了Build 2015第一天的主题演讲,或者是早上看Build 2015的相关消息。但是我相信大家都会为Visual Studio 2015 RC 的发布给很多的掌声。哈哈做技术是一个令人兴奋的活,特别看到了一个新的开发工具。而我由于是Microsoft MVP ,我比大家提前几天拿到了Visual Studio 2015 RC 。从今天开始我会开始和大家说说如何通过C++进行跨平台开发。今天为大家先做一个开篇。(写下这篇文章时,估计离Build 2015开始还有4个小时,而你们看到我的文章会是将近早上的9点30分)。还有带病工作也是非常痛苦,希望大家看完后,为我给点掌声
跨平台开发,现在的方式有很多。例如Xamarin ,Cordova, RemObjects 。对于Visual Studio 2015 , 已经整合了Xamarin 和Cordova ,并且通过Hyper-V的方式带来了全新的Android 模拟器(唯一失望的是没有iPhone 模拟器,所以调试还是需要我大爱的Mac)。而且你可以通过插件方式安装RemObjects .(这里也要吐槽一下,我们需要通过佛跳墙方式去安装Visual Studio 2015 Cross Platform 的东西 ,因为涉及到Android SDK, Android NDK, Android...... )。
关于跨平台开发
这三年来我一直在不同场合和微软推跨平台开发的案子,这里主要提到了Xamarin .(说起这个,还欠大家MVA的课程呢,我相信我会做好的)。
如果大家有兴趣可以到Channel 9 看以下两个主题演讲:
跨平台武功尽在Visual Studio - 介绍了Xamarin , Cordova, RemObjects , C++ 跨平台
跨平台移动开发 - 介绍了Xamarin 在不同平台的开发过程
在演讲的过程当中也有不少的问题,有人会质疑自身app变大了,有人会质疑C#/JS的执行效率,有人会质疑价格,有人更会觉得还是用户原生,毕竟在开发跨平台应用中你还是需要考虑了解各自开发的特性,诸如UI, 底层,内存释放的特性。这些问题,我也比较认同。但是无论是Cordova ,Xamarin , RemObjects 都是一个很不错的跨平台方案了,他们也在进步。以Xamarin为例,他们不但解决了逻辑层跨平台的问题,也对上层不同平台的UI进行了非常完美的整合-Xamarin Forms 。这些都是需要肯定的。
移动开发其实在做什么?
先来看看传统的三大平台是怎么做
上面的图不难看出做移动应用无非都是基于网络服务的接口,或者基于系统的底层,或者是硬件的操作。而更复杂的并不是这些所谓的逻辑操作,而是投入到创建UI和UI的交互逻辑上。这个正是Objective-C / Swift, C#/WinJS, Java 所针对的平台所做的东西。而所谓跨平台,更多是在这部分做文章。 Cordova 也好, Xamarin和RemObject的优势更多是用一种语言把UI和UI 交互搞定了。而逻辑层,大家都不约而同地认为这些所谓的托管语言不及C++来得优秀,而且通过C++基于Android/iOS/Windows各自出了不少优秀的库,这些库需要快速迁移到其他平台。好! Visual Studio 2015就是为了这个带来了C++ 的跨平台方案。
C++跨平台
这是一个从微软C++团队介绍的截图(更多请参考这里:http://channel9.msdn.com/events/Visual-Studio/Connect-event-2014/311),这里讲述了C++对于跨平台开发的优势和将会有的功能。通过C++你可以完成绝大部分的底层开发,而界面还是交回给对应的平台。据说Office 团队的跨平台实现就是基于C++, 所以我们不用质疑他的可行性。
更进一步
C++ 结合Xamarin完成开发工作, 这个是我所喜欢的方式,因为这个各占所长了,Xamarin减轻了学习成本,而C++对平台底层更具效率。Cool !!(这里我要说说,这只是其中一个方案,你可以用回原生的,但在未有更多资料前我不会说怕有什么变化,日后我会补充)
一个简单的例子
下面来简单看看(话说我希望做一个简单的示例,但是发现在Win10 + Visual Studio 2015 的环境上各种水土不服,所以望大家见谅我只做android的例子)
1. C++跨平台究竟有什么?
你可以为iOS, Android 创建基于C++的Dynamic Library 和Static Library ,当然你也可以编写一个Android 和 iOS同时使用的Shared Library.
2. 我这里使用Shared Library(Android/iOS)模板创建一个共享库,
这里我把项目命名为CPPDemo,而Shared Library 命名为SharedLib,如图:
项目生成为,会有三个Project
这里,我介绍一下 , Shared 是共用的一块,你可以为iOS,Android共建一些东西,如对API的访问,而对于Shared.Android, Shard.iOS是对这个共有的东西进行调用,并针对各自平台进行定制,并封装成对应平台的静态库。生成的静态库你可以给原生的程序调用个,如你可以从Android Studio 调用生成的so/Xcode调用生成的a,也可以给跨平台的解决方案所调用。
我这里对Shared做一些调整,如图
之后针对Android部分进行修改,由于我需要给Xamarin调用xia,所以需要做一个扩展,大家或者会了解过C#如何调用C++(当然你也许是个初哥,不紧要这个以后我会给大家带来更详细的介绍),这个是必须做。
接下来也对Android的项目属性修改,将它的名字修改为libDroid这样方便调用。
3. 引入Xamarin
好接下来去创建一个Android 的Xamarin项目,并把SharedLib.Android作为引用添加到项目中,
点运行看看(这里很遗憾只能在真机上运行),当我点击这个按钮后,按钮文字会变成“这是一个安卓程序”。
感觉相当不错吧。先写到这里,接下来,我会连载数篇文章的,感谢大家!