Android Studio: adb — INSTALL_FAILED_INSUFFICIENT_STORAGE

Автор: | 03/04/2019
 

Продолжаем воевать с нашими UI авто-тестами.

Пригодились предыдущие посты — Android Studio: установка на Linux и работа с Android Virtual Devices и Appium: Android Virtual Device, Original error: Condition unmet after 60159 ms и костыль.

В целом тесты работают, но иногда вылазят интересные проблемки.

Сегодня наш QA-инженер скинул сообщение, что все UI-тесты упали с такой ошибкой:

[debug] [W3C] Encountered internal error running command: Error executing adbExec. Original error: 'Command '/android/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 install -r -g /home/projectname/projectnameMenBuilds/projectnameMen-stage.apk' exited with code 1'; Stderr: 'adb: failed to install /home/projectname/projectnameMenBuilds/projectnameMen-stage.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]'; Code: '1'
[debug] [W3C] Error: Command '/android/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 install -r -g /home/projectname/projectnameBuilds/projectnameMen-stage.apk' exited with code 1
[debug] [W3C]     at ChildProcess.proc.on.code (/home/projectname/node_modules/teen_process/lib/exec.js:94:19)
[debug] [W3C]     at emitTwo (events.js:126:13)
[debug] [W3C]     at ChildProcess.emit (events.js:214:7)
[debug] [W3C]     at maybeClose (internal/child_process.js:925:16)
[debug] [W3C]     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
[HTTP] <-- POST /wd/hub/session 500 2312 ms - 1165
[HTTP]
[HTTP] --> POST /wd/hub/session
[HTTP]

Собственно, первое, что бросается в глаза — сообщение «Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]’; Code: ‘1’«.

По первому же запросу в Google «android INSTALL_FAILED_INSUFFICIENT_STORAGE» находится вопрос на StackOverflow тут>>>, где есть подходящий ответ, который описывает проблему — тут>>>.

Проверяем.

Запускаем используемый в тестах эмулятор:

projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26

Запускаем в нём консольку:

projectname@projectname-ci:~$ adb shell
generic_x86:/ $

Проверяем свободное место:

1|generic_x86:/ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          611M  4.6M  606M   1% /
tmpfs           756M  488K  756M   1% /dev
/dev/block/vda1 2.4G  1.4G  0.9G  59% /system
/dev/block/vde1  90M   35M   53M  40% /vendor
tmpfs           756M     0  756M   0% /mnt
/dev/block/vdb   61M   56K   60M   1% /cache
/dev/block/dm-0 1.9G  1.7G  148M  93% /data
/data/media     1.9G  1.7G  148M  93% /storage/emulated

148M 93% /data — 148 метров, ну да — маловато.

Не посмотрел — сколько весит наша apk-шка, но места явно недостаточно.

Пробуем посмотреть что в каталоге:

1|generic_x86:/ $ ls -l /data/
ls: /data/: Permission denied

Угу…

Пробуем root:

projectname@projectname-ci:~$ adb root
adbd cannot run as root in production builds

Ну и окей, ну и не надо.

Решения есть, но рутать не хочется — только время тратить.

Просто добавим места — его на билд-машине много.

Гуглим «android emulator disk space«, находим пост Quick Tip: Increase the storage size of your Android Emulator.

Находим наши устройства:

projectname@projectname-ci:~$ ls -l ~/.android/avd/
total 16
drwxrwxr-x 5 projectname projectname 4096 бер  4 11:35 Nexus_5X_API_26.avd
-rw-rw-r-- 1 projectname projectname  127 лис 20 17:50 Nexus_5X_API_26.ini
drwxrwxr-x 4 projectname projectname 4096 гру 18 18:44 test.avd
-rw-rw-r-- 1 projectname projectname  105 лис 19 17:18 test.ini

Проверяем каталог ~/.android/avd/Nexus_5X_API_26.avd:

projectname@projectname-ci:~$ ls -la ~/.android/avd/Nexus_5X_API_26.avd/
total 2861472
drwxrwxr-x 5 projectname projectname       4096 бер  4 11:35 .
drwxrwxr-x 4 projectname projectname       4096 бер  4 11:41 ..
-rw-rw-r-- 1 projectname projectname         96 бер  4 11:35 AVD.conf
-rw-r--r-- 1 projectname projectname   69206016 бер 12  2018 cache.img
-rw-r--r-- 1 projectname projectname   42598400 бер  4 11:35 cache.img.qcow2
-rw-rw-r-- 1 projectname projectname       1173 лют 14 11:10 config.ini

Вот и config.ini:

projectname@projectname-ci:~$ cat ~/.android/avd/Nexus_5X_API_26.avd/config.ini | grep data
disk.dataPartition.size=2G

Задаём новое значение — пусть будет 5 гиг:

...
disk.dataPartition.size=5G
...

Запускаем эмулятор заново:

projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26
emulator: WARNING: userdata partition is resized from 2048 M to 5120 M

Консольку:

projectname@projectname-ci:~$ adb shell
error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

Окей… Убиваем avd:

projectname@projectname-ci:~$ adb kill-server

Запускаем ещё раз:

projectname@projectname-ci:~$ adb shell
* daemon not running; starting now at tcp:5037
* daemon started successfully

Проверяем место сейчас:

generic_x86:/ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          611M  4.6M  606M   1% /
tmpfs           756M  488K  756M   1% /dev
/dev/block/vda1 2.4G  1.4G  0.9G  59% /system
/dev/block/vde1  90M   35M   53M  40% /vendor
tmpfs           756M     0  756M   0% /mnt
/dev/block/vdb   61M   56K   60M   1% /cache
/dev/block/dm-0 4.8G   88M  4.7G   2% /data
/data/media     4.8G   88M  4.7G   2% /storage/emulated

Запускаем тесты — и всё работает.