Xamarin 跨移动端开发系列(01) — 搭建环境、编译、调试、部署、运行

(本文是基于老版本的VS和Xamarin,而VS2017已经集成了Xamarin,所以,本文已经过时,最新的Xamarin开发介绍请参见 使用 Xamarin开发手机聊天程序 。)

如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!好了,废话不多说,就开始吧,本文将描述基础环境的搭建,以及将应用在android环境中调试、发布、运行,iOS部分将在后面的文章中专门讲解。

一.搭建环境

  1. 安装 VS2015。

  2. 安装 Xamarin。我安装的是目前的最新版本:Xamarin.VisualStudio_4.2.0.703.msi。

  3. 安装JDK:我安装的是目前的最新版本:jdk1.7.0_71。

  4. 下载 Android SDK。

(1)下载完成后, Android SDK 目录下有两个exe:AVD Manager.exe 和 SDK Manager.exe。

(2)SDK Manager 用于管理不同版本的SDK,在其管理界面中可以下载新版本的SDK或升级旧版本的SDK。

我下载了版本号的5.1.1,6.0,7.0的SDK(其文件目录在子文件夹platforms下)。这些版本的SDK会在项目编译时用到,以及安卓模拟器也会用到它们。

(3)AVD Manager.exe 用于管理安卓模拟器。

与SDK的版本号对应,我创建了三个安卓模拟器,供调试时使用。

  1. 在VS中配置Xamarin选项。

由于我暂时没有用到原生的安卓开发,所以,我没有配置NDK。

二. 新建Xamarin.Forms项目、编译、部署、调试

Xamarin.Forms 是Xamarin提供的一个套件,用于跨移动平台的Form应用开发,所以,如果是使用Xamarin开发App,那么,Xamarin.Forms 将是很好的选择。

1.新建一个Cross-Platform跨平台项目,选择Xaml App(Portable)。

Xaml App 与 普通的App的区别在于, Xaml App是使用Xaml文件来控制Form上的控件的布局的。

2.项目新建成功后,会在解决方案管理器中,生成三个项目。

ESFramework.XamarinDemo 是可移植的类库,App的绝大部分逻辑和UI都是在其中完成。

ESFramework.XamarinDemo.Droid 对应了安卓版本,ESFramework.XamarinDemo.iOS 对应了iOS版本,它们都引用了 ESFramework.XamarinDemo 项目。

对于一般简单的应用而言,只需要在ESFramework.XamarinDemo中编写代码就可以了,ESFramework.XamarinDemo.Droid 和 ESFramework.XamarinDemo.iOS中的代码几乎不用动。

3.编译 ESFramework.XamarinDemo.Droid 项目

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

在项目属性面板中,要选择编译所使用的安卓SDK的版本号,我选择的是6.0。

4.部署、调试

编译成功后,就可以尝试部署到虚拟机,并运行调试了。

(1)启动安卓虚拟机。

运行上述的AVD Manager.exe ,我选择了自己创建的and6虚拟机,点击界面右侧的Start按钮,启动一个虚拟机实例。

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

(2)部署并运行

在VS上的工具栏,选择刚才启动的虚拟机实例and6,点击调试按钮(绿色的三角形),即可开始部署、运行的流程。(注意,要选择Debug模式)

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

(3)调试

部署运行成功后,模拟器就会显示demo App 的UI界面:

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

此时,可以在源码中加入断点开始调试程序了。

三. 发布 apk

1.将项目切换到Release。

2.设置清单信息Manifest

包括:应用的名称、apk包的名称、图标、版本号、权限等。

3.设置Linker

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

Linking 设置为none,意味着要将所有的SDK打包到apk中,这样,一个apk至少是40多M。

Linking 一般设置为 SDK Assemblies Only,表示 apk 使用手机中自带的SDK。

4.Archive – 存档apk

在发布apk之前,先要Archive得到apk。注意:Archive得到的apk不能直接部署到手机真机,运行会闪退。还需要经过最后的Distribute正式发布。

5.Distribute

在Archive成功后,会出现如下界面:

点击Distribute按钮,进入发布apk的流程。首先,要对apk进行签名:

Xamarin 跨移动端开发系列(01) --  搭建环境、编译、调试、部署、运行

如果是第一次走这个流程,先要点击绿色的”+”,创建一个密钥文件,然后选择它,再点击”Save As”按钮,即可保存签名后的apk。

6.拷贝到真机

将上述得到的ESFramework.XamarinDemo.apk,拷贝到真机,就可以安装了。晚装完毕,点击图标,即可运行我们的demo App了。

四.结语

以上的整个流程是我们在为ESFramework通信框架的Xamrain版本实现一个入门Demo时,完整的记录,希望对刚刚开始研究Xamrain开发的朋友有所帮助。

后续的文章,我们将介绍这个Demo的后续开发过程,基于Xamarin实现手机与PC互通的的IM 聊天小程序。

Original: https://www.cnblogs.com/zhuweisky/p/5936400.html
Author: zhuweisky
Title: Xamarin 跨移动端开发系列(01) — 搭建环境、编译、调试、部署、运行

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554596/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 我理解的用户体验

    用户体验是什么? 用起来很爽快。这就是用户体验。 用户体验是一系列的心理学,美学,经验总结而成的一门艺术。 专用名称是UED User Experience Design(用户体验…

    技术杂谈 2023年6月21日
    0105
  • 故障排查:是什么 导致了服务器端口telnet失败?

    telnet命令的主要作用是与目标端口进行TCP连接(即完成TCP三次握手)。 当服务端启动后,但是telnet其监听的端口,却失败了。或者,当服务端运行了一段时间后,突然其监听的…

    技术杂谈 2023年6月1日
    0111
  • 算法工程师老潘总结的一些经验

    算法工程师老潘总结的一些经验 前一段时间一直在优化部署模型。这几天终于来了需求,又要开始重操训练一些新模型了。趁着这次机会总结了下之前的一些训练模型的笔记,可能比较杂,抛砖引玉!当…

    技术杂谈 2023年7月11日
    073
  • iOS 字符串 去除空格

    NSString *str = @” this is a test . “; 去掉两端的空格 str = [str stringByTrimmingCharactersInSet:…

    技术杂谈 2023年5月30日
    073
  • Java的三大特性

    Java的三大特性 封装: 隐藏内部功能的具体实现,只保留和外部交流数据的接口,将变化隔离,便于使用,提高复用性和安全性。例:汽车与发动机,不必知道发动机的实现原理,只需使用汽车给…

    技术杂谈 2023年7月24日
    080
  • Docker-compose资源编排

    Docker-compose 1.简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管…

    技术杂谈 2023年7月10日
    066
  • LESS详解之函数(四)

    之前已经为大家介绍了一些LESS函数,大家应该对之前介绍的有所了解了。下面依旧为大家介绍LESS的函数,附加着一些小例子。希望这些有关LESS的函数能在大家编写LESS的时候有所帮…

    技术杂谈 2023年6月1日
    095
  • JSP和servlet之间的相互传值

    1.从一个jsp页面跳转到另一个jsp页面时的参数传递(1)使用request对象获取客户端提交的信息login.jsp页面代码如下: 点击查看代码 <%@ page lan…

    技术杂谈 2023年7月24日
    065
  • 人生苦短,我用JRebel

    昨天看到团子推送的一篇关于热部署的文章,其中介绍了自研的Sonic插件在公司内部的应用。同时晒出来一张对比图: 团子表示我们的插件要比同类插件优秀哦。不过我定睛一看,好家伙,第一列…

    技术杂谈 2023年7月25日
    071
  • HashMap原理及源码分析

    HashMap 原理及源码分析 1. 存储结构 HashMap 内部是由 Node 类型的数组实现的。 Node 包含着键值对,内部有四个字段,从 next 字段我们可以看出, N…

    技术杂谈 2023年7月24日
    073
  • 基于ArcGIS Engine + C#实现用户自定义动态电力符号

    转自 华立电网北京研发中心 阿文 ArcGIS Engine 二次开发一般需要通过桌面产品来制作这些符号,然后通过专门的转换工具转换以后供AE 使用。电力GIS 应用当中,电力设备…

    技术杂谈 2023年5月31日
    088
  • EMAS Serverless到底有多便利?

    EMAS Serverless 简介 EMAS Serverless 是阿里云提供的基于Serverless技术的一站式后端开发平台,为开发者提供高可用、弹性伸缩的云开发服务,包含…

    技术杂谈 2023年7月10日
    073
  • 【数据结构】11.java源码关于TreeMap

    目录 1.TreehMap的内部结构2.TreehMap构造函数3.元素新增策略4.元素删除5.元素修改和查找6.特殊操作7.扩容8.总结 1.TreeMap的内部结构 首先确认一…

    技术杂谈 2023年7月24日
    094
  • 人工智能(AI)库TensorFlow 踩坑日记之一

    本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑。所以就先跳过算法介绍直接来应用场景,原谅我吧。 TensorFlow 介绍 TF是google…

    技术杂谈 2023年6月21日
    088
  • APACHE正向代理配置

    Apache快速安装和反向代理配置:https://www.cnblogs.com/brad93/p/16718104.html Apache正向代理配置参考教程:https://…

    技术杂谈 2023年7月10日
    085
  • mysql安装及访问配置

    例:https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz 使用原…

    技术杂谈 2023年7月11日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球