Эмюль На Android



эМюль на Android

эМюль на Android

Это история о том, как стало возможно загружать файлы из сети eDonkey на мобильные устройства под управлением Android. Существует мнение, что разработка клиентов для протокола eDonkey (ED2K) уже давно остановлена, но это не совсем так.

Сразу оговорюсь - речь идет не об изменениях в программе eMule и даже не о моде этой программы, а о самостоятельном проекте.

Почему eMule — потому что это известное имя клиента стало нарицательным и обычно упоминается, когда говорят об обмене файлами по протоколу ED2K. Подробности ниже.



Предисловие

Несколько лет назад я принимал участие в разработке клиента для сетей ED2K (eDonkey2000).

Эта сеть, почти забытая в России, до сих пор довольно популярна в Европе.

Самыми известными клиентами являются eMule и его кроссплатформенный мод aMule. Протокол eDonkey и модифицированный клиент eMule используются в сети локального интернет-провайдера для обмена файлами внутри сети.

Были выдвинуты следующие требования: добавление поддержки торрентов, кроссплатформенность Linux, Windows и Mac, а также улучшение производительности.

Изучив код eMule, aMule и некоторых других клиентов, стало понятно, что написать все с нуля проще, чем вставлять торренты в существующие программы.

Было решено разделить код на ядро, обеспечивающее взаимодействие с сетью, и интерфейс.

Прототипом библиотеки послужил небезызвестный libtorrent-rasterbar для графического интерфейса qBittorrent — тем более, что там уже использовался libtorrent-rasterbar. Таким образом, проект был реализован с использованием C++, boost и Qt. В качестве транспорта для libtorrent-rasterbar и libed2k gui представляет собой переработанный qBittorrent. Довольно долго я думал над вариантами мобильного приложения.

Это может быть приложение QtQuick, приложение Java с вызовом библиотеки через JNI или даже просто нативное приложение.

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

Забегая вперед скажу, что в итоге все было переписано на Java и сделано нативное приложение.



Кросс-компиляция библиотеки

Для оригинального проекта была создана отдельная библиотека libed2k, обеспечивающая работу в сетях ЭД2К.

Для сборки libed2k вам понадобится встроенный буст, с этого я и начал.

В процессе поиска подходящего решения мы перебрали варианты с использованием оригинального NDK и с помощью CrystaxNDK. Преимущество Crystax заключалось в том, что буст был уже собран — сборка буста показалась мне одной из самых сложных задач.

Тестовое приложение собралось довольно быстро, но при запуске оно вылетало.

Оказалось, что разработчики заменили еще не реализованные системные функции некой заглушкой, при вызове приложение получает сигнал и вылетает. С моей точки зрения, это не лучший вариант — приложение собирается, но не работает. Я не смог победить ребилд Crystax, поэтому мне пришлось обратиться к оригинальному NDK.

Повышение сборки

Это оказалось гораздо проще, чем я мог себе представить.

В общем, дело сводится к запуску скрипта.

Сначала проверяем проект Повышение для Android .

Вам понадобятся совместимые версии boost и NDK. Скачать старую версию NDK пока еще квест - ниже ссылка на описание как это сделать.

Собственно, это почти все — остается только следовать инструкциям Boost-for-Android.

Строительство библиотеки

Библиотека использует CMake, и это было проблемой.

Вообще CMake доступен в Android Studio, но я ничего о нем не знал и всегда запускал сборку из консоли.

Этот проект помог мне Android-CMake .

Для поддержки пришлось добавить файл Android.cmake, который практически идентичен конфигу в Linux, и использовать find_host_package вместо find_package, добавив вот эту заглушку:

   

if(NOT COMMAND find_host_package) macro(find_host_package) find_package(${ARGN}) endmacro() endif()

Более подробно процесс сборки описан здесь libed2k .



Сборка графического интерфейса

Эту часть пришлось делать практически с нуля.

Нам удалось переиспользовать некоторые модели и поработать с ядром.

Посмотрев примеры кода на QML и т.п.

пришел к выводу, что писать с нуля — не вариант; нам нужно искать пути упрощения разработки.

Мой метод заключался в использовании qml-материал .

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

Установить все это просто — либо вы можете использовать тот, который рекомендован авторами, либо просто скачать и разложить все по папкам в вашей установке Qt вручную.

Дальше все идет по более-менее стандартному пути — указываем путь к готовым библиотекам и запускаем сборку.

Сборка была выполнена статически, чтобы упростить развертывание.



Реклама

Реклама, приносящая даже небольшую прибыль, мотивирует продолжать развитие и совершенствоваться.

Не буду вдаваться в подробности — простой поиск в Google по Qt AdMob выдаёт ссылки на статьи, которые я использовал при встраивании рекламы в приложение.

Опишу процесс верификации аккаунта.

В AdMob есть удобный вывод средств на ваш счет; порог, с которого можно вывести средства, начинается со 100$.

Но есть одно препятствие – аккаунт должен быть верифицирован.

Верификация происходит путем отправки по почте настоящей бумажной карты с кодом.

Есть три попытки с интервалом около месяца.

Я ждал дольше, боясь потратить зря все свои попытки, но ничего не получил.

Однако все закончилось хорошо, поэтому я решил упомянуть о рекламе.

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

Вы можете добавить к скану водяные знаки — он все равно будет принят.

Публикация

Несколько слов о публикации в Google Play. Я описываю это на примере Google Play, потому что сейчас это безоговорочный монополист. Ближайшие конкуренты, такие как Amazon, к сожалению, и близко не стояли.

Итак, приложение готово, аккаунт оплачен, пакет собран — можно публиковать.

Для меня публикация казалась каким-то простым, автоматическим этапом, который закончится как бы сам собой.

К счастью, в большинстве случаев это действительно так, особенно при публикации обновлений — вам достаточно подготовить описание и скриншоты.

Однако прежде чем нажать кнопку «опубликовать», важно прочитать правила публикации от Google, иначе есть немалая вероятность их прочитать после получения письма о блокировке приложения.

Мне было лень читать документацию и я изучил ее после блокировки.

Google не отправляет точное описание нарушения — просто раздел или разделы правил, которые были нарушены, вам предлагается определить для себя, что именно в публикации не прошло проверку, но это не так просто.

И наконец, используйте альфа и бета версии, это очень удобно.

Все то же самое, что и во время релиза, но вы можете настроить доступность и пользователи не смогут публично оценивать приложение.

Помогает избежать негативных оценок в самом начале.

Практически единственная моя пиар-акция — это анонс на официальном форуме eMule. Никаких дальнейших попыток продвижения я не предпринимал.

Тем не менее, количество установок постепенно увеличивалось.

После первого обновления программа была забанена Google Play. Да, такое тоже бывает — выпускаешь обновление и получаешь письмо о блокировке приложения.

Причиной блокировки является выдача себя за другое лицо или нарушение авторских прав.

Попытка апелляции не увенчалась успехом.

Под подозрение попали скриншоты программы с загрузкой Roxette и сам значок программы, собранный из кусочков логотипа Android. Я не сильно расстроился, более того, этот запрет побудил меня добавить рекламу, нарисовать иконку и еще некоторые улучшения.

Повторная публикация приложения с новым значком и отредактированными скриншотами, а также с новым именем решила проблему.

Забегая вперед, скажу, что, возможно, проблема была в названии с упоминанием «осел», ведь следующее приложение с названием jDonkey тоже было забанено.

В течение года выходили обновления, добавлялась поддержка Кадемлии.

Число установок росло на протяжении всего года, но сейчас начинает постепенно падать.

Это может быть связано с переходом пользователей на Java-версию или общим оттоком пользователей из сети ЭД2К.

При этом я опубликовал платную версию без рекламы - довольно неожиданно, но она продалась.

В целом приложение оказалось достаточно стабильным.



Заключение

Собственно, это все о приложении C++ для Android. Комбинация Qt/C++ неплохо работает на Android. Используя компоненты qml-material, вы сможете быстро создавать красивые интерфейсы.

К недостаткам можно отнести длительную загрузку приложения и более сложную интеграцию с системой.

Как я уже упоминал выше, приложение было переписано на Java и сейчас разрабатывается только эта версия.

Если статья вызовет интерес, я напишу подробнее о внутренней структуре протокола eDonkey, что такое Kademlia (DHT) и как он работает.

Ссылки

Теги: #C++ #boost #CMake #Qt #qml #Android #peer-to-peer #emule #ed2k #обмен файлами #C++ #Qt #разработка для Android
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.