Личная история | Как я стал разработчиком ZennoDroid

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Всем привет, с вами Дмитрий!

Водная часть.
125299
В данной статье я хотел бы рассказать свой путь, как я осваивал разработку под ZennoDroid. Что я узнал, с какими проблемами столкнулся и чему научился, а так же дать советы тем кто тоже хочет освоить ZennoDroid.

Я опытный разработчик ZennoPoster, у меня больше 8 лет стажа написания различных шаблонов. Есть свой YT и Telegram каналы. Есть достаточная база знаний CSharp, что позволяет мне без всяких проблем взаимодействовать с продуктами ZennoLab через С#. ZennoDroid я начал изучать буквально 3-4 месяца назад. Первые недели 2 у меня ушло просто на разбор и понимание, как тут все устроено и написание вспомогательного инструмента, что бы я мог легче контролировать, что происходит у меня на экране. Вспомогательный инструментарий я обновляю до сих пор :-) .

Моя история.
125300

Начинаем начинать.
Давным-давно, когда только вышел продукт ZennoDroid, я попытался с ним поработать, но тогда он был такой сырой, что мне даже не удалось запустить эмулятор. Если я ничего не путаю, то тогда он работал не на базе Memu, а на чем-то другом, очень ресурсоемком и мне даже не хватало мощностей моего ноутбука для нормальной работы. В общем первое знакомство прошло не очень удачно и желание работать с данным продуктом у меня отбило на годы, да и потребностей в автоматизации Android не было.

К ZennoDroid я не прикасался до текущего 2024 года, даже практически не вспоминал про него. Но в комьюнити все больше начали про него говорить, даже конкурсы с отдельными номинациями были и интерес к данному продукту постепенно рос. По итогу появилась задача, с которой ZennoDroid должен был справиться лучше, чем ZennoPoster. Это нагул поведенческих факторов через приложения. Во первых там слабее антифрод система, во вторых если мы работаем на реальных устройствах, мы супер лояльны для антифрода и как бонус на проксях можно хорошо сэкономить.

Возвращение к ZennoDorid.
Из-за того что в последние годы, я часто участвовал в конкурсах от Zennolab, со мной связались разработчики и предложили созвониться. На созвоне речь зашла про ZennoDroid и я сказал, что мне интересен данный продукт и я бы с удовольствием с ним поработал, на что мне разработчики выдали бесплатную лицензию ZennoDroid Pro на 3 месяца. Ну все, задачи есть, лицензия есть, желание есть, можно начинать.

Первые дни.
В первые дни, я решил закопаться в теории и прочитать все, до чего мог дотянуться. Но я допустил небольшую ошибку. Я знал, что есть 2 версии ZennoDroid, но я еще не знал, что они по разному работают и читал все подряд, что по итогу привело к каше в голове. Если вы только начинаете изучать ZennoDroid, то разделайте информацию, которая применима только к версии Pro\Lite и к Enterprise. Но было и открытие для меня, оказывается очень важно читать раздел Новости, топики по продукту ZennoDroid, по мимо того что вы будите в курсе всех обновлений, вы еще найдете полезные материалы в виде шаблонов и т.п. от разработчиков.

После штудирования информации и сохранения десятка закладок, знаний было достаточно, чтобы начинать создавать свои шаблоны. Первым шаблоном я решил создать регистратор Яндекс почты, для меня он был понятным и простым в реализации. Приступаю к написанию шаблона и сталкиваюсь с первыми трудностями, на некоторых страницах не отображаются нужные мне элементы, то есть на экране я вижу нужный элемент, а через инструменты и я не могу к нему обратиться. Оказывается в некоторых приложениях, на некоторых страницах могут не отображаться всплывающие попапы и iFrame. Привет первые костыли, решением было повторная перезагрузка страницы, иногда решением было открыть раздел вкладки и вернуться назад. И вот первый шаблон был написан, на его создание ушло пару дней, сейчас бы на это ушло пару часов8-).

Мои инсайды в ходе первой работы.
Так как у меня было достаточно опыта работы на CSharp, я понял что мне не хватает некоторых инструментов, которые я могу написать для себя, что поможет мне в дальнейшей разработке. Приведу пример, в ZennoDroid есть поиск элементов по xPath, но мы в основном ищем элементы по тексту и постоянно прописывать xPath в кубиках для поиска текста не очень удобно. Поэтому я реализовал свой метод поиска по тексту на базе метода поиска по xPath, он работает точно так же через xPath, только нам не нужно постоянно прописывать сам xPath, а достаточно передать текст в метод, что бы найти нужный элемент.

Так же понимание, что автоматизация Android работает через ADB команды. Позволяет нам внедрять в проект свои решения, которые есть в ADB и которых нет в ZennoDroid (не все методы adb, но очень много). А если вы думаете, а где мне взять эти команды, их очень много и они какие-то не понятные. То просто зарегистрируйтесь уже наконец-то в Chat-GPT.

JavaScript - наш лучший друг. Если вы работаете с браузером или с приложением, у которого есть WebView (тэг в дереве элементов XML). Поздравляю у вас есть бонус, третья рука. XML Androida хранит очень мало информации, а с помощью JS мы можем вытаскивать полный HTML, в которой гораздо больше нужной информации. JS это еще один дополнительный инструментарий который мы можем использовать в своей работе. И нам не нужно писать целые скрипты, нам достаточно одной строчки кода. Не знаешь JS? Я тоже не знаю, Chat-GPT и проблема закрыта.

Заключение.
Спустя 3-4 месяца работы я себя смело могу назвать разработчиком ZennoDroid. Есть достаточно знаний и понимания, как работает ZennoDroid, его плюсы и минусы. Да это далеко не идеальный продукт, у него слабый инструментарий по сравнению с тем же ZennoPoster, но опять таки это особенности Android автоматизации, а не разработчиков ZennoDroid.

Для новичков, кто хочет освоить ZennoDroid самостоятельно, я делюсь своим опытом ниже.
Приятного чтения!


Делюсь опытом.

125291
Что выбрать ZennoDroid Pro\Lite (ZDP) или ZennoDroid Enterprise (ZDE).
Те кто не работал с ZennoDroid еще не знают что их 2 версии и они очень сильно отличаются в работе. И первое с чем вы столкнётесь, а что выбрать ZDP или ZDE. Выбор может показаться сложным, но на самом деле все зависит от задач, которые вы захотите решать с помощью данных инструментов.

Давайте я опишу своими словами основные отличия версий и их плюсы и минусы.

ZennoDroid Pro\Lite (ZDP) - работает на базе эмулятора Memu. Для старта работы достаточно установить эмулятор Memu и оплатить лицензию ZDP.
Плюсы:
- Легкая установка
- Затраты только на лицензию
- Быстро можем начать писать первые проекты


Минусы:
- Легко детектится антифрод системами
- Кушает много ресурсов железа
- Слабая подмена данных устройств
- Для подмены данных устройств нужно останавливать эмулятор
- Постоянный перезапуск эмуляторов, чтобы поменять устройство (самый ресурсоемкий процесс)


ZennoDroid Enterprise (ZDE) - работает через отладку по USB, реализован для реальных устройств, но за счет отладки по USB можем подключаться к другим эмуляторам. Перед оплатой лицензии у вас должно быть устройство (эмулятор \ реальное устройство) с установленным Magisk и LSPosed, подмена данных устройств производится через модуль LSPosed.

Плюсы:
- Лучше реализована подмена данных устройств
- Для подмены данных не нужно останавливать\перезагружать устройство
- За счет реального устройства легче обходить антифрод системы
- За счет интернета через симку, получаем собственный прокси по цене тарифа симкарты
- За счет реального устройства нагрузка на железо минимальное, можно запускать гораздо больше потоков


Минусы:
- Подготовка устройств перед работай (прошивки, установка Magisk, LSPosed)
- Затраты. По мимо лицензии, нужно будет покупать реальные трубки, если хотите проще обходить антифрод системы и экономить на прокси.
- Один поток, одна трубка. Потоки ограничиваются количеством реальных устройств
- Если работаем с эмуляторами, легко детектимся антифрод системами


Итог что выбрать:
Если вы хотите просто попробовать, что это за зверь ZennoDroid или автоматизировать не сложные проекты со слабыми антифрод системами выбираете ZDP. Например тапалки можно реализовать и через ZDP.

Если у вас серьезный проект, например регистрация Google почты, то тут выбираем ZDE на реальных устройствах. Но перед тем как покупать лицензию, подготовьте устройства к работе с ZDE.

Где искать информацию по ZennoDroid
ZennoLab Wiki - разработчики ZennoLab написали достаточно много полезной информации, чтобы разобраться с ZD и начать работать.
Форум | Раздел Новости - здесь читаем все новости касаемо ZennoDroid за последние пару лет. Это важно, вы будите в курсе всех нововведений, в некоторых темах есть очень полезные шаблоны примеры от самих разработчиков.
Форум | Ветка ZennoDroid - читаем все и вся, информации выходит не так много, это легче чем вам кажется. В начале стоит напрячься и прочитать все ветки и все посты, до 10-15 страниц. Все что кажется важным, выписывайте или делайте закладки, иначе забудете (проверено :ah:)
Пользователи на которых стоит обратить внимание: @Anatoly79 , @FreddyKrueger , @Sherminator , @t79
Это люди которые пишут много полезного по ZennoDroid, к ним стоит прислушиваться!

Как самому освоить ZennoDroid без покупки курсов:D
Важно, вы должны знать что ZennoDroid есть 2 версии, и они работают по разному, поэтому нужно разделять информацию под каждую из версий, чтобы не было каши в голове.

Первым делом, просто читаем всю информацию с Wiki, Новости, Ветка ZennoDroid. Главное делать закладки или выписывать отдельно информацию, которую считаете полезной, а не держать в голове, забудете 100%. На это дело уйдет примерно 3-4 дня по 2 часа в день, но за то вы получите хорошую базу и будите понимать, как тут все устроено. Если не будите делать закладки или пометки, а будите все держать в голове, то благополучно забудете важные моменты и получить кашу в голове, пишу 2 раза, потому что это важно!

Дальше, соберите шаблоны с проектами ZennoDroid (их не так много) и по разбирайте их. Посмотрите, как авторы реализуют те или иные задачи, какой логикой руководствуются. Это не так сложно, главное себя заставить. Шаблоны которые вам понравятся, возьмите себе на заметку, в первое время, будите часто к ним обращаться.

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

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

Спасибо, что дочитали до конца, надеюсь что вам понравилось и вы вдохновились на изучение ZennoDoroid.

Так же еще для новичков записал небольшой видео обзор интерфейса ZennoDroid.


#####################
Мой Телеграм Канал
Мой Youtube Канал

Поддержка автора: Донат
USDT TRC20: TBbnjJGwHEeKP5KEr7FNhsBmhR6V1XKds1
#####################

У кого проблемы с YouTube, продублировал видео в ВК
 
Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Давным-давно, когда только вышел продукт ZennoDroid, я попытался с ним поработать, но тогда он был такой сырой, что мне даже не удалось запустить эмулятор. Если я ничего не путаю, то тогда он работал не на базе Memu, а на чем-то другом, очень ресурсоемком и мне даже не хватало мощностей моего ноутбука для нормальной работы. В общем первое знакомство прошло не очень удачно и желание работать с данным продуктом у меня отбило на годы, да и потребностей в автоматизации Android не было.
Это был блюстакс, я тоже не смог тогда его запустить и начал изучать тему управления андроидом через адб.
JavaScript - наш лучший друг. Если вы работаете с браузером или с приложением, у которого есть WebView (тэг в дереве элементов XML). Поздравляю у вас есть бонус, третья рука. XML Androida хранит очень мало информации, а с помощью JS мы можем вытаскивать полный HTML, в которой гораздо больше нужной информации. JS это еще один дополнительный инструментарий который мы можем использовать в своей работе.
а можно пример получения webview в зеннодроид?
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
а можно пример получения webview в зеннодроид?
WebView мы не получаем, мы проверяем его наличие в XML. Если он есть, то можем выполнять JS команды.
Например получить html страницы (работает в браузерах)

var html = instance.DroidInstance.WebView.EvaluateScript("return document.documentElement.innerHTML");
 
  • Спасибо
Реакции: Stas и radv

garikn

Client
Регистрация
03.08.2021
Сообщения
148
Благодарностей
32
Баллы
28
Можно вас попросить видо выложить еще где-то кроме Ютуба? Не на всех "устройствах" ютуб сейчас хорошо смотрится и "организациях".
 
  • Спасибо
Реакции: Dmitriy Ka

russya

Client
Регистрация
08.07.2014
Сообщения
743
Благодарностей
78
Баллы
28
Поэтому я реализовал свой метод поиска по тексту на базе метода поиска по xPath, он работает точно так же через xPath, только нам не нужно постоянно прописывать сам xPath, а достаточно передать текст в метод, что бы найти нужный элемент.

Может поделишься? Интересно посмотреть. Спасибо за статью! Тоже изучаю ZDE
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Поэтому я реализовал свой метод поиска по тексту на базе метода поиска по xPath, он работает точно так же через xPath, только нам не нужно постоянно прописывать сам xPath, а достаточно передать текст в метод, что бы найти нужный элемент.

Может поделишься? Интересно посмотреть. Спасибо за статью! Тоже изучаю ZDE
Вот небольшой пример набросал, можно еще интересней сделать)

C#:
public static class DroidExt
{
    /// <summary>
    /// Поиск элемента по тексту.
    /// </summary>
    /// <param name="driver"></param>
    /// <param name="text"></param>
    /// <returns></returns>
    public static IAndroidElementAPI FindElementByText(this IAppiumDriverAPI driver, string text)
    {
        string xPath = $"//*[@text='{text}']";

        return driver.FindElementByXPath(xPath);
    }

    /// <summary>
    /// Поиск элемента по content-desc.
    /// </summary>
    /// <param name="driver"></param>
    /// <param name="contentDesc"></param>
    /// <returns></returns>
    public static IAndroidElementAPI FindElementByContentDesc(this IAppiumDriverAPI driver, string contentDesc)
    {
        string xPath = $"//*[@content-desc='{contentDesc}']";

        return driver.FindElementByXPath(xPath);
    }
}
126055


Вставляем код в общий код вот так.

И теперь можем в кубиках вызывать свое апи прямо из апи разработчиков ZD :-)

Пример:
Поиск по тексту var de1 = instance.DroidInstance.AppiumDriver.FindElementByText("Asus");
Поиск по ContentDesc var de2 = instance.DroidInstance.AppiumDriver.FindElementByContentDesc("войти в инкогнито");
 
  • Спасибо
Реакции: russya

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Можно вас попросить видо выложить еще где-то кроме Ютуба? Не на всех "устройствах" ютуб сейчас хорошо смотрится и "организациях".
Залил видео в ВК. Видео находятся в самом низу статей.
 
Последнее редактирование:

maestro202

Client
Регистрация
08.05.2016
Сообщения
81
Благодарностей
31
Баллы
18
Для подмены данных не нужно останавливать\перезагружать устройство
Здравствуйте! Можете навести пример приложения для подмены данных без перезагрузки. Использовал Device id masker и Device emulator pro, так они оба подменяли данные при перезагрузке
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Здравствуйте! Можете навести пример приложения для подмены данных без перезагрузки. Использовал Device id masker и Device emulator pro, так они оба подменяли данные при перезагрузке
Подмена без перезагрузки работает только на версии Enterprise через модуль LSPosed
 
  • Спасибо
Реакции: maestro202

maestro202

Client
Регистрация
08.05.2016
Сообщения
81
Благодарностей
31
Баллы
18
Подмена без перезагрузки работает только на версии Enterprise через модуль LSPosed
Спасибо. Я думал, что речь шла о реальном устройстве. Раньше использовал ExPosed и разные модули к нему
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
  • Спасибо
Реакции: maestro202

maestro202

Client
Регистрация
08.05.2016
Сообщения
81
Благодарностей
31
Баллы
18

sten30

Client
Регистрация
05.09.2017
Сообщения
253
Благодарностей
31
Баллы
28
А как к ZennoDroid Enterprise подключить эмулятор Memu например?
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
А как к ZennoDroid Enterprise подключить эмулятор Memu например?
Для того чтобы подключиться к эмулятору, нам нужно в корневой папке эмулятора найти и подменить файл adb.exe на файл adb.exe из ZDE. На эмуляторе включить отладку по USB и подключаться как к реальному телефону.

Но важно знать, чтобы полноценно работать с эмулятором через ZDE, на эмуляторе должен быть установлен модуль LSPosed, а для его установки нужен Magisk.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)