Порт Android на C# — Мигель де Икаса

в 10:03, , рубрики: android, java

Между Oracle и Google разгорелась нешуточная патентная война, стоимостью в 1 миллиард долларов, за право использовать Java в Android.

Но Java не единственный способ создания приложений, на самом деле даже не самый лучший. Как альтернативу мы предложили С#, добившись высокой производительности и низкого потребления батареи. Наша новая платформа — это открытая реализация .NET Framework, позволяющая разработчикам писать код на C#, адаптировать его под Java системы и переиспользовать часть кода для iOS и Windows Phone.

Порт Android на C# — Мигель де Икаса

В отличие от Sun с Java, Microsoft направила C# и .NET VM для стандартизации в ECMA. Система защищена от патентных исков строгими требованиями ISO, а также обязательством Microsoft.

В июле прошлого года, когда Xamarin начал работу, мы собрали команду в Бостоне, чтобы распланировать развитие Mono на iOS и Android. После дня «каякинга» на реке Чарльз, за обедом, мы обдумывали как улучшить Mono for Android, чтобы повысить производительность и время автономной работы приложений.

Порт Android на C# — Мигель де Икаса
Команда Xamarin после дня сплава на каяках, тогда мы были еще маленькой компанией.

Раз за разом, перед нами вставала одна и та же проблема: Dalvik не столь производителен как Mono и страдает от ограничений, свойственных Java без оптимизации Oracle’s Hotspot.

Что если заменить Java на быстрый C# и избавиться от ограничений Dalvik? Возможно ли создать телефон Android полностью свободный от недостатков Java и Dalvik VM?

За ужином в голову закралась сумасшедшая идея: перекомпилировать исходный код Android под C#. Android только выиграет от структуры P/Invoke и real generics.

Хотя в июле ничего предпринято не было, идея нас не покинула. Спустя несколько месяцев, рассуждая над совершенствованием Mono for Android, было принято решение переписать весь исходный код Android на C#. Так родился проект XobotOS.

XobotOS

Как результат, на сегодняшний день большинство Android layouts работает на C#. Вот скриншот XobotOS, запущенной на рабочей станции Linux, без Java:

Порт Android на C# — Мигель де Икаса

Чтобы этого достичь, потребовалось перекомпилировать большую часть Java-составляющей Android на C#. Так как же мы это сделали?

Перевод Java посредством Sharpen

Мы понимали, быстро перекомпилировать код в C# нереально. Исходный код Android содержит порядка миллиона строк на Java. К тому же хотелось не отставать от новых релизов Google. Единственным выходом было автоматизировать процесс.

Sharpen стал инструментом, который мы использовали как отправную точку. Вот что по этому поводу говорит Frank Kruege. (Порт Java-апплет в приложение на iPad)

Внеся изменения в Sharpen, получили потрясающий транслятор Java в C#. Теперь наша команда выпускает свою версию Sharpen для XobotOS.

Начав с исходного кода Android 2.x еще в 2011 году, мы успели обновить XobotOS до Android 4.0 Ice Cream Sandwich.

Производительность

Итак, вы запускаете Mono на Android, вопрос, который напрашивается сам собой — в чем отличие работы Моnо от Dalvik?

Порт Android на C# — Мигель де ИкасаКогда появился С#, Microsoft многое сделала для его оптимизации. Были введены Value types, виртуальные методы в форме opt-in вместо opt-out. Позже Java и C# разошлись в способе реализации generics. Java пошла путем обратной совместимости, в то время как в C# ввели поддержку generics в рантайм. Сохранив простоту использования и установки, C# зарекомендовал себя как надежный инструмент.

С тех пор язык и среда программирования продолжали развиваться. C# изначально имел все предпосылки для превосходства над Java во много раз. Начиная от динамического программирования, заканчивая асинхронностью языка, итераторами, функциональным программированием, параллелизмом и отличным внедрением generics. Многие из этих функций доступны благодаря исследованиям проводимых Доном Саймом и его командой F#.

Более того, Mono в качестве виртуальной машины разрабатывался последние 10 лет и в настоящее время насчитывает 8 поколений.

Вы можете увидеть огромную разницу в производительности структур и generics в этом тесте, который мы запустили на простой реализации двоичного дерева на Java и C#:

Порт Android на C# — Мигель де Икаса

Что дальше?

С гордостью готовы сообщить, XobotOS доступен на GitHub, так что каждый может опробовать его самостоятельно.

Нашей целью было, создать лучшую платформу для разработки мобильных приложений. XobotOS — это интересный эксперимент и, как оказалось, многие найденные технологии пригодятся для использования в будущих продуктах:

Direct Graphics Access на Skia: На данный момент Mono for Android обращается к низкоуровневым графическим библиотекам через Java. В XobotOS мы убрали эту промежуточную прослойку и используем Mono P/Invoke, чтобы получить прямой доступ к рендеренгу в Skia.

Java to C# tooling: Все наши новые версии Sharpen доступны как часть XobotOS.

У нас есть все инструменты, чтобы заменить часть Java-кода на C# там, где важна производительность и где C# — лучшее решение.

Оказалось, эксперимент про который мы думали: «А было бы забавно реализовать!», дал серьезные преимущества продуктам Xamarin. Конечно, важно быть сосредоточенным на том, что делаешь, но порой, не попробовав что-то по-настоящему сумасшедшее, невозможно добиться успеха. Кто знает, возможно, Google однажды поблагодарит нас… ;)

(Posted on May 1, 2012)

Автор: Vrhayt

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js