Если скачать PaintCAD.apk (или любое другое приложение, которое работает на андроидах старых версий) и попытаться установить его на новый телефон с современным андроидом (13 и выше), то телефон увидит что PaintCAD работает аж на андроиде 2.2 и выше - и испугается что на нем работать не будет такое приложение, работающее на древних андроидах.После тренировок установки старых apk на Samsung Galaxy S23 интереснее всего показалось ставить старые apk на Xiaomi Poco X7 (потому что на самсунге меньше вылезало всяких окон и предупреждений). Поэтому этот гайд отснят на Poco X7.
Вот так это будет выглядеть:
1) лежит свежескачанный apk-файл:

2) тыкаем на apk-файл - вылезает стандартное окно про установку приложения:

3) после нажатия на "Установить" вылезет предупреждение что все плохо - приложение старое какое-то. Надо нажать внизу "Подробнее":

4) окно развернется - там про угрозу. И маленькая строчка "Все равно установить" - жмем на эту строчку - на самом деле это кнопка!

5) после этого андроид проверит для насколько старых андроидов это приложение - и откажется его устанавливать:

"Приложение не установлено, так как оно несовместимо с вашим телефоном" ?
Это гугл ввел такую блокировку чтобы старые приложения не работали на современных андроидах. И если хочется поставить игру 5-летней давности или какую-то хорошую программу, которую разработчики давно забросили и не обновляли до современных андроидов, то сделать это не получится.
Но есть способ это обойти и спокойно ставить на современный смартфон любые старые игры/приложения. Для этого нужно:
1) иметь кабель, соединяющий компьютер и ваш смартфон, не просто зарядный, а передающий данные кабель, по которому обычно можно скинуть со смартфона на комп снятые фотки или еще что-то.
2) скачать и распаковать на компьютер Platform Tools для Android: https://developer.android.com/tools/rel ... ools?hl=ru
Там в середине текста есть ссылки на скачивание чисто маленькой легковесной platform tools, без полного пакета SDK для разработчиков:

Качаем для Windows по ссылке "Скачать SDK Platform-Tools для Windows". Там архив в виде zip-файла. Внутри папка platform-tools. Внутри нее десяток файлов включая вот этот adb.exe:

Это Android Debug Bridge - "андроидовский отладочный мост" - программа, позволяющая, в частности, по кабелю ставить apk с компьютера внутрь телефона.
Распаковываем файлы из папки platform tools, например, в c:\pt\. Так чтобы по адресу c:\pt\adb.exe можно было запустить этот adb.exe.
3) скачать apk файл нужной программы и положить в эту же папку c:\pt, чтоб не указывать в командах длинные пути, а только имена файлов. Я скачал PaintCAD Mobile и положил как paintcad.apk в папку c:\pt.
Запускаем adb и смотрим что он работаетКстати, у кого стоит на компьютере андроидовский sdk (software development kit, т.е. набор софта для разработки android-приложений) - там тоже есть platform tools. Вот мой старенький adb.exe валяется внутри sdk. Если его запустить - то он покажет все свои кучу команд, которыми им можно управлять:
![]()
4) Теперь надо запустить командную строку cmd, похожую на дос - это нажать Windows+R, ввести cmd и нажать Enter. Откроется терминал как на скрине выше.
5) Внутри cmd ввести команду смены текущего диска на c:, на всякий случай, и нажать Enter:Если windows у вас старая и cmd в ней нет, то попробуйте запустить command, он тоже выполняет все нижеуказанные команды, но работает с bat-файлами
6) Дальше перейти в папку, где лежит adb.exe (тоже ввести то, что написано, и нажать Enter. cd - это команда change directory, по-русски "перейти в указанную папку"):c:
7) Чтобы проверить что все ок и мы в той папке, в какой нужно - запустить adb и посмотреть что он работает (ввести adb и нажать Enter):cd c:\pt
В терминале появится длинная колбаса из всех команд adb.exe - у меня вылезла вот такая:adb
Включаем на смартфоне разрешение на подключение к компу через USB для установки APK по кабелюc:\pt>adb
Android Debug Bridge version 1.0.41
Version 37.0.0-14910828
Installed as c:\pt\adb.exe
Running on Windows 10.0.26200
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
-s SERIAL use device with given serial (overrides $ANDROID_SERIAL)
-t ID use device with given transport id
-H name of adb server host [default=localhost]
-P port of adb server [default=5037]
-L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]
--one-device SERIAL|USB only allowed with 'start-server' or 'server nodaemon', server will only connect to one USB device, specified by a serial number or USB device address.
--exit-on-write-error exit if stdout is closed
general commands:
devices [-l] list connected devices (-l for long output)
help show this help message
version show version num
networking:
connect HOST[:PORT] connect to a device via TCP/IP [default port=5555]
disconnect [HOST[:PORT]]
disconnect from given TCP/IP device [default port=5555], or all
pair HOST[:PORT] [PAIRING CODE]
pair with a device for secure TCP/IP communication
forward --list list all forward socket connections
forward [--no-rebind] LOCAL REMOTE
forward socket connection using:
tcp:<port> (<local> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
dev-raw:<character device name> (open device in raw mode)
jdwp:<process pid> (remote only)
vsock:<CID>:<port> (remote only)
acceptfd:<fd> (listen only)
forward --remove LOCAL remove specific forward socket connection
forward --remove-all remove all forward socket connections
reverse --list list all reverse socket connections from device
reverse [--no-rebind] REMOTE LOCAL
reverse socket connection using:
tcp:<port> (<remote> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
reverse --remove REMOTE remove specific reverse socket connection
reverse --remove-all remove all reverse socket connections from device
mdns check check if mdns discovery is available
mdns services list all discovered services
file transfer:
push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE
copy local files/directories to device
-n: dry run: push files to device without storing to the filesystem
-q: suppress progress messages
-Z: disable compression
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
--sync: only push files that have different timestamps on the host than the device
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
copy files/dirs from device
-a: preserve file timestamp and mode
-q: suppress progress messages
-Z: disable compression
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]
sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)
-l: list files that would be copied, but don't copy them
-n: dry run: push files to device without storing to the filesystem
-q: suppress progress messages
-Z: disable compression
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
shell:
shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
run remote shell command (interactive shell if no command given)
-e: choose escape character, or "none"; default '~'
-n: don't read from stdin
-T: disable pty allocation
-t: allocate a pty if on a tty (-tt: force pty allocation)
-x: disable remote exit codes and stdout/stderr separation
emu COMMAND run emulator console command
app installation (see also `adb shell cmd package help`):
install [-lrtsdg] [--instant] PACKAGE
push a single package to the device and install it
install-multiple [-lrtsdpg] [--instant] PACKAGE...
push multiple APKs to the device for a single package and install them
install-multi-package [-lrtsdpg] [--instant] PACKAGE...
push one or more packages to the device and install them atomically
-r: replace existing application
-t: allow test packages
-d: allow version code downgrade (debuggable packages only)
-p: partial application install (install-multiple only)
-g: grant all runtime permissions
--abi ABI: override platform's default ABI
--instant: cause the app to be installed as an ephemeral install app
--no-streaming: always push APK to device and invoke Package Manager as separate steps
--streaming: force streaming APK directly into Package Manager
--fastdeploy: use fast deploy
--no-fastdeploy: prevent use of fast deploy
--force-agent: force update of deployment agent when using fast deploy
--date-check-agent: update deployment agent when local version is newer and using fast deploy
--version-check-agent: update deployment agent when local version has different version code and using fast deploy
(See also `adb shell pm help` for more options.)
uninstall [-k] PACKAGE
remove this app package from the device
'-k': keep the data and cache directories
debugging:
bugreport [PATH]
write bugreport to given PATH [default=bugreport.zip];
if PATH is a directory, the bug report is saved in that directory.
devices that don't support zipped bug reports output to stdout.
jdwp list pids of processes hosting a JDWP transport
logcat show device log (logcat --help for more)
security:
disable-verity disable dm-verity checking on userdebug builds
enable-verity re-enable dm-verity checking on userdebug builds
keygen FILE
generate adb public/private key; private key stored in FILE,
scripting:
wait-for[-TRANSPORT]-STATE...
wait for device to be in a given state
STATE: device, recovery, rescue, sideload, bootloader, or disconnect
TRANSPORT: usb, local, or any [default=any]
get-state print offline | bootloader | device
get-serialno print <serial-number>
get-devpath print <device-path>
remount [-R]
remount partitions read-write. if a reboot is required, -R will
will automatically reboot the device.
reboot [bootloader|recovery|sideload|sideload-auto-reboot]
reboot the device; defaults to booting system image but
supports bootloader and recovery too. sideload reboots
into recovery and automatically starts sideload mode,
sideload-auto-reboot is the same but reboots after sideloading.
sideload OTAPACKAGE sideload the given full OTA package
root restart adbd with root permissions
unroot restart adbd without root permissions
usb restart adbd listening on USB
tcpip PORT restart adbd listening on TCP on PORT
internal debugging:
start-server ensure that there is a server running
kill-server kill the server if it is running
reconnect kick connection from host side to force reconnect
reconnect device kick connection from device side to force reconnect
reconnect offline reset offline/unauthorized devices to force reconnect
usb:
attach attach a detached USB device
detach detach from a USB device to allow use by other processes
environment variables:
$ADB_TRACE
comma/space separated list of debug info to log:
all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp,services,auth,fdevent,shell,incremental
$ADB_VENDOR_KEYS colon-separated list of keys (files or directories)
$ANDROID_SERIAL serial number to connect to (see -s)
$ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help)
$ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus)
$ADB_MDNS_AUTO_CONNECT comma-separated list of mdns services to allow auto-connect (default adb-tls-connect)
Online documentation: https://android.googlesource.com/platfo ... r/adb.1.md
8) На смартфоне залезаем в настройки, в информацию о телефоне и андроиде. И много раз жмем информацию о версии прошивки (раз десять). Когда нажмем первые 5 раз - внизу появится надпись "Еще 5 раз и вы станете разработчиком", "Еще 4 раза и вы станете разработчиком" и т.д. до последнего нажатия:

9) Теперь в расширенных настройках или просто в меню настроек внизу (зависит от модели смартфона и андроида) появилось меню "Для разработчиков". Заходим в него. На Poco X7 это вот тут:

10) Проматываем меню для разработчиков вниз пока не увидим пункт "Отладка по USB" - включаем его:

11) Появляется страшное предупреждение. Ставим внизу галочку и ждем 10 секунд (до этого кнопку ОК нажать не получится):

12) Теперь кнопка ОК активна - нажимаем ее:

Запускаем ADB и проверяем что он видит подключенный к компу по кабелю смартфон
13) На компьютере запускаем adb в режиме сервера - вводим в cmd команду adb start-server, жмем Enter и видим вот это:
13) Подключаем смартфон к кабелю, а кабель к компьютеру. Проверим что комп видит ваш подключенный смартфон - вводим в cmd команду adb devices и видим вот это (код из страшных букв и цифр - разный для разных смартфонов, у меня для Xiaomi Poco X7 вот такой появился):c:\pt>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully
Комп видит смартфон, но смартфон unauthorized - не авторизован.c:\pt>adb devices
List of devices attached
7XIZ59VK9H4LL7IJ unauthorized
14) Чтобы его авторизовать - смотрим на экран смартфона. На смартфоне появляется запрос на соединение с компом - ставим галку что доверять компу и жмем ОК:

15) Теперь еще раз на компе в cmd введем adb devices чтобы проверить удачно ли смартфон авторизовался - и видим вот это:
Слово device - означает что это подключено к компу "устройство", а не просто неавторизованный непонятно кто.c:\pt>adb devices
List of devices attached
7XIZ59VK9H4LL7IJ device
16) Теперь еще разрешаем установку APK-приложений через кабель - включаем на смартфоне эту галку. Оказалось, что если в телефоне нет сим-карты, то этот пункт включить не получится. Вот это защита) Ну если симка есть - то пункт включится:

Устанавливаем paintcad.apk на смартфон по кабелю с обходом проверки на старость
17) На компьютере в cmd вводим команду установки APK-файла на смартфон через кабель с обходом проверки на старость APK-файла флажком --bypass-low-target-sdk-block (можно эту длинную команду скопировать по Ctrl+C и вставить в cmd по Ctrl+V чтобы не вводить, в Windows 11 вставилось на ура):
Если забыть разрешить установку APK по USB-кабелю (в 16-м пункте выше), то adb будет ругаться:adb install --bypass-low-target-sdk-block paintcad.apk
А если не забыть - то apk-приложение закачается по кабелю в смартфон и установится, а в cmd на компе появится надпись Success (что значит "Успех").Performing Streamed Install
adb.exe: failed to install paintcad.apk: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]
Теперь в ваш смартфон установлено приложение, предназначенное для старых андроидов, и которое "несовместимо с вашим телефоном" +) И оно отлично работает. Значок появится либо на рабочем столе, либо в меню приложений (зависит от версии андроида и интерфейса смартфона).
Так можно ставить любые старые APK.
Устанавливаем любые другие APK на смартфон по кабелю с обходом проверки на старость
Любые другие apk-файлы ставить еще быстрее, т.к. уже все разрешения получены после проделанного выше:
1) кидаем нужный имя_файла.apk в папку c:\pt
2) запускаем cmd по Windows+R, вводим cmd жмем enter. Дальше в cmd вводим команды по очереди
Автоматизация для тех, кому лень вводить команды вручнуюc:
cd c:\pt
adb start-server
adb devices
adb install --bypass-low-target-sdk-block имя_файла.apk
Для тех, кто любит bat-файлы или cmd-файлы, вообще можно записать эти команды в 2 файла:
1) Подключаем телефон к компу и запускаем первый cmd-файл или bat-файл, который запускает adb и показывает что видит подключенный к компу смартфон. Текст первого cmd-файла:
2) Второй cmd-файл или bat-файл чисто на установку выбранного apk-файла на подключенный смартфон. Его текст:c:
cd c:\pt
adb start-server
adb devices
pause
Создайте для второго cmd-файла или bat-файла ярлык и вырежьте этот ярлык по Ctrl+X.c:
cd c:\pt
adb install --bypass-low-target-sdk-block %1
pause
Затем нажмите Windows+R, введите shell:sendto и нажмите Enter.
В открывшейся папке нажмите Ctrl+V и вставьте ярлык.
Теперь жмите по любому APK правой кнопкой мыши, выбирайте "Отправить" и в вылезшем меню жмите на ваш ярлык на второй cmd-файл или bat-файл, и этот APK сам поедет устанавливаться на ваш смартфон по кабелю.
p.s. если путь к apk будет с длинными именами папок и с пробелами, то можно еще попробовать заключить %1 в кавычки, тогда будет adb install --bypass-low-target-sdk-block "%1" (но это надо проверить, может adb и без кавычек соображает что всё в командной строке что после ключей - это путь и имя файла, смотря как adb написан)