Уменьшение размера машины ZennoDroid для хранения.

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
Вступление:

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

2023-09-03_13-05-26.png

Весит содержимое одной только что созданной машины 2.15 ГБ, машина по большому счету состоит из 2х файлов vmdk, disk 1 и disk 2. После не больших тестов выяснилось что файл disk1 можно вообще после использования машины удалить, а при следующем запуске машины memu сам его подтянет, это как я понял сама виртуалка. А вот в файле disk 2 храниться как раз вся нужная нам мякоть (авторизации, куки и прочее), только его нам и нужно оставить, а точнее заархивировать, что бы он меньше места занимал пока машина выключена.

Принцип работы шаблона:

Архивация
Всё довольно просто, по указанному id машины шаблон находит нужную папку, удаляет файл disk1, запаковывает файл disk2 в архив (с созданием и проверкой контрольной суммы) удаляет оригинал файла и вместо файла disk2 создает файл пустышку, пустышка нужна для memu, если он не найдет файл disk2 то удалит всю папку с машиной. После этих манипуляций папка с машиной весит 67мб вместо 2.15гб
2023-09-03_13-17-19.png

Распаковка
Заходит в папку по id машины, распаковывает disk2 и удаляет архив. Файл disk1 сам появится во время запуска машины.

Настройки шаблона:

Сам шаблон состоит из 3х c# сниппетов, для запаковки, распаковки, и получения id текущей машины

В входных настройках указываем папку где хранятся машины.

2023-09-03_13-21-38.png

В переменную MachineId указываем айдишник машины с которой планируем производить действия.

2023-09-03_13-22-13.png

Общий код:

В общем коде написаны 5 методов для распаковки, запаковки, проверки контрольной суммы и генерации контрольной суммы
и подключены 2 пространства имен:
C#:
using System.IO.Compression;
using System.Security.Cryptography;

Ссылки из GAC:


Сюда добавлена стандартная либа.

2023-09-03_13-25-26.png


Минимальная версия ZennoDroid 2.3.5
 
Номер конкурса шаблонов
Одиннадцатый конкурс шаблонов

Вложения

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

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

radv

Client
Регистрация
11.05.2015
Сообщения
3 724
Благодарностей
1 918
Баллы
113
Полезная вещь. Мему прожорливый насчет образов, по мере использования, они растут.
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
Полезная вещь. Мему прожорливый насчет образов, по мере использования, они растут.
Это да, ставил эксперемент, устанавливал на машину 40 приложений размером от 10 до 30 метров, в итоге машина весила 9 гигов, ужать до 3х получилось
 
  • Спасибо
Реакции: seodamage

che100

Client
Регистрация
18.04.2017
Сообщения
808
Благодарностей
501
Баллы
63
Призёр в номинации выбор разработчиков - железно.
 

neonb

Пользователь
Регистрация
10.05.2022
Сообщения
35
Благодарностей
15
Баллы
8
После установки в эмулятор телеграма и титаниума (в общем 80мб) архив весит уже целых 210-230 мб
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
После установки в эмулятор телеграма и титаниума (в общем 80мб) архив весит уже целых 210-230 мб
Если создать новый эмулятор и ничего туда не устанавливать, а просто подержать включенным и понаблюдать за трафиком через proxifire то увидим что андроид постоянно в фоне что то скачивает (обновляет свои сервисы), в общей сложности где то 180-190 метров
 
  • Спасибо
Реакции: neonb

Taurus Silver

Client
Регистрация
24.01.2017
Сообщения
76
Благодарностей
10
Баллы
8
плюсую.
неплохо было бы ещё данных о производительности накидать, какие вычислительные мощности при этом задействуются?
 

finoz0

Client
Регистрация
20.01.2021
Сообщения
106
Благодарностей
17
Баллы
18
Уже месяц хочу протестить, но всё руки не доходят, но может кто подскажет, нагрузка при таком запуске эмулятора снижается хоть немного или в целом можно прировнять к обычному созданию нового эмулятора. А то сейчас у меня как раз узкое место в работе - создание эмуляторов, шаблон короткий и работает во многопотоке и если ставить задержку между запуском эмулей меньше 30 сек, то мему начивает дико брыкаться, а эмуляторы не создаются просто
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
Уже месяц хочу протестить, но всё руки не доходят, но может кто подскажет, нагрузка при таком запуске эмулятора снижается хоть немного или в целом можно прировнять к обычному созданию нового эмулятора. А то сейчас у меня как раз узкое место в работе - создание эмуляторов, шаблон короткий и работает во многопотоке и если ставить задержку между запуском эмулей меньше 30 сек, то мему начивает дико брыкаться, а эмуляторы не создаются просто
В этом шаблоне речь не про нагрузку а про экономию места, да, у мему есть такая фигня что он одновременно плохо запускает эмуляторы, у меня для этого либа написана, что бы одновременно только 2 шаблона начинали запуск, так же у меня сделана либа что бы одновременно только один шаблон мог запускать создание эмулятора. Вот эти либы.
Добавляете их в ссылки из GAC в общем коде прописываете юзинги


C#:
using SinhronizationStartingMachine;
using SinhronizationCreateMachine;
Для создания машины делаете такой c# сниппет


C#:
var createMachine = new SinhronizationCreateMachine.Program();
createMachine.Execute(instance,project);
createMachine.CreateMachine("ИМЯ ПЕРЕМЕННОЙ ДЛЯ ID МАШИНЫ");
Для запуска машины такой код, запуск осуществляется с применением настроек профиля

C#:
project.SendInfoToLog("Запускаем машину " + project.Profile.NickName,true);
try
{
    new SinhronizationStartingMachine.Program().Execute(instance,project);
}
catch(Exception ex)
{
    project.SendErrorToLog(ex.Message);
    throw new Exception();
}

project.SendInfoToLog("Запустили машину " + project.Profile.NickName,true);
В итоге можете убрать свою паузу в 30 сек между запусками машин
 

Вложения

finoz0

Client
Регистрация
20.01.2021
Сообщения
106
Благодарностей
17
Баллы
18
В этом шаблоне речь не про нагрузку а про экономию места, да, у мему есть такая фигня что он одновременно плохо запускает эмуляторы, у меня для этого либа написана, что бы одновременно только 2 шаблона начинали запуск, так же у меня сделана либа что бы одновременно только один шаблон мог запускать создание эмулятора. Вот эти либы.
Добавляете их в ссылки из GAC в общем коде прописываете юзинги


C#:
using SinhronizationStartingMachine;
using SinhronizationCreateMachine;
Для создания машины делаете такой c# сниппет


C#:
var createMachine = new SinhronizationCreateMachine.Program();
createMachine.Execute(instance,project);
createMachine.CreateMachine("ИМЯ ПЕРЕМЕННОЙ ДЛЯ ID МАШИНЫ");
Для запуска машины такой код, запуск осуществляется с применением настроек профиля

C#:
project.SendInfoToLog("Запускаем машину " + project.Profile.NickName,true);
try
{
    new SinhronizationStartingMachine.Program().Execute(instance,project);
}
catch(Exception ex)
{
    project.SendErrorToLog(ex.Message);
    throw new Exception();
}

project.SendInfoToLog("Запустили машину " + project.Profile.NickName,true);
В итоге можете убрать свою паузу в 30 сек между запусками машин
Очень круто, спасибо. Обязательно протестирую ближайшее время, возможно это как раз моё решение
 

fayruzi4

Client
Регистрация
01.02.2016
Сообщения
164
Благодарностей
29
Баллы
28
Плюсую, интересный подход, хорошо, что вообще в этом направлении у кого-то идёт поиск решения проблемы с весом образов.
А ты не пробовал выяснить, как вообще этот мусор вычистить с помощью самого Андроид? Я пробовал удалять обновления на уровне отдельных приложений и устанавливать сразу последнюю версию - это помогает, так как видимо каждое скачанное обновление приложения хранится в системе. Но всё равно остаётся ещё много того, что видимо относится к системным обновления, до которых не получается дотянуться.
И ещё, ты не пробовал новый кубик по переносу аккаунтов с машины на машину?

Архивация диска вариант интересный, но для себя заметил сразу несколько серьезных минусов, например у меня образы после 1-2 месяцев работы вырастают до 15гб. Сжатие/Распаковка занимают по 3 минуты каждая операция. Соответственно, каждый запуск - это +6 минут к работе задания. Но это ещё не всё. Нагрузка на ЦП даже при 2-3 потоках поднимается до 100% во время сжатия и распаковки. Это мешает соседним потокам работать.
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
Плюсую, интересный подход, хорошо, что вообще в этом направлении у кого-то идёт поиск решения проблемы с весом образов.
А ты не пробовал выяснить, как вообще этот мусор вычистить с помощью самого Андроид? Я пробовал удалять обновления на уровне отдельных приложений и устанавливать сразу последнюю версию - это помогает, так как видимо каждое скачанное обновление приложения хранится в системе. Но всё равно остаётся ещё много того, что видимо относится к системным обновления, до которых не получается дотянуться.
И ещё, ты не пробовал новый кубик по переносу аккаунтов с машины на машину?

Архивация диска вариант интересный, но для себя заметил сразу несколько серьезных минусов, например у меня образы после 1-2 месяцев работы вырастают до 15гб. Сжатие/Распаковка занимают по 3 минуты каждая операция. Соответственно, каждый запуск - это +6 минут к работе задания. Но это ещё не всё. Нагрузка на ЦП даже при 2-3 потоках поднимается до 100% во время сжатия и распаковки. Это мешает соседним потокам работать.
Перенос не пробовал (мне надо что бы и прилы сохранялись), мусор чистить тоже не пробовал, хотя вопрос с количеством трафа который машина пожирает в фоне стоит очень остро, по поводу архивации, да, такие жирные образы долго будет паковать, я больше чем 7 гигов им не позволяю толстеть (удаляю и новый делаю) для того чтобы архивация побыстрее была сделал семафор, что бы одновременно только 2 потока могли архивацию производить, так чутка быстрее выходит
 

mta

Client
Регистрация
12.01.2020
Сообщения
129
Благодарностей
7
Баллы
18
Вступление:

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

Посмотреть вложение 111016

Весит содержимое одной только что созданной машины 2.15 ГБ, машина по большому счету состоит из 2х файлов vmdk, disk 1 и disk 2. После не больших тестов выяснилось что файл disk1 можно вообще после использования машины удалить, а при следующем запуске машины memu сам его подтянет, это как я понял сама виртуалка. А вот в файле disk 2 храниться как раз вся нужная нам мякоть (авторизации, куки и прочее), только его нам и нужно оставить, а точнее заархивировать, что бы он меньше места занимал пока машина выключена.

Принцип работы шаблона:

Архивация
Всё довольно просто, по указанному id машины шаблон находит нужную папку, удаляет файл disk1, запаковывает файл disk2 в архив (с созданием и проверкой контрольной суммы) удаляет оригинал файла и вместо файла disk2 создает файл пустышку, пустышка нужна для memu, если он не найдет файл disk2 то удалит всю папку с машиной. После этих манипуляций папка с машиной весит 67мб вместо 2.15гб
Посмотреть вложение 111018

Распаковка
Заходит в папку по id машины, распаковывает disk2 и удаляет архив. Файл disk1 сам появится во время запуска машины.

Настройки шаблона:

Сам шаблон состоит из 3х c# сниппетов, для запаковки, распаковки, и получения id текущей машины

В входных настройках указываем папку где хранятся машины.

Посмотреть вложение 111020

В переменную MachineId указываем айдишник машины с которой планируем производить действия.

Посмотреть вложение 111021

Общий код:

В общем коде написаны 5 методов для распаковки, запаковки, проверки контрольной суммы и генерации контрольной суммы
и подключены 2 пространства имен:
C#:
using System.IO.Compression;
using System.Security.Cryptography;
Ссылки из GAC:

Сюда добавлена стандартная либа.

Посмотреть вложение 111023


Минимальная версия ZennoDroid 2.3.5
поздравления
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
589
Благодарностей
350
Баллы
63
Создаю новую машину Android 9.0.
У меня не создается disk1, а создаётся только disk2. После остановки устройства образ весит почти 2Гб, если его архивировать то 800Мб, что тоже не мало для пустой машины.

Подскажите это я что-то делаю не так или это новая версия Memu стала работать по другому? Хотелось бы получать пустые машины весом 70 Мб.
121511
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 057
Благодарностей
549
Баллы
113
Создаю новую машину Android 9.0.
У меня не создается disk1, а создаётся только disk2. После остановки устройства образ весит почти 2Гб, если его архивировать то 800Мб, что тоже не мало для пустой машины.

Подскажите это я что-то делаю не так или это новая версия Memu стала работать по другому? Хотелось бы получать пустые машины весом 70 Мб.
Посмотреть вложение 121511
Вот, почитатйте, начиная с названия темы https://zenno.club/discussion/threads/zennodroid-2-3-8-0-znachitelno-umenshili-neobxodimoe-mesto-dlja-sozdanija-ehmuljatorov-o-stalo-prosche-chistit-dannye-i-udaljat-prilozhenija.118611/
 
  • Спасибо
Реакции: Dmitriy Ka

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