Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 10:50
Оценка: :)
В условиях тотального оведроживания мобильного сегмента, у C#-программистов возникает естественное желание безнапряжно писать под Андроид. На сегодня всё, что предлагает M$ — это Xamarin, который на мой частный взгляд, "пятое колесо в телеге", причём не самого высокого качества. А учитывая, КАК это чудище работает в Ведроид-среде, закономерно хочется выкинуть архаичные "mono-CLRы" с "прокси" и выпускать "почти нативные" приложения, полностью и напрямую используя Ведроид-АПИ. Как мне видится один из вариантов "освоения Ведроида дотнетом":

Раз у нас есть Roslyn, мы можем с лёгкостью брюк, превращающихся в шорты, запилить вывод JVM-кода. Да, возможно некоторые плюшки CLR придётся поскипать (dynamics? Много ли они кому нужны?). Главное — мы можем выпускать приложения, "нативные для Жабы". Работа — не бей лежачего, уж куда проще запиливания отдельной CLR для Андроида! А далее как по смазке: создаём врапперы к Андроид-АПИ, которые будут "MSIL-библиотеками". Т.е. Студия будет с ними работать вполне прозрачно.

Следующий этап — "WPF на мобильный лад": делаем декларативную ГУЙню, которая 1:1 мэпится в контролы Ведроида (даже с теми же именами). Синтаксис будет XAML'овый. Опять же, невелика работа — сконвертировать теги в контролы мобилы и инициализировать свойства.

Сама разработка (поначалу) прекрасно будет идти на родной Вендюшечке, где мы собираем бинарные apk, заливаем по USB в ведроид и вуаля — аппликуха на C#/WPF, которая "как влитая" нативно работает в неуклюжем Ведроиде!
Касательно "мышедизайна", тут всё просто: на венде будут работать минимально-функциональные mock-контролы, имитирующие Ведроидные — так вы будете видеть все цвета, выравнивания и т.п. А в результирующий apk уже пойдут прямые обращения к Андроиду.


Напомню, это всё всего лишь инженерная идея, как можно было БЫ сделать это по-человечески. И конечно же, крайне приветствуются ваши мнения, которые вы конечно же медленно обдумаете, прежде чем публиковать — вопрос-то вполне технический и интересный. Итак, что вы думаете по поводу сей системы?
Re: Android для дотнетчиков, но по-человечески
От: Je suis Mamut  
Дата: 12.11.20 10:53
Оценка: -1
но зачем?
экран другой, устройство ввода другое
всё равно гуй рисовать заново
java похожа на c# (особенно старых версий)

все приседания нужны когда под обе мобильные платформы пишешь — чтобы два раза не писать
Re[2]: Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 10:58
Оценка: +1
Здравствуйте, Je suis Mamut, Вы писали:

JSM>экран другой, устройство ввода другое, всё равно гуй рисовать заново


Причём тут экран?? Неужели со всего поста непонятна главная задача: писать под ведроид, но на C#? Тут вообще никакой речи про совместимость. Просто считай ты вчера родился, а сегодня захотел написать ведроид-приложение, а в школе ты изучал C#.
Re: Android для дотнетчиков, но по-человечески
От: Sharov Россия  
Дата: 12.11.20 11:25
Оценка:
Здравствуйте, Kolesiki, Вы писали:

Если не ошибаюсь, то всяческих конвертеров с c# на ява на уровне байт-кода не мало. Т.е. это не проблема.

K>Следующий этап — "WPF на мобильный лад": делаем декларативную ГУЙню, которая 1:1 мэпится в контролы Ведроида (даже с теми же именами). Синтаксис будет XAML'овый. Опять же, невелика работа — сконвертировать теги в контролы мобилы и инициализировать свойства.


А вот тут затык. Если надо написать консольную утилиту или процесс, то можно код конвертировать на уровне байт-кода.
А вот на счет UI и 'которая 1:1 мэпится в контролы Ведроида' самая сложность и есть, кмк.
Т.е. нужен будет транслятор с XAML на соотв. язык разметки ui ведра или напрямую в ява код. Причем важна
совместимость по вызовам всяческих событий обработки и т.п. Т.е. это весьма нетривиальная задача.

Встает другой вопрос -- в чем проблема, зная c# перейти на яву, если очень надо? При уверенном знании языка
вкатка будет от силы пару месяцев.
Кодом людям нужно помогать!
Re[3]: Android для дотнетчиков, но по-человечески
От: Je suis Mamut  
Дата: 12.11.20 12:21
Оценка: 3 (1) +2 -1
K> Просто считай ты вчера родился, а сегодня захотел написать ведроид-приложение, а в школе ты изучал C#.

от такого подхода волосы дыбом встают
добровольно загонять под капот совершенно необязательную сложность
впрочем, каждому своё
Re: Android для дотнетчиков, но по-человечески
От: kov_serg Россия  
Дата: 12.11.20 12:30
Оценка: 8 (1) +3
Здравствуйте, Kolesiki, Вы писали:

K>В условиях тотального оведроживания мобильного сегмента, у C#-программистов возникает естественное желание безнапряжно писать под Андроид.

Просто попробуйте писать под ведро на kotlin и вы на C# будете смотреть иначе.
Re[2]: Android для дотнетчиков, но по-человечески
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.11.20 12:41
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Kolesiki, Вы писали:


K>>В условиях тотального оведроживания мобильного сегмента, у C#-программистов возникает естественное желание безнапряжно писать под Андроид.

_>Просто попробуйте писать под ведро на kotlin и вы на C# будете смотреть иначе.
Кстати а, что в котлине интереснее по сравнению с C#9 ?
и солнце б утром не вставало, когда бы не было меня
Re[3]: Kotlin lambdas
От: Qbit86 Кипр
Дата: 12.11.20 14:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Кстати а, что в котлине интереснее по сравнению с C#9 ?


Там есть много хороших фич, конечно, и я назову не главные. Но меня прёт от синтаксиса лямбд для некоторых частых частных случаев.

it: implicit name of a single parameter
It's very common that a lambda expression has only one parameter.
If the compiler can figure the signature out itself, it is allowed not to declare the only parameter and omit ->. The parameter will be implicitly declared under the name it:

ints.filter { it > 0 } // this literal is of type '(it: Int) -> Boolean'

https://kotlinlang.org/docs/reference/lambdas.html#it-implicit-name-of-a-single-parameter

Passing trailing lambdas
In Kotlin, there is a convention: if the last parameter of a function is a function, then a lambda expression passed as the corresponding argument can be placed outside the parentheses:

val product = items.fold(1) { acc, e -> acc * e }

Such syntax is also known as trailing lambda.
If the lambda is the only argument to that call, the parentheses can be omitted entirely:
run { println("...") }

https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter

Глаза у меня добрые, но рубашка — смирительная!
kotlin lambda
Re: Android для дотнетчиков, но по-человечески
От: rudzuk  
Дата: 12.11.20 15:11
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K> В условиях тотального оведроживания мобильного сегмента, у C#-программистов возникает естественное желание безнапряжно писать под Андроид. На сегодня всё, что предлагает M$ — это Xamarin, который на мой частный взгляд, "пятое колесо в телеге", причём не самого высокого качества. А учитывая, КАК это чудище работает в Ведроид-среде, закономерно хочется выкинуть архаичные "mono-CLRы" с "прокси" и выпускать "почти нативные" приложения, полностью и напрямую используя Ведроид-АПИ.


Есть вот такой зверь https://www.elementscompiler.com/elements/hydrogene/
Там не только Android поддерживается, но еще куча платформ. Сам не пробовал, если что.
avalon/3.0.0
Re[2]: Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 15:15
Оценка: +1 -1 :)
Здравствуйте, kov_serg, Вы писали:

_>Просто попробуйте писать под ведро на kotlin и вы на C# будете смотреть иначе.


*смайлик горькой усмешки старика молодому поколению* Неужели ты думаешь, эта "светлая мысль" меня не посещала??
Беда в том, что все мы люди и поэтому имеем сразу целый ворох "почему НЕТ":

  1. Я — проф.разработчик, мой главный и единственный язык — C#. Он же и "язык мышления". Прыгать с языка на язык я мог себе позволить в бестолковом студенчестве, да и то требовалась "перестройка сознания". Сейчас, когда в "рабочем сознании" я "сишарплю", у меня просто нет возможности и желания ещё и продираться сквозь дебри мусора от второго языка: "А можно ли завести виртуальный статический метод?". Сейчас язык — один и я знаю практически все ответы на любой архитектурный вопрос. Ломать голову на два языка — увы, непозволительная для профессионала роскошь.
  2. "Изучать язык" — это не методичку лектору пересказать! Это долгий, глубокий процесс, изучение ньюансов, отличий от "ООП-классики", всякие сахарки и приколы. Если выбирать язык, то один и "пока смерть не разлучит вас". Но я не могу менять "рабочий язык"! Даже в качестве хобби. Потому что как и сказал в п.1, ты получишь груду мусора из 2 языков и постоянно будешь тупить даже при том, что отлично знал один из языков.
  3. Но ситуация ещё хуже: язык — ничто без библиотек. И чтобы сносно даже открыть файл, придётся перелопатить СОТНИ классов, примеров, "типичных способов употребления", прежде чем ты напишешь программу, достойную профессионала. Кстати, в моём "покорении Ведроида" упущен момент с базовыми классами .NET — их крайне желательно было бы "портировать", чтобы от ведроида использовать только графические плюшки и сервисы.
  4. Писать под вердроид, особенно после шикарной VS, практически не на чем! Удивительно, но факт — за 12 лет эти тюлени не создали ни одной удобной, быстрой, легковесной IDE! Даже IDEA при всех своих плюшках — ужасна, а компиляция примитивнейших сорсов занимает МИНУТЫ!! Вы встречали подобный идиотизм в .NET? Да у меня самые "фичастые" WPF-ки (где много декларашек перелопачивается в C# код) канпеляются от силы секунд 5! Как так-то?? И дело не в котлине — с жабой ровно та же тормозня. Извините, ТАКОЙ тормозилище выбешивает похуже перфокарт.
  5. Сюда же "организованная гиперпомойка исходников", из которой состоит ЛЮБОЙ проект для Ведроида. 8 каталогов для простейшего приложения? Серьёзно?? А вот это ублюдство:
    imageView = (ImageView) findViewById(R.id.imageView);

    (это так ищутся и только потом используются контролы в коде) Это шутка такая штоле?

Откровенно, мне Котлин тоже нравится (причём даже после C#), но ублюдская компиляция и тухлые IDE — то болото, в которое ступаешь однажды и хочется поскорее оттуда убежать.
Ведроид — это живой труп, могила здравого смысла — самое безобразное, что можно было придумать для простейших "мобилок".
Re[2]: Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 15:29
Оценка: +1
Здравствуйте, rudzuk, Вы писали:

R>Есть вот такой зверь https://www.elementscompiler.com


Спасибо! Но он платный, увы. Да и словоблуды они ещё те провёл на сайте 10 минут, пытаясь понять, что там "нативного". Боюсь, что вывеска как всегда круче товара.
Так или иначе, крайне сомнительно, что они приблизились к моей идее.
Re[3]: Android для дотнетчиков, но по-человечески
От: rudzuk  
Дата: 12.11.20 15:42
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K> R>Есть вот такой зверь https://www.elementscompiler.com


K> Спасибо! Но он платный, увы. Да и словоблуды они ещё те провёл на сайте 10 минут, пытаясь понять, что там "нативного".


Там под нативностью понимается нативность по отношению к платформе https://docs.elementscompiler.com/Platforms/. Пишешь под дотнет, на выходе будут сборки, пишешь под жабу, будут джары с байткодом, пишешь под win32 будет бинарник и т.п. Есть небольшой кроссплатформенный слой, но в основном писать придется используя api платформы (т.е. никаких дотнет типов, например, на андроиде не будет).
avalon/3.0.0
Re[2]: Android для дотнетчиков, но по-человечески
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.20 16:19
Оценка:
Здравствуйте, Je suis Mamut, Вы писали:

JSM>все приседания нужны когда под обе мобильные платформы пишешь — чтобы два раза не писать


Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось
Re[3]: Android для дотнетчиков, но по-человечески
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.20 16:21
Оценка: +1 :)
Здравствуйте, Kolesiki, Вы писали:

K>Причём тут экран?? Неужели со всего поста непонятна главная задача: писать под ведроид, но на C#? Тут вообще никакой речи про совместимость. Просто считай ты вчера родился, а сегодня захотел написать ведроид-приложение, а в школе ты изучал C#.


И в этот момент ты узнаешь шокирующую новость: то, чему тебя научили в школе, не подходит, чтобы зарабатывать на кусок хлеба. Поэтому ты идешь работать официантом в макдональдс, а вечерами подучиваешь недостающие знания.
Re[3]: Android для дотнетчиков, но по-человечески
От: Je suis Mamut  
Дата: 12.11.20 16:31
Оценка:
JSM>>все приседания нужны когда под обе мобильные платформы пишешь — чтобы два раза не писать

Pzz>Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось


ну я вроде как ровно это и имел ввиду
не быть мне оратором, не быть
Re[4]: Android для дотнетчиков, но по-человечески
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.20 16:39
Оценка:
Здравствуйте, Je suis Mamut, Вы писали:

JSM>>>все приседания нужны когда под обе мобильные платформы пишешь — чтобы два раза не писать


Pzz>>Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось


JSM>ну я вроде как ровно это и имел ввиду

JSM>не быть мне оратором, не быть

Ну тут смущает то, что говорится это в контексте C#, а мобильная венда хоть и померла, но память об ней еще жива.
Re[3]: Android для дотнетчиков, но по-человечески
От: Sharov Россия  
Дата: 12.11.20 16:39
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось


Кроме плюсов и всяческих js так кто-то умеет?
Кодом людям нужно помогать!
Re[4]: Android для дотнетчиков, но по-человечески
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.20 16:59
Оценка:
Здравствуйте, Sharov, Вы писали:

Pzz>>Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось


S>Кроме плюсов и всяческих js так кто-то умеет?


Ну, этого можно достичь разными путями.

Можно, например, притащить с собой веб-броузер, и сделать все на htpm+js+css. Получившееся поделие будет весить мегабайт 50, но кого этим сейчас смутишь?

Можно вспомнить про то, что обе платформы поддерживают нативные бинарники. На андроиде, правда, так не принято, но и не запрещено. Тогда проблема будет в кросс-платформенной графике. Можно притащить с собой какой-нибудь Qt, весить, правда, будет не сильно меньше, чем если притащить с собой броузер.

Ну и наконец, можно рассмотреть языки, которые могут быть перекомпилированы в Java/ObjC (или чего там сейчас модно на макакосе). Проблему с кросс-платформенной графикой, правда, это не решит.

Можно ограничиться графикой на уровне OpenGL, она, похоже, довольно одинаковая на обеих платформах. Тогда получится использовать нативные бинарники, и не притаскивать с собой Qt. Выглядеть, правда, будет ужасно, OpenGL плохо подходит для рисования формочек. Так можно даже на Go писать

Но в общем, готового out of box и без геморроя решения, похоже, нет. Присутствующие на форуме шароварщики могут при желании этим заняться.
Re[4]: Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 17:24
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Там под нативностью понимается нативность по отношению к платформе https://docs.elementscompiler.com/Platforms/. Пишешь под дотнет, на выходе будут сборки


ХА! Так это и есть "маркетинговая нативность"! Реальная нативность в контексте Ведроида — прога для JVM.
Re[3]: Android для дотнетчиков, но по-человечески
От: Kolesiki  
Дата: 12.11.20 17:25
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Практический интерес представляет другая задача: писать под андроид и макакос, чтобы из одного кода под обе системы получалось


Интерес как раз сугубо мечтательско-теоретический. На практике "один код для двух платформ" — маниловщина.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.