面向Android上Dalvik运行时的C# 编译器dot42简介

简介:

Mono for Android最大的缺点是需要在Mono上面构建,这与Android预期的运行时完全不同。尽管能够直接访问完整的CLR的确有些优势,但是它与Android的Dalvik 运行时之间的封送调用(marshalling call)可能非常昂贵。那为什么不跳过IL代码直接生成Dex代码呢?

事实上这有点夸张。dot42编译器实际上并没有跳过IL。恰恰相反,它读取IL代码并将其转换为一种叫做RL或Register Language的新语言。IL和RL主要的差异在于IL是基于栈的(有点像Java的字节码),而RL基于寄存器。在转换为RL后,会执行一系列的优化,而且最终产品会被重新编译。最后的编译为我们生成Android上Dalvik运行时的dex代码。

.Net原始调试信息在该过程的每个步骤中都会维护,当然它必须从Windows/.NET PDB格式转换为dex的调试信息格式。dot42使用Android调试桥接器来连接Visual Studio调试工具。

Android库可以通过直接引用JAR文件来访问。“编译后,调用会被重定向为对原始Android库的调用。”类型间的某些映射是必须的,但这主要由编译器解决。例如,java.lang.Boolean被映射为C#的Nullable。

因为dot42生成的是dex代码,所以有些C#特性无法使用。其中最值得注意的是用户定义值类型,也就是struct,因为Dalvik中并不存在,所以根本没法映射。

在使用dot42时,往往需要决定选择常见数据结构的C#版本还是Android版本。例如,应该使用.Net的List还是Java的ArrayList?据Ewout Prangsma介绍,如果关注内存和下载大小,开发者应该首选Java版本。即使他们的List实现基本上是对ArrayList的很薄的包装,有些额外的代码仍然需要打包并传到手机上去。

dot42是商业产品,正常批量许可是每开发者499欧元起。

目录
相关文章
|
7月前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
400 0
|
7月前
|
移动开发 监控 安全
mPaaS常见问题之Android集成dexPatch热修复运行时候无法正常进行热更新如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
117 0
|
7月前
|
Linux Android开发
Android 正常运行所需的一系列 Linux 内核接口
Android 正常运行所需的一系列 Linux 内核接口
104 0
|
Java 开发工具 Android开发
安卓应用成功运行实录
安卓应用成功运行实录
57 0
|
7月前
|
Java 关系型数据库 数据库
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
106 0
|
3月前
|
存储 C# 索引
C# 一分钟浅谈:变量与数据类型简介
【9月更文挑战第1天】在 C# 编程中,了解变量与数据类型至关重要。本文详细介绍了 C# 中的值类型(如整数、浮点数、布尔值等)和引用类型(如类、接口、数组、字符串)。通过示例代码展示了变量的声明与使用方法,并针对数据类型转换错误、变量未初始化及数值溢出等常见问题提供了解决方案。正确选择数据类型不仅能提升程序性能,还可避免潜在错误,有助于编写高质量代码。
136 47
|
2月前
|
算法 数据处理 Android开发
掌握安卓性能优化的秘诀:电池寿命与运行效率的提升
【10月更文挑战第6天】 本文深入探讨了安卓应用开发中的性能优化技巧,重点分析了影响电池寿命和运行效率的关键因素,并提供了针对性的优化策略。通过代码优化、资源管理、后台任务处理等方法,开发者可以显著提升应用的续航能力和流畅度。同时,结合具体案例,展示了如何在实际开发中应用这些技巧,确保应用在各种场景下都能保持高效运行。本文旨在为安卓开发者提供实用的性能优化指导,助力其打造更优质的应用体验。
72 2
|
6月前
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
106 6
如何将python应用编译到android运行
|
1月前
|
缓存 编译器 API
C# 一分钟浅谈:Roslyn 编译器平台介绍
【10月更文挑战第27天】Roslyn 是 Microsoft 开发的开源编译器平台,支持 C# 和 VB.NET。它将编译过程分解为多个阶段,并提供丰富的 API 供开发者分析、生成和修改代码。本文介绍了 Roslyn 的基本概念、安装配置、基础示例和高级应用,帮助开发者更好地理解和使用这一强大工具。
53 0
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
369 2