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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 668
Реакции
961
Баллы
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
 
Номер конкурса шаблонов
  1. Одиннадцатый конкурс шаблонов

Вложения

Полезная вещь. Мему прожорливый насчет образов, по мере использования, они растут.
 
Полезная вещь. Мему прожорливый насчет образов, по мере использования, они растут.
Это да, ставил эксперемент, устанавливал на машину 40 приложений размером от 10 до 30 метров, в итоге машина весила 9 гигов, ужать до 3х получилось
 
  • Спасибо
Реакции: seodamage
Призёр в номинации выбор разработчиков - железно.
 
После установки в эмулятор телеграма и титаниума (в общем 80мб) архив весит уже целых 210-230 мб
 
После установки в эмулятор телеграма и титаниума (в общем 80мб) архив весит уже целых 210-230 мб
Если создать новый эмулятор и ничего туда не устанавливать, а просто подержать включенным и понаблюдать за трафиком через proxifire то увидим что андроид постоянно в фоне что то скачивает (обновляет свои сервисы), в общей сложности где то 180-190 метров
 
  • Спасибо
Реакции: neonb
плюсую.
неплохо было бы ещё данных о производительности накидать, какие вычислительные мощности при этом задействуются?
 
Уже месяц хочу протестить, но всё руки не доходят, но может кто подскажет, нагрузка при таком запуске эмулятора снижается хоть немного или в целом можно прировнять к обычному созданию нового эмулятора. А то сейчас у меня как раз узкое место в работе - создание эмуляторов, шаблон короткий и работает во многопотоке и если ставить задержку между запуском эмулей меньше 30 сек, то мему начивает дико брыкаться, а эмуляторы не создаются просто
 
Уже месяц хочу протестить, но всё руки не доходят, но может кто подскажет, нагрузка при таком запуске эмулятора снижается хоть немного или в целом можно прировнять к обычному созданию нового эмулятора. А то сейчас у меня как раз узкое место в работе - создание эмуляторов, шаблон короткий и работает во многопотоке и если ставить задержку между запуском эмулей меньше 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 сек между запусками машин
 

Вложения

В этом шаблоне речь не про нагрузку а про экономию места, да, у мему есть такая фигня что он одновременно плохо запускает эмуляторы, у меня для этого либа написана, что бы одновременно только 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 сек между запусками машин
Очень круто, спасибо. Обязательно протестирую ближайшее время, возможно это как раз моё решение
 
Плюсую, интересный подход, хорошо, что вообще в этом направлении у кого-то идёт поиск решения проблемы с весом образов.
А ты не пробовал выяснить, как вообще этот мусор вычистить с помощью самого Андроид? Я пробовал удалять обновления на уровне отдельных приложений и устанавливать сразу последнюю версию - это помогает, так как видимо каждое скачанное обновление приложения хранится в системе. Но всё равно остаётся ещё много того, что видимо относится к системным обновления, до которых не получается дотянуться.
И ещё, ты не пробовал новый кубик по переносу аккаунтов с машины на машину?

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

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

Всем доброго времени суток, начну с не большого вступления.
Встал вопрос хранения большого количества машин т.к никакие сохранение куков и делание бэкапов приложений не могло сохранить авторизацию в гугл плэй аккаунте. Недолго думаю полез в 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
поздравления
 
Создаю новую машину Android 9.0.
У меня не создается disk1, а создаётся только disk2. После остановки устройства образ весит почти 2Гб, если его архивировать то 800Мб, что тоже не мало для пустой машины.

Подскажите это я что-то делаю не так или это новая версия Memu стала работать по другому? Хотелось бы получать пустые машины весом 70 Мб.
121511
 
Создаю новую машину Android 9.0.
У меня не создается disk1, а создаётся только disk2. После остановки устройства образ весит почти 2Гб, если его архивировать то 800Мб, что тоже не мало для пустой машины.

Подскажите это я что-то делаю не так или это новая версия Memu стала работать по другому? Хотелось бы получать пустые машины весом 70 Мб.
Посмотреть вложение 121511
Вот, почитатйте, начиная с названия темы https://zenno.club/discussion/threa...chistit-dannye-i-udaljat-prilozhenija.118611/
 
  • Спасибо
Реакции: Dmitriy Ka

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