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

http://blog.xamarin.com/android-in-c-sharp/
  • Перевод
Между Oracle и Google разгорелась нешуточная патентная война, стоимостью в 1 миллиард долларов, за право использовать Java в Android.

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



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

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


Команда 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:



Чтобы этого достичь, потребовалось перекомпилировать большую часть 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?

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

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

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

Вы можете увидеть огромную разницу в производительности структур и generics в этом тесте, который мы запустили на простой реализации двоичного дерева на Java и 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)
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 77
  • НЛО прилетело и опубликовало эту надпись здесь
      +4
      И главное — свежая!
      +7
      Он специально всё время подменяет одно другим? Начинает говорить о реализации виртуальной машины, делает вывод о «медленности» языка. И наоборот.
        +11
        Да он вообще дико прыгает с Dalvik на JVM. Хотя выше понимает прекрасно разницу, тоесть где можно опускает dalvik потом начинает говорить о самом языке, в контексте языка говорит уже о платформе, причем данные явно устаревшие.
        +5
        > 2 мая 2012 в 03:32
        habrahabr.ru/post/143147/
          +7
          Блин, а было б круто если бы рядом со статьей была бы кнопка ммм,… «баян» (?!) и знач ты такой жмешь, указываешь ссылку на дублирующую статью и все это видят и если кто-то еще считает что ето баян то он тоже может нажать и если«баянов» больше чем плюсов то статьи объединяются в одну с «соавторами».
            +33
            Я старался перевести статью Мигель де Икаса, а не плодить баяны. По вашей ссылке указана лишь новость. Это немного разные вещи и трудозатраты. К тому же, кто-то находит это интересным и мне приятно помочь людям.
              +5
              Просто эту статью уже читали почти год назад, а тут вы со своей новостью, и внезапный внутренний вопрос: «О, они еще что-то в этом направлении сделали?», который натыкается на обломную подпись в конце
                0
                Я понимаю, вы перевели где-то в 3 раза больше текста. Но часть текста и график совпадают, да и статья то сама уже совсем не нова, и поданные в ней выводы уже однажды обсуждались. Поэтому было бы здорово если бы этот пост дополнял предыдущий, или хотя бы имел линк на него.
                Ну и посвежее данных хотелось бы о жизни проекта, естественно.
              –5
              Не понимаю чего хочет добиться Oracle. Вместо «войны» лучше бы договорились о совместной разработке dalvik. И oracle прибыль и google совершенствует ОС.
                +6
                Oracle хочет добиться… Да они своей кучей бабла поглотили и слияли больше компаний, чем у них в ресурсах есть талантливых менеджеров на каждую из них, и еще меньше архитекторов, способных собрать весь этот зоопарк в единую кучу. Чего теперь можно добиться?

                Или может был какой-то умный хитрый стратегический план для доведения до этой ситуации?
                Гугл и весь мир смотрят сейчас на Oracle как на фриков с патентами.
                +20
                Ставлю минус, потому что обрадывался было, что проект как-то продвинулся с состояния мая 2012, а оказалось это еще один перепост :(
                  +8
                  Судя по гитхабу, ХоботОС немного подумер: в репозитории один единственный коммит «Initial import of XobotOS into the public repo», созданный 10 месяцев назад. Да и статья не первой свежести
                    0
                    Тем не менее, это пока говорит лишь о том, что на публику разработки не выкладываются.

                    Кстати, на каких основаниях работали разработчики Xamarin/XobotOS?
                      +1
                      > Тем не менее, это пока говорит лишь о том, что на публику разработки не выкладываются.

                      Это очень странно для опенсорс проекта, претендующему на что-то.
                        0
                        Они ведь не обязаны делиться сразу же всеми своими наработками. Сам по себе проект Mono — это уже немало для сообщества.
                          0
                          Не обязаны, конечно. Просто странно, что за последний год нет никаких новостей и коммитов «эй, чуваки, мы живы, эхей!». Не неделя, не меяс, а целый год уже ни слуха, ни духа.
                    +7
                    Какая холиварная статья, прочитав это понимаешь что иказа еще тот троль
                    С тех пор язык и среда программирования продолжали развиваться. C# изначально имел все предпосылки для превосходства над Java во много раз. Начиная от динамического программирования, заканчивая асинхронностью языка, итераторами, функциональным программированием, параллелизмом и отличным внедрением generics. Многие из этих функций доступны благодаря исследованиям проводимых Доном Саймом и его командой F#.

                    В JVM тоже внедренно invoke dinamic начиная с седьмой версии, про итераторы вообще не понял о чем он, ф-циональщина есть начиная с восьмой версии. И есть замечательный язык scala, который стремительно набирает обороты(чего не скажешь о F#), да и вообще JVM гораздо более популярна для сторонних языков, чего там только нет, начиная c jruby до groovy, scala и т.п. Читаешь и складывется такое впечатление что у платформы джава инчего такого нет. Что полнейшая неправда. Да с дженериками есть некоторые проблемы, если копнуть сильно глубоко. По поводу далвика, да согласен что он осталее jvm во многом.
                      +1
                      Кстати, по поводу отсутствия структур в Java — в JVM происходит автоматическая аллокация на стеке если Escape Analysis показывает что объект используется только в одном потоке.
                      www.ibm.com/developerworks/java/library/j-jtp09275/index.html
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Думаю да. Хотя скорее всего можно сделать что-то типа IKVM для Dalvik.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            +1
                            Думаю, допилить IKVM для совместимости с Dalvik вполне возможно. Если бы Google поддержала инициативу, конечно же этим бы занимались всерьёз. А так — судя по всему проектом сейчас никто не занимается, к сожалению.
                              –1
                              А кому оно надо?

                              Гуглу? Что бы с нуля начать набирать приложения? (ну да, ну да, магическая перекомпиляция)

                              Самим Xamarin? Пфф, они попиарились как спецы, получили денег от МС и вложили их во вторую версии фреймворка (и имхо, очень удачно) и собираются продолжать зарабатывать деньги.

                              Может Microsoft? Ну да им оно надо, ещё одну ос поддерживать, изувеченную от рождения химеру.

                              Oracle? Им бы с явой справиться.

                              Сообществу? Ну так давно бы клонировало репу и вперёд.
                        +1
                        А списки в XobotOS тормозят? :)
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Выкинте свою тегру3 и купите нормальный armv6. :-)
                            • НЛО прилетело и опубликовало эту надпись здесь
                          +2
                          Это конечно все здорово, но лиценизя под которой они продают Mono for .NET, да и остальные свои продукты, мягко говоря варварская. Дикий vendor lockin, несмотря на как бе опен сорсность.
                            0
                            OpenSource проекты тоже должны зарабатывать, и хорошо, если это получается. Сам по себе Mono бесплатен и полностью открыт. Денег стоят только версии под Android и iOS.
                              –9
                              >OpenSource проекты тоже должны зарабатывать, и хорошо, если это получается
                              Сейчас практически все инфраструктурные проекты опен сорсные, так что оправдавать варварскую политику тем что это open source не стоит, и их авторы умудряются делать на них деньги, не занимаясь таким варварством (не все правда).
                            • НЛО прилетело и опубликовало эту надпись здесь
                                +7
                                Собственно, на днях Xamarin зарелизил Xamarin Studio. На вид она гораздо лучше MonoDevelop, по удобству работы пока не ясно. И она, кстати, бесплатная.
                                  +1
                                  Я рискну добавить, что она просто симпатичная и вообще няшечка >_<
                                  Еще немного, и будет уровень удобства как в VS+R#
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      Выглядит прелестно, сильно внешне смахивая на XCode :)
                                      0
                                      Это, к слову, MonoDevelop v4 :) Можно посмотреть в транке старого MD, там уже есть фиксы.
                                        0
                                        Вцелом, да.
                                        Однако, подписавшись своим именем, Xamarin, взял на себя обязательства. Если раньше было сложно предъявить за качество, ибо делает сообщество, то теперь в случае чего все шишки полетят в Xamarin.
                                          +1
                                          Эм. Вообще-то весь OpenSource (а XamarinStudio именно такой проект) предоставляется AS IS, любой может скачать, сделать форк и пропатчить как ему будет угодно — никаких претензий быть в принципе не может. Платный саппорт — это другой вопрос, но XamarinStudio не предоставляет такого.
                                            0
                                            А речь и не идет о каких-то юридических обязательствах, просто теперь эта IDE лицо Xamarin.
                                              0
                                              Лицо Xamarin — это ее продукты: MonoTouch, MonoDroid. Они о них заботятся, развивают и внимательно следят за тем, чтобы не потерять потенциальных клиентов (и предоставляя ту же платную поддержку по подписке). XamarinStudio — это нечто типа «ну вы можете пользоваться этим софтом и оно имеет некоторые заточки под наши продукты, но без гарантий», не более.
                                                0
                                                Не буду говорить за всех, но я судил бы о компании по IDE которую они назвали своим именем. Не только по ней, конечно, но и по ней в том числе.
                                                  0
                                                  Т.е. если бы Microsoft (представим на мгновение, что нет и никогда не было VisualStudio) стала бы выпускать некоторое расширение функционала блокнота (highlight, snippets, никакого даже AST и т.п.) с названием «MicrosoftStudio» и раздавала бы его бесплатно — именно это кривое бесплатное поделие и стало бы лицом Microsoft для вас, не смотря на все платные и LTS-поддерживаемые официально продукты?
                                                    +1
                                                    Скажем так, это повлияло бы на моё представление о Microsoft.
                                                      0
                                                      С чего бы это? Вот конкретный пример — выпиленный pinball из винды. Бесплатно, предоставлялось без каких-либо гарантий. Сейчас выпилилось. Вы как-то поменяли бы мнение о владельце авторских прав на основе этого поделия? Вряд ли. И таких проектов может быть много, несмотря на то, что они брендированы каким-нибудь именитым вендором, но не саппортятся официально.
                                                        0
                                                        Тут, на мой взгляд, немного несопоставимые масштабы.
                                                        Я, к примеру, расстроился, что пропал pinball и мог бы остаться на предыдущей версии, но там появилось что-то другое, большей для меня значимости, чем pinball, aero например.
                                                        Просто на фоне всего продукта (Windows в данном случае) вес этой игрушки для меня незначителен.
                                                          0
                                                          Вооот, подходим к сути. Так вот XamarinStudio — это такой же незначительный проект на фоне рантаймов + sdk Mono для разных платформ, за счет которого Xamarin и живет. Т.е. прямая аналогия с Windows / Pinball <=> MonoTouch,MonoDroid / XamarinStudio.
                                                            0
                                                            Точно, подходим к сути. :)
                                                            Просто, для меня удобый инструмен для использования продаваемых SDK не такая уж мелочь.
                                                            Для Вас, очевидно, мелочь.
                                                            Но не все же смотрят на это вопрос так как Вы, и не все — как я.

                                                            Подводя итог: коментарий, который оказался в другой ветке.

                                                  0
                                                  А Ваш комментарий, извините, но это претензия «А какого х*я у меня нет саппорта и гарантий, когда я пользуюсь халявным опенсорцом?».

                                                  Ирония зашкаливает, правда?
                                                    0
                                                    Читаем все подряд. Опенсорс != бесплатно. Про официальный саппорт было сказано выше.
                                                    0
                                                    XamarinStudio — официальная IDE. При покупке Xamarin.Ios/Android в Indie редакции я получаю возможность кодить только в ней.
                                                    Если я куплю и не смогу в ней кодить из-за объективных проблем — претензии будут именно Xamarin'у, независимо от опенсорсности чего-либо.
                                                      –1
                                                      Вы не покупаете XamarinStudio, вы получаете ее в нагрузку. Приобретаете вы нечто другое, а именно — sdk для сборки. Вы можете писать код в том же блокноте и собирать его из коноли — никакой XamarinStudio для этого не нужен.
                                                        0
                                                        XamarinStudio я, конечно, не покупаю. Я покупаю возможность работать с их продуктом из XamarinStudio. Эта возможность мне анонсируется при покупке в качестве характеристик их продукта. Если такой возможности у меня не будет, то (даже если это не написано в самом лицензионном соглашении) мои претензии будут вполне обоснованы.

                                                        К слову, в Business редакции есть возможность работать в VisualStudio. При этом VS мне, естественно, не продают, но если я куплю Business и в VS она у меня не заработает — претензии будут опять же к Xamarin. Здесь же вы согласитесь? :)
                                                          0
                                                          Эта возможность мне анонсируется при покупке в качестве характеристик их продукта.

                                                          А можно выдержку из EULA, где это написано в качестве характеристики купленного продукта?

                                                          но если я куплю Business и в VS она у меня не заработает — претензии будут опять же к Xamarin. Здесь же вы согласитесь? :)

                                                          Здесь соглашусь, но только из-за того, что все свойства четко прописаны и свойства установленного продукта должны соответствовать заявленным свойствам.
                                                            0
                                                            А можно EULA на эти два продукта? Хоть и не очень хочется их сравнивать, но я их просто не нашел.

                                                            В случае «справедливого суда» в данном случае EULA не играет роли. store.xamarin.com/ — публичная оферта, или как это называется? Xamarin Studio отдельным пунктом. Ровно таким же, как ниже VS.

                                                            Но тут, как ниже и пишут, дело больше не в юридических тонкостях. Они взяли на себя ответственность. В случае проблем с претензиями будут обращаться к ним. Если они будут отшивать «не наши проблемы»… ну, я просто думаю, что они не будут. Равно как и судиться из-за 300$ никто, конечно, не будет.
                                                              –1
                                                              А можно EULA на эти два продукта? Хоть и не очень хочется их сравнивать, но я их просто не нашел.

                                                              Так при покупке и установке пакета оно разве не показывается? :)

                                                              В случае «справедливого суда» в данном случае EULA не играет роли.

                                                              Нет, вот смотрите. Красивые буковки на сайте — это одно, а то, что вы покупаете — отличается кое-какими деталями. Думаю, к этому давно надо было привыкнуть, в этом соль рекламы. Вы покупаете пакет, обладающий определенными свойствами и принимаете условия использования, включая AS IS. Если эти условия вам не подходят, по идее, вы можете вернуть деньги до принятия лицензионного соглашения. Но это в цивилизованных странах, разумеется.
                                                                0
                                                                В цивилизованных странах то, что говорят в рекламе, должно совпадать с реальностью :)
                                                                Если бы это было не так, в рекламах не было бы «звёздочек» и подписей мелким шрифтом :)
                                                                  0
                                                                  Ну я именно это и имел ввиду — уточнения, написанные мелким шрифтом, на которые обращают внимания только однажды наколовшиеся.
                                                                  Типичный пример — поставщики домашнего интернета. Красивые рекламки, вкусные цены. И где-то в конце приписочка маленькими буковками, что это все будет работать 1-2-3 месяца, а потом поставщик будет обдирать клиента по-полной. Страничка, на которую вы ссылаетесь — сродни такой же глянцевой рекламке. Нужно читать более подробно, что именно покупается и что именно саппортится.
                                                  0
                                                  В данном случае, шишки полетят не в сообщество, а в конкретного человека. Он в эту уздечку если впрягся, значит готов.
                                                    0
                                                    Вообще, странно, почему люди пытаются что-то требовать от бесплатно предоставляемого им ПО. Вот если я сделаю форк MD, назову его по-своему (с сохранением лицензии использования) + доточу под пару своих нужд, то это станет лицом моей компании? Да с чего бы это? Это просто оболочка, позволяющая что-то делать более удобно, причем для моей команды. Да, я ее выложил в паблик, но какие претензии могут быть?
                                                      0
                                                      Речь не идет о требованиях, речь идет о том, что на их месте я бы старался сделать хорошо то, под чем подписался, не более того.
                                                        0
                                                        Думаю, они еще не раз все перепилят и причешут, все-таки это маленькая конторка с ограниченными ресурсами.
                                                          0
                                                          Да они уже начали, и это очень мило с их стороны.
                                                        0
                                                        Сделайте, выложите, если это круто — это сделает вам Имя и печеньки.
                                                          0
                                                          Это не сделает ничего для меня, кроме наличия толпы требующих новых фич и исправления редких багов, валящихся только у них, без предоставления фидбека.
                                                            +1
                                                            Фидбеки по багам! О да, эти фидбеки о багах… Вы кстати в курсе, что многие готовы почти в жопу целовать тех, кто хоть какие-то, хоть какие-нибудь фидбеки по багам постит? Если вашему форку не интересны эти надоедливые гики со своими мелочными проблемами — удачи в проекте, она вам понадобится.
                                                              +1
                                                              Смысл коммента так и не был понят. Резюмирую — версия не подразумевала дальнейшего расширения и была просто пропатчена на пару полезных штук; никакого саппорта или ответственности за потенциально нанесенный ущерб. Но ведь требуют. Да, никакого форка нет — это был просто пример :)
                                                              Судя по этой ветке комментариев — это именно то, что будет происходить с MDv4, и это печально. Лучше бы вместо претензий точно так же вкладывали за бесплатно свое время в разработку бесплатного ПО, которое используется (в тот же MD вместо тыкания пальцем в его неприглядные места).
                                                                0
                                                                Это грусный момент, на базе опенсорцного ПО разрабатывают очень много платного ПО, но нет никакой международной полиции, которая бы следила за этим и соблюдением начальной лицензии.
                                                              0
                                                              Ну не скажите, может инвесторы в вас увидят золотое дно.
                                            –11
                                            Это что же получается, я на десктопе плююсь от медленных .NET приложений (например Samsung Magic Tuner для управления монитором загружается 10 секунд, отображение из трея — 1 секунда), то Dalvik даже ещё медленнее оказался чем это?
                                              +10
                                              написанное через *опу приложение будет тормозить, вне зависимости от языка и технологии.
                                                +8
                                                У .NET все в порядке с производительностью. Не в порядке у писателей всяких Magic Tuner'ов.
                                                0
                                                Лучше хочу кодить по андроид на dart или coffeescript. Для небольших приложений на пару тысяч строк ява явно оверкилл. Прикольно было бы, вот например $("#my_button").onclick( { alert(«hooray for boobies») } ); вместо findViewById, потом каст, потом setOnclickListener( new OnClickListener() ).
                                                0
                                                Кто знает, возможно, Google однажды поблагодарит нас… ;)

                                                Кто знает, возможно, Google однажды купит вас и закроет.
                                                  0
                                                  Есть вероятность, что после предложения от гугла, Мигель придет в МС.

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое