Комментарии 29
Чувак, большое тебе спасибо за продвижение Go в сторону Андройда :)
+5
Неделя Go на Хабре прям.
Мне просто видится странным полностью переписывать реализацию на другом языке, при этом не попытавшись оптимизировать уже существующий вариант. Или, по крайней мере, разобраться, что именно тормозит.
Проведенный анализ не выявил проблем кода. Алгоритм работал безупречно, памяти потреблял в строго отведенных количествах, не отвлекался на посторонние процессы, все асинхронно, аппаратных ресурсов предостаточно. Вывод напрашивался только один — виртуальная машина android dalvik имеет производительность, отличную от JVM, и в рамках dalvik данный код обречен на тормоза.Вот так просто — причина в dalvik? Или причина в каких-то участках кода, которые тормозят под dalvik? Вы профилирование кода когда проводили, не нашли этих участков?
Мне просто видится странным полностью переписывать реализацию на другом языке, при этом не попытавшись оптимизировать уже существующий вариант. Или, по крайней мере, разобраться, что именно тормозит.
+3
Переход на другой язык не было простым решением. В анализ сложившейся ситуации было вложено немало времени. Да, был небольшой маневр для оптимизации, но кардиналных улучшений не предвещал. Против идеи продолжить оптимизировать java-код также был тот факт, что Google Keyboard использует для своих предсказаний именно нативный код, правда не на golang. Возможно, есть решение этого вопроса и в dalvik, но это уже будет совсем другой алгоритм, и с неопределенными сроками завершения.
+1
Ничего себе. Даже будучи оптимистически настроенным касательно Go на Android/iOS, уж никак не ожидал подобной истории так быстро (особенно учитывая совсем свежий статус gomobile).
А в «обычный golang package» всё же нужно импортить что-то из gomobile и вызывать какие-то функции или это может быть уже существующий пакадж, который писался ещё до того, как gomobile был в мыслях?
Разрабатывается обычный golang package, никаких дополнительных рекомендаций. Экспортные методы будут доступны из android.
А в «обычный golang package» всё же нужно импортить что-то из gomobile и вызывать какие-то функции или это может быть уже существующий пакадж, который писался ещё до того, как gomobile был в мыслях?
0
del
0
Вроде ходили слухи что скоро можно будет на Go полностью разрабатывать приложения для Android (т.е. обходиться одним Go, без Java). Есть какие-то подвижки в этом направлении?
+1
В настоящее время есть возможность создать android приложение полностью на golang, но доступны не все api android. Полная поддержка api пока в планах. Здесь подробнее.
+1
Да-да, нужно только исправить линкер, а то его писало 2.5 хипстера в обеденные перерывы, сделать нормальную поддержку x86 архитектуры (а то мои appium-тесты и android-x86 «чота не работают» (ц)), и добавить вменяемый механизм вызова java-методов, не требующий вставки кода на C (https://github.com/golang/mobile/blob/master/audio/al/al_android.go — ШТА ЭТО?).
0
В java коде была явно какая-то проблема (а скорее всего — в его интеграции на андроид). Не может время работы уменьшиться с 7 секунд на java до 10мс на Go.
+4
Есть ли возможность попробовать снять трейс методов на java коде? (кнопочка start method tracing в Android Studio на вкладке Android). Уж больно интересно, что там может тормозить.
+2
Согласен, вы можете сомневаться в качестве проведенного анализа проблемы. Но даже в этом случае мы стоим перед фактом, что библиотека на golang заработала, а на java — нет. И у меня даже нет сомнений, на чем реализовывать требовательный функционал в следующий раз.
+1
То что вы завели Go на андроиде это похвально, но не разобравшись с ситуацией, мы получим ещё один миф, что java тормозит.
+5
Ни в коем случае не хотел бы поучаствовать в создании такого мифа. Люди, слышите, java не тормозит! Статья не об этом, если кому-то показалось.
0
Да нет такого мифа есть куча измерений. Посмотрите на измерение сортировки на Dalvik. Главное упущение в статье, что Android уже не использует Dalvik (ADT). Во-вторых Dalvik тоже сильно отличается 1.5 от 2.3 (появился первый JIT). У меня есть достаточно примеров, которые тормозят, в свое время когда пытался оптимизировать, приходилось делать совершенно идиотские оптимизации как реиспользование объектов, лишь бы не выделять память заново. В конце концов, эти оптимизации устарели, а еще, хуже всего, вели к логическим ошибкам. Лучше уже было на С важные куски написать. В общем, фризы — бич Dalvik интерпретатора.
И не java тормозит, а Dalvik совсем никакой по сравнению с JVM.
И не java тормозит, а Dalvik совсем никакой по сравнению с JVM.
+1
Добрый день, подскажите пожалуйста где можно найти туториал для ознакомления с golang для людей без С++ прошлого. Спасибо.
0
Знания с++ при разработке на golang потребуются только в специальных случаях. Так что начинать изучать можно с любого доступного места. Например, отсюда. На Хабре также полно материала.
+1
Очень круто, спасибо!
Можно ссылку на приложение?
Зарубежное Go-community заинтересовано в переводе: www.reddit.com/r/golang/comments/3aam6g/faster_android_application_using_golang_auto
Можно ссылку на приложение?
Зарубежное Go-community заинтересовано в переводе: www.reddit.com/r/golang/comments/3aam6g/faster_android_application_using_golang_auto
+1
del
0
А каков размер библиотеки получился? По моим наблюдениям бинарники у Go довольно не маленькие. А так идея заманчивая.
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Ускоряем приложение Android с помощью Golang