Xamarin 入门 2

原创声明

这篇文章是纯手打的成果。尽管网络上有类似的安装配置教程,但它们通常是过时的(大多是2016年,其中绝大多数步骤现在都已经是多余的,比如手动安装 JDK 和 SDK)。此外,对于同样的内容,我是以我自己的语言来描述,希望能够达到更综合更精简的效果,因此绝非采集和转载。

这篇文章继续介绍 Xamarin,主要讲述如何开始一个新的 Xamarin,并且列举一些你可能会需要的有关 Xamarin 开发的常见问题,其中绝大多数都是我自己在搜索 Google 和以自己的小说写作辅助工具项目进行实践之后得出的经验。

关键词:Xamarin C# Xamarin.Forms 类库 共享 入门 MVVM 依赖注射 反向控制 Prism

安装

Visual Studio Xamarin 安装
Visual Studio 安装选择组件界面

Xamarin 已经被收购并且成为 Microsoft 的项目,尽管你仍然可以使用 Xamarin Studio,更好的实践方式是在 Visual Studio 中使用它。现在你可以直接前往 Visual Studio 官方网站下载安装程序,并在安装组件中勾选 Mobile development with .NET,并在界面右侧可选组件(Optional)中勾选 Universal Windows Platform tools for Xamarin

关于 Xamarin 价格昂贵的说法现在已经成为过去式。Xamarin SDK、Xamarin.Forms 和 Mono 运行时基于 MIT 许可 开源并且源代码发布在 Github 上。

使用

Visual Studio Xamarin.Forms
Visual Studio 新建 Xamarin.Forms 项目

如果你不是第一次使用 Visual Studio(通常你只会在使用 Visual Studio 时注意到 Xamarin,因为它并不像 Unity 3D 那样在中国家喻户晓),那么你可以在新建项目时注意到 Xamarin.Forms 模板。

当然,如果你只需要为某个平台(比如只面向 Android),也可以选择新建 Xamarin.Android。

如果你计划开发一个大型项目(而不是类似计算器、记事本之类的迷你应用),为了日后更方便地管理项目,建议使用 Prism 框架。Prism 除了面向 WPF 和 UWP,还可以用于 Xamarin.Forms。

Prism 框架,依赖注射,反向控制和 MVVM 设计模式

Model-View-ViewModel(MVVM)不是一种技术,而是一种设计思想。尽管国内的网络上非常多关于 MVVM 的介绍,似乎还是有很多人对这种模式存在误解。

简单来说,就是前台 UI 和后台逻辑代码通过各种方式分离,目的是更好地管理、测试和维护。依赖注射(Dependency Injection, DI)是反向控制(Inversion of Control, IoC)这一概念的一种更详细更具体化的形式,它是实现 MVVM 的方式之一。关于它们,之后会有文章介绍。

Visual Studio Prism Xamarin
新建 Prism 模块化项目

Prism 最初由 Mircosoft 模式和实践小组 (Microsoft patterns & practices)提出的框架,也是实现 MVVM 的方式之一,配合 Unity 容器(依赖注射的工具)尽可能地减少 UI 和代码的耦合(或者说联系)。

更通俗地说,它是一个程序集,你可以在代码里 using 它,然后按照它的要求对你的项目做一点修改,你的运维看着代码会觉得突然变得舒服很多,甚至可以把某个功能作为单独的模块(Prism 模块)外包出去然后自己去度假,你的程序员和 UI 设计师见面与吵架的次数可能也会稍微减少。

最重要的是,一些理念,比如依赖(Dependency),在 Xamarin 的跨平台开发和代码复用中非常关键。因此如果你已经对 C# 和 Winform/WPF 开发有所了解,我认为开始学习 MVVM 、依赖注射和 Prism 框架是一件好事。

之后将会有文章介绍它们。

你还需要知道

什么是代码复用、共享项目(Shared Project),可移植类库(Portable Class Library, PCL)和 .NET Standard?

什么是面向接口/对象/过程编程,什么是 MVVM/MVC 设计模式,什么是 Prism 框架,什么是依赖注射/反向控制?

如何在共享的类库(或者 Xamarin.Forms,因为它正是采用共享类库作为跨平台途径)中使用 SQL 数据库?

如何在共享的类库中获取各个平台的数据存储位置(先且不说 Android 有没有“Program Files”和“我的文档”之类的概念,Windows 和 Unix 系用于分割路径的符号也不同,前者是反斜杠,后者是斜杠)?

如何使用自定义渲染器(Custom Renderers)、特效(Effects)、依赖服务(Dependency Services)在 API 少得可怜的类库和各个平台丰富的 API 之间建立桥梁(或者简单地说,我要怎样让我的按钮看起来不那么丑,比如有个阴影或者会发光)?

更多……暂时列举这些,之后都会一一介绍。

参考链接

小时 – Xamarin 入门 1

Github – Prism

Github – Prism Documentation

Github – Xamarin

Github – Unity Container

发表评论

电子邮件地址不会被公开。 必填项已用*标注