跨平台

Mono为何能跨平台?聊聊CIL(MSIL)

做~自己de王妃 提交于 2019-12-30 07:24:06
前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了。以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾。所以决定写几篇关于CIL的文章,即和各位看官一起进行个交流,同时也是匹夫自己总结和巩固一下这些知识点。俗话说的好, “万事开头,Hello World” ,那么作为匹夫总结CIL的第一篇文章,就从 Hello World 开始吧。当然,正式开始写CIL代码之前,我们还有点闲话要说,那就是运行时的选择为何是它? 为何是CIL ?而 CIL为何又是基于堆栈 的?内存或者寄存器难道不是更理想的选择吗? 为何是CIL? 开始正文内容之前,匹夫带领大家先回顾一下《 Mono为何能跨平台?聊聊CIL(MSIL) 》的简要内容:首先,用C#写的代码被C#的编译器编译成CIL(当然除了C#还有很多其他的语言,比如VB等等),之后再有JIT编译器在程序运行时即时编译或者AOT(或者NGEN)进行提前编译将CIL代码编译成对应平台的机器码,最后运行在平台上的便是机器码。小匹夫在那篇文章中提过,首先将各种不同的语言都统一编译成CIL,再由CIL编译成各个平台的机器码是跨平台的基础。那么仔细想想,一定有人会提出这样的疑问,直接从C#编译到机器码,省略掉“多余”的中间语言,是不是也可行呢?这个问题的确值得讨论

跨平台移动应用开发利器:PhoneGap 2.0 发布!

China☆狼群 提交于 2019-12-24 18:04:15
  Adobe PhoneGap 团队近日在美国波特兰的年度 PhoneGap Day 上正式发布了 2.0 版本。 PhoneGap 是一个免费开源的开发框架,让 Web 开发人员能够使用熟悉的 HTML , CSS 和 JavaScript 构建跨平台的移动本地应用。   通过 PhoneGap 框架提供的 JavaScript API 能够以非常简单的方式调用移动设备的核心功能,包括地理位置,摄像头,加速器,通讯录,多媒体,文件和网络等功能。   借助 PhoneGap,你完全可以使用熟悉的 Web 开发技术写出移动 Native App,并发布到 Apple Store,Google Play 等各平台应用商店中。编写好的代码可以上传到云端服务器,使用云端编译功能编译成各种平台下的应用,支持 iOS,Android,Palm WebOS,Symbian,Blackberry,Windows Phone 和 Bada 七大平台。      最新发布的 PhoneGap 2.0 有以下改进: Cordova WebView - 集成PhoneGap,作为视图片段嵌入原生应用中。 Command Line Tooling (CLI) (Android, iOS and BlackBerry) - 命令行工具,为不同平台提供统一的项目创建,调试和模拟功能。 Enhanced

刷新.NET

喜你入骨 提交于 2019-12-21 04:38:10
.NET Core 发布的那一天起,它在完成自我刷新的过程,一切为了适应未来,云原生。不仅仅跨平台那么简单。 .NET Core 未来发展路线 我们发现跳过了.NET Core 4.X 避免了和目前.NET Framework4.X命名上的混乱,明年直接命名为了.NET 5 , 默认还是core,不过.NET 4.8将是最后一个.NET Framework版本,.NET core 才是.NET真正的未来。.NET Core 是微软 .NET 技术的开源、跨平台版本,允许开发者在 Windows、Mac 和 Linux 上使用包括 C#、F#和 Visual Basic 等语言。可以说,.NET Core 是仅支持 Windows 的 .NET Framework 的一个跨平台分支,自 2016 年 6 月首次发布后,微软一直在保持同时开发这两个版本。当时微软表示,.NET Core 适用于 ASP.NET Web 应用,以及 Win10 UWP 应用。Windows 桌面应用将继续使用 .NET Framework 。 不过今年发布的.NET Core 3.0 和最近发布的3.1长期版本,重点改进了桌面开发(包括WPF和Windows窗体)和Blazor,可以完全看出.NETcore (将来在.NET Core之上构建的.NET 5)将是.NET的未来,同时能够广泛地支持C#8.0

Electron+Vue开发跨平台桌面应用

雨燕双飞 提交于 2019-12-20 20:41:26
虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。 Electron是一个基于Chromium和 Node.js,使用 HTML、CSS和JavaScript来构建跨平台应用的跨平台开发框架,兼容 Mac、Windows 和 Linux。目前,Electron已经创建了包括VScode和Atom在内的大量应用。 环境搭建 创建Electron跨平台应用之前,需要先安装一些常用的工具,如Node、vue和Electron等。 安装Node 进入Node官网下载页http://nodejs.cn/download/,然后下载对应的版本即可,下载时建议下载稳定版本。如果安装Node使用Homebrew方式,建议安装时将npm仓库镜像改为淘宝镜像,如下所示。 npm config set registry http://registry.npm.taobao.org/ 或者 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装/升级vue-cli 先执行以下命令,确认下本地安装的vue-cli版本。 vue -V

使用 Vagrant 打造跨平台开发环境

試著忘記壹切 提交于 2019-12-18 07:41:06
参考:https://segmentfault.com/a/1190000000264347 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。 我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。 安装步骤 1. 安装 VirtualBox 虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。 下载地址: https://www.virtualbox.org/wiki/Downloads * 虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的 2. 安装 Vagrant 下载地址: http://downloads.vagrantup.com/ 根据提示一步步安装。 此外,还得下载官方封装好的基础镜像: Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box Ubuntu precise 64 VirtualBox http://files

教程:如何手动安装Xamarin与Xamarin for VisualStudio

走远了吗. 提交于 2019-12-17 03:03:08
【2016/4/17更新:如果你下载后发现仍然需要付费才能编译Android/iOS APP,请到文章最下面更新Xamarin for VS和Xamarin Studio到最新的版本。Build2016后发布的版本移除了付费的限制(真正完全免费随便用啦)】 虽然现在Xamarin已经合并到VS2015 Update2安装包里面了,但是实际上被合并进去的仍然只是个Online installer而已,对于广大天朝.NET码农来说,成功下载安装仍然是可望而不可及的。 而手动安装所有组件可以将Xamarin套件的安装时间缩短到以前的1/10,如果有SSD会更快(时间就是金钱啊我的朋友)。所以呢,这篇文章来说说如何手动安装Xamarin,让你轻松开始跨平台开发。 注意:以下步骤需要你一步一步进行,请确认每一步都安装成功了才能正确使用上Xamarin哦。这里选用的下载地址都是Xamarin和Android官方的,请放心使用。强烈建议使用迅雷下载,最好开一个会员。 系统需求: C盘至少有30G可用空间 Visual Studio 2013,但是推荐装上Visual Studio 2015(最小安装即可,不需要装Win10 SDK之类的可选组件) 下面开始吧。 32位JDK JDK没啥说的了,不装不行啊。下载后双击启动,跟随向导安装上即可。 http://download.xamarin.com

html开发跨平台桌面应用框架 electron 开始开发

浪子不回头ぞ 提交于 2019-12-17 02:06:22
electron electron 是 github 开发的 一款可以利用 Web 技术 开发跨平台桌面应用的框架,最初是 Github 发布的 Atom 编辑器衍生出的 Atom Shell,后更名为 Electron 。Electron 提供了一个能通过 JavaScript 和 HTML 创建桌面应用的平台,基于 nodejs 快速开始 前提 必须安装node 环境 全局安装 electron sudo npm install -g electron #可能会出现安装失败,使用 cnpm 文件结构 your-app ├── package.json ├── main.js └── index.html package.json 文件简单写: { "name" : "your-app", "version" : "0.1.0", "main" : "main.js" } main.js 为入口: const {app, BrowserWindow} = require('electron') const path = require('path') const url = require('url') // 保持一个对于 window 对象的全局引用,如果你不这样做, // 当 JavaScript 对象被垃圾回收, window 会被自动地关闭 let win

移动开发中跨平台技术对比

别等时光非礼了梦想. 提交于 2019-12-16 00:00:28
近几年,随着物联网时代到来、移动互联网高歌猛进,日新月异,在很多业务场景中,纯原生开发主要面临动态化和开发成本两个问题,而针对这两个问题,诞生了一些跨平台(特指Android和iOS两个平台)的动态化框架。 跨平台技术对比 技术类型 UI渲染方式 性能 开发效率 动态化 框架代表 H5+原生 WebView渲染 一般 高 支持 Cordova、Ionic js+原生渲染 原生控件渲染 好 中 支持 RN、Weex、uni-app 自绘UI+原生 调用系统API渲染 好 Flutter高, QT低 默认不支持 QT、Flutter 上表中开发语言主要指UI的开发语言。 而开发效率,是指整个开发周期的效率,包括编码时间、调试时间、以及排错、兼容时间。 动态化主要指是否支持动态下发代码和是否支持热更新。值得注意的是Flutter的Release包默认是使用Dart AOT模式编译的,所以不支持动态化,但Dart还有JIT或snapshot运行方式,这些模式都是支持动态化的。 拓展阅读 《移动应用开发常见技术比较》https://www.jianshu.com/p/fc0fea667243 《2019年,Flutter 和 React Native 谁主沉浮?》https://www.ucloud.cn/yun/104638.html 原文: https://xushanxiang.com

学习总结

左心房为你撑大大i 提交于 2019-12-12 21:02:10
一、基础知识: 1、JVM、JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。 java语言是跨平台,jvm不是跨平台的。 JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。 JDK(Java Development Kit):java的开发工具,包括jre+开发工具 2、环境变量path和classpath的作用是什么? (1)path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录, 用于指定DOS窗口命令的路径。 (2)Classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。 3、变量有什么用?为什么要定义变量?什么时候用? 答:变量的作用:用来存储数据。 为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用 4、&和&&的区别? 答:(1)&&会出现短路,如果可以通过第一个表达式判断出整个表达式的结果,则不继续后面表达式的运算; 只能操作boolean类型数据; (2)&不会出现短路,将整个表达式都运算。既可以操作boolean数据还可以操作数。 5、标示符命名规则: 由数字(0-9),大小写英文字母,以及_和$组成。 不能以数字开头。

Unity 的跨平台以及热更

橙三吉。 提交于 2019-12-10 23:00:15
1.Unity的跨平台原理 首先说到Unity的跨平台。Unity的跨平台是基于Mono实现的,在Windows上,.NetFramework提供了VS的编译器,将C#代码编译为CIL的代码指令集(中间码),然后通过CLR将中间码变为机器码执行。CIL是一种可以在任何支持CLI(Common Language Infrastructure 公共语言基础设施)的环境中运行。而Mono则是重写了.NetFramework在Windows上的CLR,构建了基于各个平台的不同的虚拟机,这些虚拟机的工作就是在这些不同的平台上,将CIL Code编译为机器码放在内存中供系统执行。 2.Unity3D为何可以热更新 上面说到Mono提供了各平台的虚拟机来把CIL编译为native Code机器码,其实也就是二进制码。同时它提供了三种编译方式,不同于我们熟知的AOT(ahead of time 编译执行)和JIT(just in time 解释执行),这两种编译方式上一篇C#的编译里有提。第一种是JIT,和我们熟知的一样,就是在运行时将CIL转换为native code。第二种是AOT,但是这个AOT并不是完全的静态编译,该模式在编译了大部分通常在运行时编译的CIL码,而还有一小部分还是通过JIT模式。第三章Full_AOT才是完全的静态编译,把全部CIL字节码都生成native code