{"id":468262,"date":"2025-07-22T21:00:26","date_gmt":"2025-07-22T21:00:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=468262"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=468262","title":{"rendered":"<span>Geely \u0438 ECARX, \u0447\u0442\u043e \u0441 \u0432\u0430\u043c\u0438 \u043d\u0435 \u0442\u0430\u043a?<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0438\u0442\u0430\u044f \u0425\u0430\u0431\u0440, \u044f \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0441\u0442\u0430\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0438\u0440 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2014 \u0413\u0423) \u043d\u0430 \u0431\u0430\u0437\u0435 Android, \u0445\u043e\u0442\u044f \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0442\u0430\u043c \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043e\u0434\u043d\u0438 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0430\u0432\u0442\u043e \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0440\u044b\u043d\u043a\u0435: Geely Coolray \u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e Geely Tugella. <br \/>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0441 \u0432\u044b\u0440\u0435\u0437\u043a\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u0438\u0437 JADX \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p>\u041f\u0430\u0446\u0438\u0435\u043d\u0442: Belgee X50 2024 \u0433\u043e\u0434\u0430, \u043e\u043d \u0436\u0435 Geely Coolray \u0434\u043e\u0440\u0435\u0441\u0442\u0430\u0439\u043b\u0438\u043d\u0433, \u043d\u043e \u0441 \u043d\u043e\u0432\u044b\u043c \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u043c \u0431\u0435\u043b\u043e\/\u0441\u0438\u043d\u0435\u043c UI.<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/h2>\n<p>\u0416\u0435\u043b\u0435\u0437\u043a\u0438 \u0438 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f Geely \u0438\u0437\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f ECARX.<\/p>\n<p>\u0416\u0435\u043b\u0435\u0437\u043e \u043b\u0435\u0433\u043a\u043e <a href=\"https:\/\/4pda.to\/forum\/index.php?act=findpost&amp;pid=132608145&amp;anchor=Spoil-132608145-2\" rel=\"noopener noreferrer nofollow\">\u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0430\u043c\u0438 \u0438\u0437 AIDA64<\/a>: \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ECARX E02, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f Mediatek Helio P60 (MT6771), 4 \u0413\u0431 RAM, 64 Gb Flash, \u0434\u0432\u0443\u0445\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u044b\u0439 WiFi \u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0433\u0434\u0435-\u0442\u043e \u0432 \u0442\u043e\u0440\u043f\u0435\u0434\u0435 \u0438 \u044d\u043a\u0440\u0430\u043d 1920\u0445720.<\/p>\n<p>\u0414\u043e\u043f\u0438\u043b\u0435\u043d\u043d\u044b\u0439 Android 9 API 28, <a href=\"https:\/\/4pda.to\/forum\/index.php?act=findpost&amp;pid=132608145&amp;anchor=Spoil-132608145-7\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>, HAL \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0430\u0432\u0442\u043e. <br \/>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d. <\/p>\n<p>\u041d\u0435 \u0433\u0443\u0441\u0442\u043e \u0438 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043d\u043e \u043d\u0430 \u0432\u0441\u0435 \u0430\u0432\u0442\u043e-\u0445\u043e\u0442\u0435\u043b\u043a\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. <\/p>\n<h2>\u0410 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c?<\/h2>\n<p>\u0418\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u041f\u041e \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <br \/>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 CAN-\u0448\u0438\u043d\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0431\u043b\u043e\u043a \u0413\u0423 \u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0430\u0432\u0442\u043e &#171;\u043d\u0430 \u0441\u0442\u043e\u043b\u0435&#187;, \u043f\u0430\u0442\u0447\u0430\u0442 <code>boot.img<\/code> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Magisk, \u043f\u0440\u0430\u0432\u044f\u0442 <code>PackageManager<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f: \u0441\u0442\u0430\u0432\u044f\u0442 usbgps, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u0435\u0433\u043e \u0432 fusedlocation, \u0438 \u0442.\u0434. <\/p>\n<blockquote>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044b \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u0435\u043b\u0430 \u0441 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0436\u0435\u043b\u0435\u0437\u043a\u0430\u043c\u0438, \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0434\u0435\u043d\u044c\u0433\u0438.<br \/>\u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043e\u043d\u0438 \u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0438\u0432\u0435\u0437\u0451\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0440\u044b\u043d\u043a\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0443.<\/p>\n<\/blockquote>\n<p>\u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430 Belgee X50 \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/lunaris-firmware.ru\/ru\/%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8\/belgee-x50\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f\u0445, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432<\/a>, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u0440\u044f\u0434 \u043d\u044e\u0430\u043d\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0423 \u0432\u0430\u0441 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 2 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435 \u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430:<\/p>\n<ul>\n<li>\n<p>\u041e\u0434\u043d\u0430 \u043f\u0443\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043b\u0435\u0439\/\u043f\u0430\u0443\u0437\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u043b\u0435\u0435\u0440\u0430\u0445, \u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u0438\u043b\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u043c\u0443\u0437\u044b\u043a\u0430 \u0438\u0437 \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u043b\u043a\u0438\u0439: 160 DPI \u043f\u0440\u0438 9.5&#8243; 1920\u0445720<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438: \u0442\u0430\u043c \u0434\u0430\u0436\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 =)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, PowerAMP) \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u042f\u043d\u0434\u0435\u043a\u0441.\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u0438 2\u0413\u0418\u0421)<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e ADB, \u043d\u043e \u0438 \u0432 \u044d\u0442\u043e\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0432\u043e\u0445: \u043c\u0435\u043d\u044e\u0448\u043a\u0430 &#171;\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432&#187; \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u0418\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0443 \u043d\u0430\u0441 \u0436\u0435 \u0435\u0441\u0442\u044c ROOT-\u043f\u0440\u0430\u0432\u0430: \u0441\u0442\u0430\u0432\u0438\u043c <code>com.kva.adboverwifi<\/code>, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>service.adb.tcp.port<\/code> \u0432 <code>5555<\/code> \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ADBd. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c <code>adb connect &lt;ip&gt;<\/code>, \u043d\u043e <code>adb devices<\/code> \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e <code>unauthorized<\/code>. \u0414\u0438\u0430\u043b\u043e\u0433 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043a\u043b\u0430\u0434\u0435\u043c \u043a\u043b\u044e\u0447\u0438\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 <code>\/data\/misc\/adb\/adb_keys<\/code>, \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 ADB.<\/p>\n<p>\u0417\u0430\u0440\u044f\u0436\u0430\u0435\u043c BatchAPKTool, \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u043e ADB <code>\/system<\/code> \u0440\u0430\u0437\u0434\u0435\u043b \u0438\u043b\u0438 \u0440\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0434\u0430\u043c\u043f\u043e\u0432, \u0434\u0435\u043e\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c, \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043b\u0435\u0433\u043a\u0438\u0445 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u041e_\u043e.<\/p>\n<ol>\n<li>\n<p><a href=\"#recent_apps\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#poweramp\" rel=\"noopener noreferrer nofollow\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 PowerAMP \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#dpi\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u043b\u043a\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#buttons\" rel=\"noopener noreferrer nofollow\">\u041a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#navfix\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"recent_apps\" id=\"recent_apps\"><\/a><\/p>\n<h4>\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438<\/h4>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043b\u0435\u0433\u043a\u043e\u0433\u043e. <br \/>\u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043b\u0430\u0443\u043d\u0447\u0435\u0440 <code>NSLauncher.apk<\/code>, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u043c\u0430\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f <code>XCHvac.apk<\/code>, \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0441\u043c\u0435\u043d\u044b \u0442\u0435\u043c\u044b \u0442\u0435\u043c\u043d\u0430\u044f\/\u0431\u0435\u043b\u0430\u044f (\u0437\u0430\u0447\u0435\u043c \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e?) <code>ECarXPowerManagerService.apk<\/code>. <\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;activity android:configChanges=\"uiMode\" android:exported=\"true\" android:fitsSystemWindows=\"true\" android:launchMode=\"singleTask\" android:name=\"ecarx.hvac.app.MainActivity\"&gt; &lt;intent-filter&gt; &lt;action android:name=\"android.intent.action.MAIN\"\/&gt; &lt;action android:name=\"android.intent.action.HVAC_WIDGET\"\/&gt; &lt;action android:name=\"android.intent.action.PSD_HVAC_WIDGET\"\/&gt; &lt;category android:name=\"android.intent.category.LAUNCHER\"\/&gt; &lt;\/intent-filter&gt; &lt;\/activity&gt;<\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u044b\u043c \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c (\u0438\u043b\u0438 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432) \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>android:excludeFromRecents=\"true\"<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>\u0418\u0434\u0435\u043c \u043a \u0430\u0432\u0442\u043e, \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 APK \u0442\u0443\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u043b\u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f, \u0433\u043e\u0442\u043e\u0432\u043e. <br \/>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0435 \u0436\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"poweramp\" id=\"poweramp\"><\/a><\/p>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 PowerAMP \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/h4>\n<p>\u0426\u0435\u043f\u043b\u044f\u0435\u043c ADB, \u0434\u0435\u043b\u0430\u0435\u043c <code>adb logcat<\/code>, \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c PowerAMP.<br \/>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u0430 \u0432 logcat \u0437\u0430\u0432\u0435\u0449\u0430\u043d\u0438\u0435 \u043e\u0442 <code>system_server<\/code>:<\/p>\n<pre><code>07-01 01:49:36.041 15732 15749 D avm_service_app: ActivityWatcher.java(113):appCrashed:  appCrashed proc:null pid:11655 m:java.util.NoSuchElementException m2:java.util.NoSuchElementException time:1751305776039 st:java.util.NoSuchElementException 07-01 01:49:36.041 15732 15749 D avm_service_app:       at android.util.MapCollections$ArrayIterator.next(MapCollections.java:55) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.adjustCpuAbisForSharedUserLPw(PackageManagerService.java:12267) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageOnlyLI(PackageManagerService.java:11005) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10448) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageTracedLI(PackageManagerService.java:10229) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.installNewPackageLIF(PackageManagerService.java:16792) \/\/ \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u043b \u0447\u0442\u043e\u0431 \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u043a\u043e\u0432 \u0431\u044b\u043b\u043e 07-01 01:49:36.041 11655 11688 I Process : Sending signal. PID: 11655 SIG: 9<\/code><\/pre>\n<p>\u041d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c JADX \u043d\u0430 <code>services.jar<\/code>, \u0438\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>adjustCpuAbisForSharedUserLPw<\/code>: <\/p>\n<details class=\"spoiler\">\n<summary>private static List&lt;String&gt; adjustCpuAbisForSharedUserLPw(Set&lt;PackageSetting&gt; packagesForUser, PackageParser.Package scannedPackage)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">private static List&lt;String&gt; adjustCpuAbisForSharedUserLPw(Set&lt;PackageSetting&gt; packagesForUser, PackageParser.Package scannedPackage) {     String adjustedAbi;     List&lt;String&gt; changedAbiCodePath = null;     String requiredInstructionSet = null;     if (scannedPackage != null &amp;&amp; scannedPackage.applicationInfo.primaryCpuAbi != null) {         requiredInstructionSet = VMRuntime.getInstructionSet(scannedPackage.applicationInfo.primaryCpuAbi);     }     PackageSetting requirer = null;      \/\/ \u0442\u0443\u0442 \u0431\u044b\u043b for, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 AOSP      if (requiredInstructionSet != null) {         if (requirer != null) {             adjustedAbi = requirer.primaryCpuAbiString;             if (scannedPackage != null) {                 scannedPackage.applicationInfo.primaryCpuAbi = adjustedAbi;             }         } else {             adjustedAbi = scannedPackage.applicationInfo.primaryCpuAbi;         }         if (packagesForUser.iterator().next().getSharedUserId() == 1000) {             adjustedAbi = \"arm64-v8a\";         }          \/\/ \u0442\u0443\u0442 \u0431\u044b\u043b for, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 AOSP      }     return changedAbiCodePath; } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0437\u0430\u0447\u0435\u043c \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 21 \u0441\u0442\u0440\u043e\u043a\u0435: \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439? \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 PackageManager? \u041f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u0447\u0442\u043e <code>packagesForUser<\/code> \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c Set&#8217;\u043e\u043c&#8230;<\/p>\n<blockquote>\n<p>\u0437\u0430\u0447\u0435\u043c \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e?<\/p>\n<\/blockquote>\n<p>\u041b\u0435\u0437\u0435\u043c \u0432 smali \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. <\/p>\n<p>\u0421\u043e\u043c\u043d\u0435\u0432\u0430\u044f\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 AOSP Android 9 API 28, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435. \u041d\u0435 \u043d\u0430\u0448\u0435\u043b &#8212; \u0432\u0438\u0434\u0438\u043c\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u0435\u0439\u0441 \u0445\u043e\u0442\u044c \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u0438\u0439, \u043d\u043e \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0430\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 system \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 FlashTool &#8212; \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0443 \u043d\u0430\u0441 \u0413\u0423 \u0430\u0432\u0442\u043e \u0431\u0435\u0437 TWRP, \u0434\u0430 \u0438 \u0434\u043e &#171;\u043a\u043d\u043e\u043f\u043e\u043a&#187; \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043b\u0435\u0437\u0442\u044c \u0437\u0430 \u0431\u0430\u0440\u0434\u0430\u0447\u043e\u043a, \u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c. <br \/>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a (\u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0435\u043c\u0443), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>services.jar<\/code> \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0433\u0434\u0435 \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0443\u0436\u0435 10 \u043c\u0438\u043d\u0443\u0442 &#8212; \u043f\u0440\u043e\u043a\u0430\u0442\u0438\u043b\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430: \u0441 PowerAMP \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"dpi\" id=\"dpi\"><\/a><\/p>\n<h3>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u043b\u043a\u0438\u0439<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435 \u043f\u0430\u0440\u0438\u043b\u043e, \u043d\u043e \u043f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ff6\/fc8\/81b\/ff6fc881b493bb87f85a8946c2a979d3.png\" alt=\"\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c (\u0441) \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c wm density 240\" title=\"\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c (\u0441) \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c wm density 240\" width=\"839\" height=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ff6\/fc8\/81b\/ff6fc881b493bb87f85a8946c2a979d3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ff6\/fc8\/81b\/ff6fc881b493bb87f85a8946c2a979d3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c (\u0441) \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>wm density 240<\/code><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043b\u0438\u043c\u0430\u0442, \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0438 SystemUI \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 (layout) \u043a \u0448\u0442\u0430\u0442\u043d\u043e\u043c\u0443 DPI: \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0443 \u0432\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0430, \u043d\u0438 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u0439\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u043e\u0439: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c Magisk, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/LSPosed\/LSPosed\" rel=\"noopener noreferrer nofollow\">LSPosed<\/a> (\u043e\u043d \u0436\u0435 <a href=\"https:\/\/trashbox.ru\/topics\/96897\/xposed-framework-zachem-eto-nuzhno-i-s-chem-eto-edyat\" rel=\"noopener noreferrer nofollow\">Xposed<\/a> \u043d\u0430 \u0431\u0430\u0437\u0435 Zygisk), \u0430 \u0442\u0430\u043c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/BlueCat300\/XposedAppSettings\" rel=\"noopener noreferrer nofollow\">App Settings<\/a> &#8212; \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. <br \/>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f DPI 240 \u0434\u043b\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u0430 \/ \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0421 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445: \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f; \u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 LSPosed \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c LSPosed Manager, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044e App Settings \u043d\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435, \u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043f\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e. <br \/>\u0410 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u0442: \u043d\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445, \u043d\u0438 \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0438 \u043a\u0430\u043a \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445. <br \/>\u0422\u043e\u0447\u043d\u0435\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0430\u043c\u0430 \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0430-\u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u043e \u043e\u043d\u0430 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <code>CarSettings.apk<\/code> &#8212; \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445, \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 AOSP-\u043e\u0432\u0441\u043a\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.<\/p>\n<p>\u041f\u043e\u0433\u0443\u0433\u043b\u0438\u043b \u043c\u0438\u043d\u0443\u0442 5 \u0435\u0441\u0442\u044c \u043b\u0438 \u0435\u0449\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c LSPosed Manager, \u0431\u0435\u0437\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043d\u043e, \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c.<\/p>\n<p>\u0414\u0430\u043c\u043f\u0438\u043c \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0438\u0449\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043e\u0442 LSPosed, \u0434\u043e\u0441\u0442\u0430\u0435\u043c ID PendingIntent:<\/p>\n<pre><code class=\"bash\">IHU730P:\/ # dumpsys notification --noredact | grep -B 12 \"android.title=String (LSPosed \" | grep contentIntent contentIntent=PendingIntent{9519f01: PendingIntentRecord{f2fa65e android broadcastIntent (whitelist: 6aeaa3f:+30s0ms)}}  IHU730P:\/ # dumpsys notification --noredact | grep -B 12 \"android.title=String (LSPosed \" | grep contentIntent | cut -d\"{\" -f3 | cut -d\" \" -f1 # \u0432\u0435\u0440\u043d\u0435\u0442 f2fa65e - \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e<\/code><\/pre>\n<p>\u0414\u0430\u043c\u043f\u0438\u043c \u0432\u0441\u0435 Intent \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0438\u0449\u0435\u043c \u043f\u043e ID \u043d\u0430\u0448:<\/p>\n<pre><code class=\"bash\">IHU730P:\/ # dumpsys activity intents | grep -A 4 f2fa65e     #27: PendingIntentRecord{f2fa65e android broadcastIntent (whitelist: 6aeaa3f:+30s0ms)}       uid=1000 packageName=android type=broadcastIntent flags=0x4000000       requestCode=1 requestResolvedType=null       requestIntent=act=07780ba6-7489-40d0-b74a-013d98477047 pkg=android       whitelistDuration=6aeaa3f:+30s0ms  IHU730P:\/ # dumpsys activity intents | grep -A 4 f2fa65e | grep requestIntent | cut -d'=' -f3 | cut -d' ' -f1 # 07780ba6-7489-40d0-b74a-013d98477047 - \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u043d\u0430\u0448\u043b\u0438 Intent Action, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 UUID, \u043e\u043d \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0431\u0443\u0442, \u0442\u043e \u0435\u0441\u0442\u044c &#171;\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c&#187; \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u043e \u0437\u0430 \u043c\u0430\u043b\u044b\u043c, \u0437\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 Intent<\/p>\n<pre><code>am broadcast -a 07780ba6-7489-40d0-b74a-013d98477047 -p android --receiver-include-background<\/code><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh intent_id=$(dumpsys notification --noredact | grep -B 12 \"android.title=String (LSPosed \" | grep contentIntent | cut -d\"{\" -f3 | cut -d\" \" -f1) act_uuid=$(dumpsys activity intents | grep -A 4 $intent_id | grep requestIntent | cut -d'=' -f3 | cut -d' ' -f1) am broadcast -a $act_uuid -p android --receiver-include-background<\/code><\/pre>\n<p>LSPosed Manager \u043e\u0442\u043a\u0440\u044b\u043b\u0441\u044f, \u0434\u0430\u043b\u044c\u0448\u0435 \u043a\u043b\u0438\u043a\u0435\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 =)<\/p>\n<p><a class=\"anchor\" name=\"buttons\" id=\"buttons\"><\/a><\/p>\n<h3>\u041a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435<\/h3>\n<details class=\"spoiler\">\n<summary>\u0424\u043e\u0442\u043e \u0440\u0443\u043b\u044f, \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c6f\/638\/548\/c6f6385483e52f15472c819063185c51.png\" width=\"1000\" height=\"600\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c6f\/638\/548\/c6f6385483e52f15472c819063185c51.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c6f\/638\/548\/c6f6385483e52f15472c819063185c51.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<h4>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u043e\u0432<\/h4>\n<p>\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u043e\u0432, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435? \u041d\u0435 \u0442\u0430\u043a \u0442\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 Android 9, \u043e\u0442\u0441\u044b\u043b\u0430\u044e\u0442 \u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0438\u043d\u0442\u0435\u043d\u0442 <code>android.intent.action.MEDIA_BUTTON<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043b\u0435\u0435\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 minSdk=21 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u043c\u0438. <\/p>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/developer.android.com\/media\/legacy\/media-buttons?hl=rus\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0436\u0443: \u0434\u043e Android 5 API 21 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u044b\u043b\u0430\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c <code>intent act=android.intent.action.MEDIA_BUTTON<\/code> \u0438 \u043a\u043b\u0430\u043b\u0438 \u0442\u0443\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043d\u043e\u043f\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0436\u0430\u0442\u0430. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u043e, \u0447\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e. <br \/>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 API 21 \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e <em>deprecated<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0432\u0435\u043b\u0438 <code>MediaSession<\/code> &#8212; \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043b\u0435\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0440\u0435\u043a\u0435 \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0438 \u0442.\u0434.), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0432\u0435\u043d\u0442\u044b \u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445, \u043d\u0443 \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0433\u043e. <\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435 \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u043f\u043b\u0435\u0435\u0440\u0430\u043c\u0438, \u0430 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438: \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u043e\u0432\u0438\u043b\u043e <code>android.intent.action.MEDIA_BUTTON<\/code> \u0438 \u0434\u0435\u043b\u0430\u043b\u043e <code>new Instrumentation().sendKeyDownUpSync(keycode);<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 MediaSession, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0433\u043e\u043d\u043a\u0435 \u0437\u0430 \u0430\u0443\u0434\u0438\u043e\u0444\u043e\u043a\u0443\u0441 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e? \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043b\u0438\u0431\u043e <code>MediaSession.getTransportControls().&lt;action&gt;()<\/code> \u043b\u0438\u0431\u043e \u0438\u043d\u0442\u0435\u043d\u0442. <br \/>\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043c\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u0435\u0442: \u044f\u0432\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b 2 \u0440\u0435\u0436\u0438\u043c\u0430, \u044f\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u043e\u0432, \u043d\u0443 \u0438\u043b\u0438 \u043b\u043e\u043d\u0433-\u0442\u0430\u043f \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6dd\/645\/635\/6dd6456351646926e1bd36007892bfcf.png\" alt=\"\u0422\u0430\u043c \u043d\u0438\u0436\u0435 \u0441\u0432\u0438\u0442\u0447 \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043f\u0440\u0435\u0432\u044c\u044e \u0441\u0442\u0443\u0434\u0438\u0438 \u043e\u043d \u0443\u0435\u0445\u0430\u043b \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430. \u041d\u0430 \u0430\u0432\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e DPI.\" title=\"\u0422\u0430\u043c \u043d\u0438\u0436\u0435 \u0441\u0432\u0438\u0442\u0447 \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043f\u0440\u0435\u0432\u044c\u044e \u0441\u0442\u0443\u0434\u0438\u0438 \u043e\u043d \u0443\u0435\u0445\u0430\u043b \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430. \u041d\u0430 \u0430\u0432\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e DPI.\" width=\"1053\" height=\"471\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6dd\/645\/635\/6dd6456351646926e1bd36007892bfcf.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6dd\/645\/635\/6dd6456351646926e1bd36007892bfcf.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0430\u043c \u043d\u0438\u0436\u0435 \u0441\u0432\u0438\u0442\u0447 \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043f\u0440\u0435\u0432\u044c\u044e \u0441\u0442\u0443\u0434\u0438\u0438 \u043e\u043d \u0443\u0435\u0445\u0430\u043b \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430. \u041d\u0430 \u0430\u0432\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e DPI.<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u0442\u044c \u043c\u044b\u0441\u043b\u0438, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u0438\u043b\u0438\u0442\u044c \u0432 \u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 MediaSession &#8212; \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442 \u0441\u0442\u0430\u0440\u044b\u0445 \u0438\u043d\u0442\u0435\u043d\u0442\u043e\u0432, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 smali.<\/p>\n<h4>\u041d\u0435\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u043f\u043e\u043b\u0435\u0437 \u0432 logcat, \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0438 \u043f\u043e \u043a\u043e\u0434\u0443, \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043e\u043a. \u0418 \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043e\u0431\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 &#171;\u0447\u0435\u043a\u0438\u043d\u044f\u0442\u0441\u044f&#187; \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438-\u0441\u0435\u0440\u0432\u0438\u0441\u0435 Apple CarPlay. <br \/>\u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0432 CarPlay \u0441\u0435\u0441\u0441\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u0430 \u0432\u0441\u0451 \u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Siri. \u041a\u043d\u043e\u043f\u043a\u0430 \u043f\u043b\u0435\u0439\/\u043f\u0430\u0443\u0437\u044b \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0433\u0434\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041b\u0435\u0437\u0435\u043c \u0432 logcat.<\/p>\n<pre><code>\/\/ \u043d\u0430\u0436\u0430\u043b\u0438 1752509568.098  1000  1119  1119 D carplayapp-CarPlayServiceHelper: onChangeEvent keyID:\"[45]\"   keyEvent[1] 1752509568.098  1000  1119  1119 D carplayapp-CarPlayServiceHelper: onChangeEvent current source is not CarPlay gear=&gt;P  currentSourceIsCarPlay=&gt;true  siriStatus=&gt;0  carplaySession=&gt;true  \/\/ \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 1752509569.179  1000  1119  1119 D carplayapp-CarPlayServiceHelper: onChangeEvent keyID:\"[45]\"   keyEvent[0] 1752509569.179  1000  1119  1119 D carplayapp-CarPlayServiceHelper: onChangeEvent current source is not CarPlay gear=&gt;P  currentSourceIsCarPlay=&gt;true  siriStatus=&gt;0  carplaySession=&gt;true<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u043b\u043e\u0433\u043a\u0430\u0442\u0435 <code>current source is not CarPlay<\/code> + <code>currentSourceIsCarPlay=&gt;true<\/code> \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0432\u0441\u0451 \u043f\u043e\u0439\u043c\u0435\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>private void resetNextAndPreKeyListener()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">private void resetNextAndPreKeyListener() {     this.mVehicleSignalManager = new VehicleSignalManager(CarPlayApplication.getApplication());     this.mVehicleSignalManager.connect();     this.mVehicleSignalManager.registerConnectWatcher(new IConnectable.IConnectWatcher() { \/\/ from class: com.neusoft.accessory.connectservice.CarPlayServiceHelper.5                  @Override \/\/ com.ecarx.xui.adaptapi.binder.IConnectable.IConnectWatcher         public void onConnected() {             LogUtil.m43D(CarPlayServiceHelper.TAG, \"VehicleSignalManager onConnected key:\" + Integer.toHexString(VehicleProperty.INFO_ID_CARPLAY_KEY_VALUE));             CarPlayServiceHelper.this.mVehicleSignalManager.getCarPropertyManager();             boolean result = CarPlayServiceHelper.this.mVehicleSignalManager.registerListener(new CarPropertyManager.CarPropertyEventListener() { \/\/ from class: com.neusoft.accessory.connectservice.CarPlayServiceHelper.5.1                  @Override \/\/ android.car.hardware.property.CarPropertyManager.CarPropertyEventListener                 public void onChangeEvent(CarPropertyValue carPropertyValue) {                     byte[] keyEvent = (byte[]) carPropertyValue.getValue();                     byte[] keyId = CarPlayServiceHelper.this.mVehicleSignalManager.getBytesByPropID(VehicleProperty.INFO_ID_CARPLAY_KEY_ID);                                          LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent keyID:\\\"\" + Arrays.toString(keyId) + \"\\\"   keyEvent\" + Arrays.toString(keyEvent));                     boolean currentSourceIsCarPlay = GlobalStatus.currentSourceIsCarPlay.get().booleanValue();                     String gear = CarPlayVehicleStatus.getInstance().getGear();                     boolean carplaySession = GlobalStatus.session.get().booleanValue();                     int siriStatussss = GlobalStatus.siRiStatus.get().intValue();                     LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent current source is not CarPlay gear=&gt;\" + gear + \"  currentSourceIsCarPlay=&gt;\" + currentSourceIsCarPlay + \"  siriStatus=&gt;\" + siriStatussss + \"  carplaySession=&gt;\" + carplaySession);                                          if (!currentSourceIsCarPlay) {                         LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent current source is not CarPlay, return.\");                     } else if (\"R\".equals(gear)) {                         LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent gear is R, return.\");                     } else if (1 == siriStatussss) {                         LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent Siri activity, return.\");                     } else if (!carplaySession) {                         LogUtil.m43D(CarPlayServiceHelper.TAG, \"onChangeEvent session not start, return.\");                     } else if (50 == keyId[0]) {                         Message msg = CarPlayServiceHelper.this.myHandler.obtainMessage(101);                         if (keyEvent[0] == 1) {                             msg.obj = 0;                         } else {                             msg.obj = 2;                         }                         CarPlayServiceHelper.this.myHandler.sendMessage(msg);                     } else if (49 == keyId[0]) {                         Message msg2 = CarPlayServiceHelper.this.myHandler.obtainMessage(102);                         if (keyEvent[0] == 1) {                             msg2.obj = 0;                         } else {                             msg2.obj = 2;                         }                         CarPlayServiceHelper.this.myHandler.sendMessage(msg2);                     }                 }                  @Override \/\/ android.car.hardware.property.CarPropertyManager.CarPropertyEventListener                 public void onErrorEvent(int i, int i1) {                     LogUtil.m43D(CarPlayServiceHelper.TAG, \"0x028B onErrorEvent i:\" + i + \"  i1:\" + i1);                 }             }, VehicleProperty.INFO_ID_CARPLAY_KEY_VALUE);             LogUtil.m43D(CarPlayServiceHelper.TAG, \"resetNextAndPreKeyListener result is \" + result);         }          @Override \/\/ com.ecarx.xui.adaptapi.binder.IConnectable.IConnectWatcher         public void onDisConnected() {         }     }); } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0448\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043d\u043e\u043f\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e ID <code>VehicleProperty.INFO_ID_CARPLAY_KEY_VALUE<\/code> \u0438 \u0434\u043e\u0441\u0442\u0430\u0435\u0442 ID \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e <code>VehicleProperty.INFO_ID_CARPLAY_KEY_ID<\/code>. <br \/>\u0415\u0449\u0435 \u043d\u0430\u0448\u043b\u0438, \u0447\u0442\u043e <code>current source is not CarPlay<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432 \u043b\u043e\u0433\u0435 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e CarPlay \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c ID \u043a\u043d\u043e\u043f\u043e\u043a: <code>45<\/code> \u043a\u043d\u043e\u043f\u043a\u0430 &#8212; \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430, <code>49<\/code> \u043a\u043d\u043e\u043f\u043a\u0430 &#8212; \u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0440\u0435\u043a, <code>50<\/code> \u043a\u043d\u043e\u043f\u043a\u0430 &#8212; \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439. \u0412 \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430? <\/p>\n<p>\u0412\u0438\u0434\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0430 <code>49<\/code> \u0438 <code>50<\/code> \u043a\u043d\u043e\u043f\u043a\u0438, \u0430 \u0433\u0434\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 <code>45<\/code>? \u0415\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442!<br \/>\u041b\u0430\u0434\u043d\u043e, \u0441\u0445\u043e\u0434\u0438\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0443\u0434\u0430 \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u0432 myHandler<\/p>\n<details class=\"spoiler\">\n<summary>private static class MyHandler extends Handler<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">private static class MyHandler extends Handler {     public MyHandler(Looper looper) {         super(looper);     }      @Override \/\/ android.p010os.Handler     public void handleMessage(Message msg) {         switch (msg.what) {             case 101:                 sendKeyEvent(101, ((Integer) msg.obj).intValue());                 break;             case 102:                 sendKeyEvent(102, ((Integer) msg.obj).intValue());                 break;             case 103:                 sendKeyEvent(103, ((Integer) msg.obj).intValue());                  break;             case 104:                 sendKeyEvent(104, ((Integer) msg.obj).intValue());                 break;             case 105:                 sendKeyEvent(105, ((Integer) msg.obj).intValue());                 break;             case 106:                 sendKeyEvent(106, ((Integer) msg.obj).intValue());                 break;         }         super.handleMessage(msg);     }      private void sendKeyEvent(int keyCode, int action) {         CarPlayHardKeyManager.getInstance().onKeyEvent(keyCode, action);     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 <code>CarPlayHardKeyManager.getInstance().onKeyEvent(keyCode, action);<\/code> \u0438 \u0435\u0433\u043e \u043a\u043e\u0434 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0433\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e (\u0432\u0438\u0434\u0438\u043c\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 JADX \u0435\u0433\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b), \u043d\u043e \u0442\u0430\u043c \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u043a\u043d\u043e\u043f\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043b\u0435\u0435 \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 CarPlay HAL:<\/p>\n<pre><code>\/\/ \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 (keyaction == 0) UserInput.getInstance().mediaPlay(); UserInput.getInstance().mediaPause(); UserInput.getInstance().mediaPrevious(); UserInput.getInstance().mediaNext();  \/\/ \u043d\u0430 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 (keyaction == 1) UserInput.getInstance().mediaUp();<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u0443\u0437\u044b\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<br \/>\u041e\u0442\u043e\u0439\u0434\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u0430\u0434, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/mark99i\/android-media-controller\" rel=\"noopener noreferrer nofollow\">android-media-controller<\/a> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043b\u0438 CarPlay MediaSession \u0441\u0435\u0441\u0441\u0438\u044e. \u0418 \u0434\u0430, \u043e\u043d \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442, \u043d\u043e \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/545\/b88\/e90\/545b88e9030a2d9f95c2e85285a0e315.png\" alt=\"MediaSession \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f AppleCarPlay.apk\" title=\"MediaSession \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f AppleCarPlay.apk\" width=\"407\" height=\"159\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/545\/b88\/e90\/545b88e9030a2d9f95c2e85285a0e315.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/545\/b88\/e90\/545b88e9030a2d9f95c2e85285a0e315.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>MediaSession \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f AppleCarPlay.apk<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043d\u043e\u043f\u043e\u043a, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b: \u0438 \u0434\u0430, \u043e\u043d \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e if-\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 <code>onMediaButtonEvent<\/code> \u0438 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0443\u0437\u0443. \u0414\u0430 \u0447\u0442\u043e-\u0436 \u0442\u0430\u043a\u043e\u0435 \u0442\u043e. <\/p>\n<details class=\"spoiler\">\n<summary>HandleMedia.class<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">@Override \/\/ android.media.session.MediaSession.Callback public boolean onMediaButtonEvent(Intent mediaButtonIntent) {     LogUtil.m43D(TAG, \"onMediaButtonEvent\");     if (GlobalStatus.session.get().booleanValue()) {         KeyEvent event = (KeyEvent) mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);         if (event.getKeyCode() == 87) {             if (event.getAction() == 0) {                 HandleMediaButton.sendButton(1);             }             if (event.getAction() == 1) {                 HandleMediaButton.sendButton(6);             }             AudioFocusUtil.getInstance().setMasterMute(false);         }         if (event.getKeyCode() == 88) {             if (event.getAction() == 0) {                 HandleMediaButton.sendButton(2);             }             if (event.getAction() == 1) {                 HandleMediaButton.sendButton(6);             }             AudioFocusUtil.getInstance().setMasterMute(false);         }         return super.onMediaButtonEvent(mediaButtonIntent);     }     return false; }   <\/code><\/pre>\n<pre><code class=\"java\">@Override \/\/ com.neusoft.carplaynew.base.BaseHandler public void onHandleMessage(Message msg) {     switch (msg.what) {         case 1:             UserInput.getInstance().mediaNext();             return;         case 2:             UserInput.getInstance().mediaPrevious();             return;         case 3:             UserInput.getInstance().mediaPlay();             return;         case 4:             UserInput.getInstance().mediaPause();             return;         case 5:             UserInput.getInstance().mediaPlayOrPause();             return;         case 6:             UserInput.getInstance().mediaUp();             return;         default:             return;     } } <\/code><\/pre>\n<pre><code class=\"java\">@Override \/\/ com.neusoft.carplaynew.service.mediaservice.MediaInterFac public void sendMediaState(long state, long curTime) {     LogUtil.m43D(TAG, \"sendMediaState state ==\" + state + \"----curTime---\" + curTime);     int playState = 0;     if (state == 1) {         playState = 3;     } else if (state == 2) {         playState = 2;     } else if (state == 0) {         playState = 1;     }     if (this.mSession == null) {         return;     }     PlaybackState states = new PlaybackState.Builder().setState(playState, curTime, 1.0f).build();     this.mSession.setPlaybackState(states);     LogUtil.m43D(TAG, \"sendMediaState  \" + state + \"  curTime: \" + curTime); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u044e\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 <code>KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE<\/code><em> (85), <\/em>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f <code>HandleMediaButton.sendButton(5);<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u043b\u0430\u0433\u0438 <code>FLAG_HANDLES_MEDIA_BUTTONS | FLAG_HANDLES_TRANSPORT_CONTROLS<\/code> \u043a MediaSession, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 PlaybackState <code>ACTION_PLAY_PAUSE | ACTION_SKIP_TO_PREVIOUS | ACTION_SKIP_TO_NEXT<\/code> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c APK, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c: \u0432 CarPlay \u0441\u0435\u0441\u0441\u0438\u0438 MediaSession \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043a\u043d\u043e\u043f\u043a\u0438 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438.<\/p>\n<p>\u0410 \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0443 \u043a\u043d\u043e\u043f\u043a\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0432 \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432 \u0448\u0442\u0430\u0442\u043d\u043e\u0439 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u043b\u0435\u0435\u0440\u0430\u0445?<\/p>\n<p>\u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0440\u0443\u043b\u044f \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>NSInputService<\/code>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>AdapterAPI<\/code> &#8212; API \u043e\u0442 ECARX, \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438. <\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 CarPlay, \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u044f \u0441 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u043a\u043d\u043e\u043f\u043e\u043a \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0440\u0435\u043a\u043e\u0432. <br \/>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e <code>NSInputService<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0438 \u043f\u043e\u0434\u043b\u0435\u0436\u0438\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u041f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043a\u043d\u043e\u043f\u043a\u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430 &#8212; \u043e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412\u0441\u0435 \u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 Java \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u043e\u043f\u0430\u0442\u044c smali \u0432 \u0447\u0443\u0436\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430.<\/p>\n<p>\u0421\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432 Belgee X50 (\u0434\u0440\u0443\u0433\u0438\u0445 &#171;\u043f\u0440\u043e\u0448\u0438\u0442\u044b\u0445&#187; \u0430\u0432\u0442\u043e \u043d\u0435\u0442 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438), \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 opensource.<\/p>\n<p><a class=\"anchor\" name=\"navfix\" id=\"navfix\"><\/a><\/p>\n<h3>\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/h3>\n<p>\u041f\u043e\u0438\u0441\u043a\u0438 \u043f\u0440\u0438\u0447\u0438\u043d \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441 \u0434\u043e\u0440\u043e\u0436\u043d\u043e\u0439 \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439: \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442\u044b? USBGPS \u043f\u0435\u0440\u0435\u0434\u0430\u043b \u043d\u0435 \u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435? \u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u0447\u0442\u043e \u0442\u043e \u043d\u0435\u0434\u043e\u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0442 \u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e? \u041d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 API? <br \/>\u0421\u043f\u0443\u0441\u0442\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0435\u043b\u044e \u0438 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0435\u043b\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0432 \u0434\u043e\u0440\u043e\u0436\u043d\u043e\u0439 \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435: \u043e\u043d \u043c\u043e\u0433 \u0437\u0430\u043a\u0440\u044b\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044f \u043c\u043e\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. <br \/>\u0412 \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d logcat \u0438 \u043f\u043e\u0439\u043c\u0430\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f:<\/p>\n<pre><code># ... \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0432\u0435\u0449\u0430\u0435\u0442 \u0431\u0435\u0434\u044b ... 06-13 17:07:16.417   813   885 W InputDispatcher: channel '9563238 PopupWindow:fc814b0 (server)' ~ Consumer closed input channel or an error occurred.  events=0x9 06-13 17:07:16.417   813   885 E InputDispatcher: channel '9563238 PopupWindow:fc814b0 (server)' ~ Channel is unrecoverably broken and will be disposed! 06-13 17:07:16.450   813   885 W InputDispatcher: channel '22bb731 ru.dublgis.dgismobile\/ru.dublgis.dgismobile.GrymMobileActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9 06-13 17:07:16.450   813   885 E InputDispatcher: channel '22bb731 ru.dublgis.dgismobile\/ru.dublgis.dgismobile.GrymMobileActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 06-13 17:07:16.454   813  8092 D DisplayManagerService: Display listener for pid 7776 died. 06-13 17:07:16.453   413   413 I Zygote  : Process 7776 exited due to signal (9) 06-13 17:07:16.454   813  2207 I ActivityManager: Process ru.dublgis.dgismobile (pid 7776) has died: fore TOP  06-13 17:07:16.457   813   831 W libprocessgroup: kill(-7776, 9) failed: No such process 06-13 17:07:16.457   813   831 I libprocessgroup: Successfully killed process cgroup uid 10050 pid 7776 in 2ms 06-13 17:07:16.459  1125  1171 D carplayapp-CarPlayApplication: onProcessDied uid 10050 pid 7776 06-13 17:07:16.457   813  5159 I WindowManager: WIN DEATH: Window{9563238 u0 PopupWindow:fc814b0} 06-13 17:07:16.458   813  5159 W InputDispatcher: Attempted to unregister already unregistered input channel '9563238 PopupWindow:fc814b0 (server)' 06-13 17:07:16.458   813  2207 W ActivityManager: Scheduling restart of crashed service ru.dublgis.dgismobile\/.KeepaliveService in 1000ms 06-13 17:07:16.464   813  2207 W ActivityManager: Force removing ActivityRecord{831400 u0 ru.dublgis.dgismobile\/.GrymMobileActivity t1324}: app died, no saved state 06-13 17:07:16.469   813  6018 I WindowManager: WIN DEATH: Window{22bb731 u0 ru.dublgis.dgismobile\/ru.dublgis.dgismobile.GrymMobileActivity} 06-13 17:07:16.469   813  6018 W InputDispatcher: Attempted to unregister already unregistered input channel '22bb731 ru.dublgis.dgismobile\/ru.dublgis.dgismobile.GrymMobileActivity (server)' 06-13 17:07:16.479   451  1583 W SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{ba74a7e token=Token{fe7b439 ActivityRecord{831400 u0 ru.dublgis.dgismobile\/.GrymMobileActivity t1324}}}#0 # \u0434\u0430\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0443\u0441\u043a \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430 \u043e\u0442 ActivityManager \u0438 \u043f\u0440.<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a74\/544\/092\/a74544092bbefacd139a3ba6b35dcb07.png\" alt=\"\u042d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u0430 \u0433\u0434\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430?\" title=\"\u042d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u0430 \u0433\u0434\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430?\" width=\"1266\" height=\"665\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a74\/544\/092\/a74544092bbefacd139a3ba6b35dcb07.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a74\/544\/092\/a74544092bbefacd139a3ba6b35dcb07.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u0430 \u0433\u0434\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430?<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e <code>kill -9<\/code>. \u0418 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439?<br \/>\u0411\u044b\u043b\u043e \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442\u043e \u0440\u044f\u0434 \u0442\u0435\u043e\u0440\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438\u0441\u044c: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u0440\u0438\u0432\u043b\u0435\u043a \u0444\u0430\u0439\u043b <code>services.ecarx.jar<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b \u043d\u0435\u043a\u0438\u0439 &#171;\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432&#187; \u0441 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430 <code>cleanApp<\/code>:<\/p>\n<details class=\"spoiler\">\n<summary>private void m37a(int i, int i2)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>private void m37a(int i, int i2) {     if (this.f9s == null) {         this.f9s = IEcarxAppManager.Stub.asInterface(ServiceManager.checkService(\"ecarxappservice\"));     }     if (this.f9s == null) {         return;     }     try {         for (EcarxProcessInfo ecarxProcessInfo : m31a(this.f9s.getAllAppProcessInfo(), i, i2)) {             if (ecarxProcessInfo != null) {                 this.f9s.cleanApp(ecarxProcessInfo);             }         }     } catch (RemoteException e) {     }     m29b(); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0410 \u0432 <code>services.jar<\/code> \u0441\u0430\u043c <code>ecarxappservice<\/code> \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c cleanApp.<\/p>\n<details class=\"spoiler\">\n<summary>public void cleanApp(EcarxProcessInfo processInfo)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>public void cleanApp(EcarxProcessInfo processInfo) {     ProcessRecord proc;     if (processInfo == null || !checkCaller() || !this.mSystemReady || !this.mPolicyManager.isFeatureOn()) {         return;     }     synchronized (this.mAms) {         try {             ActivityManagerService.boostPriorityForLockedSection();             synchronized (this.mAms.mPidsSelfLocked) {                 proc = this.mAms.mPidsSelfLocked.get(processInfo.pid);             }             if (proc != null &amp;&amp; processInfo.processName.equals(proc.processName) &amp;&amp; proc.setProcState &gt; 2) {                 this.mAms.removeProcessLocked(proc, false, false, \"ecarx clean\");                 this.mPolicyManager.addCleanApp(processInfo);             }         } catch (Throwable th) {             ActivityManagerService.resetPriorityAfterLockedSection();             throw th;         }     }     ActivityManagerService.resetPriorityAfterLockedSection(); } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0411\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u044b\u0441\u043a\u0430\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0436\u0430\u043b \u043d\u0435\u043f\u043e\u0434\u0430\u043b\u0435\u043a\u0443 \u0432 <code>\/system\/etc\/app_ecarx_policy.xml<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u0441\u0435\u043a\u0446\u0438\u044e <code>whitelist<\/code> \u043d\u043e\u0432\u044b\u0435 \u0430\u0439\u0442\u0435\u043c\u044b, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u043c\u0451\u043d \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<pre><code>&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt; &lt;app-policys version=\"1\"&gt; ... \u0443\u0431\u0440\u0430\u043b \u0425 \u0441\u0442\u0440\u043e\u043a \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e     &lt;whitelist&gt;         &lt;item package=\"ecarx.launcher3\" \/&gt;         &lt;item package=\"ecarx.xsf.mediacenter\" \/&gt;     &lt;\/whitelist&gt; ... \u0443\u0431\u0440\u0430\u043b \u0425 \u0441\u0442\u0440\u043e\u043a \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e     &lt;prop&gt;         &lt;item name=\"ecarx.appservice.on\" value=\"0\" \/&gt;         &lt;item name=\"ecarx.heaplimit.num\" value=\"1\" \/&gt;         &lt;item name=\"ecarx.cachelimit.num\" value=\"2\" \/&gt;         &lt;item name=\"ecarx.freelimit.num\" value=\"1\" \/&gt;     &lt;\/prop&gt; ... \u0443\u0431\u0440\u0430\u043b \u0435\u0449\u0435 \u0425 \u0441\u0442\u0440\u043e\u043a \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e &lt;\/app-policys&gt;<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0443\u0448\u043b\u0430, \u0430 \u043f\u043e\u0437\u0436\u0435 \u044f \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0441\u044f \u043a \u043a\u043e\u0434\u0443: \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>this.mAms.removeProcessLocked(proc, false, false, \"ecarx clean\");<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0432\u044b\u0437\u0432\u0430\u043b\u043e \u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 logcat, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438. <br \/>\u0417\u0430\u0442\u0435\u043c \u044f \u043d\u0430\u0448\u0435\u043b <code>ecarx.appservice.on<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0 \u0438 <code>!this.mPolicyManager.isFeatureOn()<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0441\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0434\u0430\u043c\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043b\u044e\u0434\u044c\u043c\u0438, \u0442\u0430\u043c \u0442\u043e\u0436\u0435 0, \u0432\u0438\u0434\u0438\u043c\u043e \u043e\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0432\u0437\u044f\u043b \u043f\u0430\u0443\u0437\u0443 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430 \u0440\u0430\u0437\u0434\u0443\u043c\u044c\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443. \u041e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0442\u043e-\u0442\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u043e\u043d \u0441\u0430\u043c \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442?<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c 2\u0413\u0418\u0421 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u043b\u043e\u0433\u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u0441\u043a\u0430\u0436\u0443\u0442, \u043d\u043e \u043e\u043d\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u0445\u0443\u0434\u0448\u0438\u0435 \u043e\u043f\u0430\u0441\u0435\u043d\u0438\u044f &#8212; \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0432 \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u0435, \u0432 \u043b\u043e\u0433\u0430\u0445 \u0447\u0438\u0441\u0442\u043e. <br \/>\u0414\u043b\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0441\u043a\u0430\u0447\u0430\u043b \u0441 \u0441\u0430\u0439\u0442\u0430 2\u0413\u0418\u0421 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 APK, \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u0432 smali \u0432\u0441\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f <code>Thread.setDefaultUncaughtExceptionHandler<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0448\u0430\u043b\u0438 \u0431\u044b stacktrace \u0432 \u0441\u0435\u0431\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48b\/d91\/a3f\/48bd91a3f2ba97b8f710950e752c4b05.png\" alt=\"\u0414\u0438\u0430\u043b\u043e\u0433 \u0441 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c 2\u0413\u0418\u0421 \u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0435\" title=\"\u0414\u0438\u0430\u043b\u043e\u0433 \u0441 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c 2\u0413\u0418\u0421 \u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0435\" width=\"551\" height=\"353\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/48b\/d91\/a3f\/48bd91a3f2ba97b8f710950e752c4b05.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48b\/d91\/a3f\/48bd91a3f2ba97b8f710950e752c4b05.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0438\u0430\u043b\u043e\u0433 \u0441 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c 2\u0413\u0418\u0421 \u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043d \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e OOM\/<a href=\"https:\/\/github.com\/aospa-staging\/android_system_memory_lmkd\" rel=\"noopener noreferrer nofollow\">LMKd<\/a>, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 2\u0413\u0418\u0421? <br \/>\u0414\u0430 \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043d\u043e\u0433\u043e, \u0432\u0440\u044f\u0434 \u043b\u0438 \u043e\u043d\u0430 \u0442\u0435\u0447\u0435\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 (\u0445\u043e\u0442\u044f \u0438 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438) \u0438 \u0432 2\u0413\u0418\u0421, \u0434\u0430 \u0438 OOM \u044f\u0432\u043d\u043e \u0441\u043f\u0430\u043c\u0438\u043b \u0431\u044b \u0432 logcat. <br \/>\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0441\u0438\u043c\u043f\u0442\u043e\u043c\u0430\u043c\u0438 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043c\u0443\u0442\u044b \u0432\u043d\u043e\u0441\u0438\u0442 \u0432 \u044d\u0442\u0443 \u0442\u0435\u043e\u0440\u0438\u044e: \u043e\u043d\u0438 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0430\u043f\u043a\u0435 \u0443 \u0442\u0430\u043a\u0441\u0438\u0441\u0442\u043e\u0432, \u0430 \u0443 \u043d\u0430\u0441 \u0437\u0434\u0435\u0441\u044c \u0446\u0435\u043b\u044b\u0445 4 \u0413\u0431 \u043f\u0430\u043c\u044f\u0442\u0438.<br \/>\u0412 Android \u0437\u0430\u043a\u0440\u044b\u0442\u044c Foreground \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043b\u0430\u043d\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 &#8212; \u044d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u044f\u044f \u043c\u0435\u0440\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043c \u0431\u044b \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0438 \u0431\u044b \u0432\u0441\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440. <\/p>\n<p>\u0417\u0430\u043f\u0438\u043b\u0438\u043b \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 logcat \u043a\u0430\u0436\u0434\u044b\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441 \u0433\u0440\u0435\u043f\u0430\u043b\u043a\u043e\u0439 <code>ps -A<\/code>, <code>activityManager.getMemoryInfo(memoryInfo)<\/code> \u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e RSS, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u044c logcat \u0438 \u043f\u043e\u0435\u0445\u0430\u043b \u043a\u0430\u0442\u0430\u0442\u044c\u0441\u044f. <br \/>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435\u0443\u0442\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435: \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0435\u0449\u0435 1.1 \u0413\u0431, \u0444\u043b\u0430\u0433 <code>ActivityManager.MemoryInfo.lowMemory<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u041e\u041e\u041c \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438. <br \/>\u041e\u043f\u044f\u0442\u044c \u043f\u0440\u043e\u043c\u0430\u0445.<\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 (\u043d\u043e\u0447\u044c\u044e) \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0449\u0435 Linux-\u043c\u0438\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c <code>dmesg<\/code>, \u043e\u043d\u0438 \u0436\u0435 \u043b\u043e\u0433\u0438 \u044f\u0434\u0440\u0430. \u041e\u0437\u0430\u0431\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043f\u043e\u0448\u0435\u043b \u0432 \u0441\u0443\u0431\u0431\u043e\u0442\u0443 \u0441 \u0443\u0442\u0440\u0430 \u043a\u0430\u0442\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u043e\u0433\u0438. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0442\u0430\u043c \u043d\u0430\u0448\u043b\u0430\u0441\u044c.<\/p>\n<pre><code># dmesg | grep kill [  960.562231] -(3)[217:ecarx_mem_check]lowmemorykiller: process lgis.dgismobile , oom_adj:-15, rss memory:241377, memory exceed ecarx_mem_threshold:204800, kill it !!!!!!!<\/code><\/pre>\n<p>\u0421 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0448\u0435\u043b \u043f\u043e PID 217 \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043a\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0438 <s>\u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442<\/s>, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u043b\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0434\u043e\u043b\u0433\u043e.<\/p>\n<pre><code># ps -A | grep 217 root           217     2       0      0 msleep              0 D [ecarx_mem_check]  \/\/ \u043d\u0430\u0435\u043b\u0441\u044f \u0438 \u0441\u043f\u0438\u0442 \u043e\u043d \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u0430?  # cat \/proc\/217\/stack [&lt;0000000000000000&gt;] __switch_to+0xc0\/0xcc [&lt;0000000000000000&gt;] msleep+0x28\/0x38 [&lt;0000000000000000&gt;] ecarx_memory_check+0x60\/0x230 [&lt;0000000000000000&gt;] kthread+0x118\/0x138 [&lt;0000000000000000&gt;] ret_from_fork+0x10\/0x30 [&lt;0000000000000000&gt;] 0xffffffffffffffff<\/code><\/pre>\n<p>\u041f\u043e\u0433\u0440\u0435\u043f\u0430\u043b \u043f\u043e <code>\/system<\/code> \u0440\u0430\u0437\u0434\u0435\u043b\u0443 \u043a\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 &#171;ecarx_memory_check&#187;\/&#187;ecarx_mem_check&#187;\/&#187;ecarx_mem_threshold&#187;, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u043e <code>\/sys<\/code> \u0438 <code>\/proc<\/code> \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0433\u0434\u0435 \u0435\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c, \u043d\u043e \u0431\u0435\u0437\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043d\u043e. <\/p>\n<p>\u0421 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0441\u043a\u043e\u0431\u043e\u0447\u043a\u0438 <code>[]<\/code> \u0432 \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0438 <code>kthread<\/code> \u0432 \u0441\u0442\u0435\u043a\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e: \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0435\u0439 \u0446\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430 \u041e\u0421, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0448\u043b\u043e. \u0415\u0433\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 <code>oom_adj<\/code>. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0432 -17, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 foreground \u043e\u043d -15. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e, \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u0431\u044b\u043b \u0441 \u0442\u0435\u043c \u0436\u0435 \u0443\u0441\u043f\u0435\u0445\u043e\u043c \u0437\u0430\u043a\u0440\u044b\u0442 \u0441 oom_adj -17. <br \/>\u0414\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u044b \u043f\u043e\u043c\u043e\u0433\u043b\u043e, \u0442\u043e oom_adj \u0432 Android \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043b\u0430\u043d\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0432\u0435\u0440\u043d\u0443\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0435\u043a\u0443\u043d\u0434 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e. \u0414\u0435\u043b\u0430\u0442\u044c \u0433\u043e\u043d\u043a\u0443 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0437\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 oom_adj \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0441\u0443\u0440\u043e\u0432\u044b\u043c \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u042f \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0434\u0440\u0443\u0436\u0438\u0442 \u0441 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u043e\u043c, \u043f\u0440\u0438\u0432\u044b\u043a\u0448\u0438\u0439 \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432 \u0434\u0432\u0430 \u043a\u043b\u0438\u043a\u0430 \u043a\u043e\u0434 \u0432 JADX \u0441 \u0431\u0435\u0437\u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e boot.img \u0438\u0437 \u0434\u0430\u043c\u043f\u0430, \u0433\u0440\u0435\u043f\u0430\u044e \u0442\u0430\u043c, \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443: \u0432\u0437\u0433\u043b\u044f\u0434 \u0437\u0430\u0442\u0443\u043c\u0430\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u044f \u0437\u0430\u0431\u044b\u0432\u0430\u044e \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>file<\/code>, \u0442.\u0435. \u0447\u0442\u043e \u0441\u0430\u043c kernel \u0444\u0430\u0439\u043b \u044d\u0442\u043e LZ4 \u0430\u0440\u0445\u0438\u0432.<\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u0433\u0434\u0435-\u0442\u043e \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e IDA Pro, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u043e\u0442\u0432\u0435\u0447\u0430\u044e \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0441\u0441. \u041d\u0430\u0445\u043e\u0436\u0443 \u0431\u043b\u043e\u043a\u0438 asm \u043a\u043e\u0434\u0430, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 Strings, \u043f\u0435\u0440\u0435\u0445\u043e\u0436\u0443, \u043d\u0430\u0436\u0438\u043c\u0430\u044e F5 \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435, \u0447\u0442\u043e Hex-Rays \u043c\u043d\u0435 \u0432\u0441\u0451 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u0430 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u043e\u0434\u0438\u043d\u043e\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u043e.<\/p>\n<p>\u0414\u0443\u043c\u0430\u044e \u043a\u0430\u043a \u0442\u0430\u043a, \u0432\u0435\u0434\u044c \u0432\u043e\u0442 \u043e\u043d \u043a\u043e\u0434, \u0432\u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 asm, \u043a\u0430\u043a \u043c\u043d\u0435 \u044d\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 Hex-Rays? \u0421\u043f\u0443\u0441\u0442\u044f \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u0434\u043e \u043c\u0435\u043d\u044f \u0434\u043e\u0448\u043b\u043e, \u0447\u0442\u043e Hex-Rays \u0432\u0438\u0434\u0438\u043c\u043e \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u043f\u0440\u044f\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043a \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043a\u043e\u0434 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u043c. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u043e \u044f \u0438 \u0442\u0430\u043a \u043d\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u041f\u043e\u0448\u0435\u043b \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c asm \u043a\u043e\u0434 \u0442\u0430\u043a, \u043a\u0430\u043a \u0435\u0441\u0442\u044c. <br \/>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>ecarx_mem_threshold<\/code> \u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u043e\u043d\u0430 \u0442\u0430\u043c \u043f\u0440\u0438\u0431\u0438\u0442\u0430 \u043d\u0430 <code>0x32000<\/code>, \u0447\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 \u043b\u043e\u0433\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/854\/d5a\/978\/854d5a9787377dfc8176623d73c614c5.png\" alt=\"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u043e \u043f\u0443\u0442\u0438, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 DeepSeek, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043e\u0444\u0444\u0441\u0435\u0442\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\" title=\"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u043e \u043f\u0443\u0442\u0438, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 DeepSeek, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043e\u0444\u0444\u0441\u0435\u0442\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\" width=\"1161\" height=\"941\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/854\/d5a\/978\/854d5a9787377dfc8176623d73c614c5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/854\/d5a\/978\/854d5a9787377dfc8176623d73c614c5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u043e \u043f\u0443\u0442\u0438, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 DeepSeek, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043e\u0444\u0444\u0441\u0435\u0442\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u0434\u0443\u043c\u0430\u043b \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0432\u044b\u043f\u0438\u043b\u0438\u0442\u044c \u0438\u0437 \u044f\u0434\u0440\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0423\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0446\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 <code>CONFIG_MODULE_SIG<\/code>, \u0438 \u0447\u0442\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 <code>nop<\/code>-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0440\u0435\u0448\u0438\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043a\u043e\u0440\u043d\u044e.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u043b\u0430 \u0432\u0435\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0446\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecc\/cc0\/846\/ecccc0846b9f974ee8e935767f8ace7f.png\" alt=\"\u0426\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 ecarx_memory_check\" title=\"\u0426\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 ecarx_memory_check\" width=\"1831\" height=\"902\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ecc\/cc0\/846\/ecccc0846b9f974ee8e935767f8ace7f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecc\/cc0\/846\/ecccc0846b9f974ee8e935767f8ace7f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0426\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 ecarx_memory_check<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0432 \u0441\u0432\u043e\u0438\u043c \u0433\u043b\u0430\u0437\u0430\u043c, \u0447\u0442\u043e <code>task-&gt;comm<\/code>, \u043e\u043d \u0436\u0435 <code>proc_name<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>recovery<\/code>, \u044f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u0437 <em>\u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c<\/em> \u0432 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0446\u0435\u043b\u044c: <strong>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <\/strong><code><strong>recovery<\/strong><\/code><strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e<\/strong> \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u041d\u0435 \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f, \u044f \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0418\u0418 \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0421\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u043e\u0434 arm64.<\/p>\n<pre><code>#include &lt;unistd.h&gt; #include &lt;stdlib.h&gt;  int main() {     sleep(100);     return 0; }<\/code><\/pre>\n<pre><code>aarch64-linux-gnu-gcc -static -o wait_and_exit wait_and_exit.c<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432 <code>recovery<\/code>, \u0437\u0430\u043a\u0438\u043d\u0443\u043b \u0432 <code>\/dev<\/code>, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b <code>chmod +x<\/code>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0447\u0435\u0440\u0435\u0437 \u0448\u0435\u043b\u043b&#8230; \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 dmesg \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u043e\u0441\u044c.<\/p>\n<pre><code># dmesg | grep -e lowmemory -e killer -e ecarx_mem # dmesg | grep -e lowmemory -e killer -e ecarx_mem [  240.509386] (0)[216:ecarx_mem_check]lowmemorykiller: process recovery, is recovery [  240.509393] lowmemorykiller: recovery mode, exit [  240.509404] (0)[216:ecarx_mem_check]lowmemorykiller: ecarx_memory_check end<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043b\u0438 \u0432 \u043f\u0440\u043e\u0431\u043a\u0435 (\u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0431\u044b\u043b \u0437\u0430 \u0440\u0443\u043b\u0435\u043c \u043d\u0435 \u044f), \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0430 \u0434\u043e\u0440\u043e\u0433\u0443 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0447\u0430\u0441, \u043d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u043f\u043e\u0431\u0435\u0434\u0430. <\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u043e \u0437\u0430 <em>\u043c\u0430\u043b\u044b\u043c<\/em>: \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0410\u041f\u041a, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u0432\u043f\u0438\u043b\u0438\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0435\u0441\u0442\u044c, \u0438 \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043d\u0435\u0442 \u0438\u043b\u0438 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f. <br \/>\u0412 \u044d\u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043d\u0430\u0448\u0435\u043b, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <code>prctl(PR_SET_NAME, \"recovery\")<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 <code>task-&gt;comm<\/code>, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d. <br \/>\u0418\u043c\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0435.<\/p>\n<blockquote>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0440\u0435\u0448) <\/p>\n<\/blockquote>\n<p><em>\u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043b \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u0435\u043b\u0435\u0439 Coolray \u0420\u0435\u0441\u0442\u0430\u0439\u043b\u0438\u043d\u0433, \u0440\u0430\u0441\u043a\u043e\u043f\u0430\u0432\u0448\u0438\u0439 &#171;\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439&#187; \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0442 \u0434\u0430\u0432\u043d\u0438\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/em><\/p>\n<p>\u042d\u0442\u043e <a href=\"https:\/\/github.com\/mark99i\/GeelyNavFix\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442<\/a> \u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b Belgee X50 \/ Coolray Rest \/ Tugella Rest, \u043c\u0443\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0436\u0438\u0437\u043d\u0438.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <\/h3>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e \u0442\u0435\u0445, \u043a\u0442\u043e \u0434\u043e\u0448\u0435\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u0438 \u043c\u043d\u0435, \u043a\u043e\u0433\u0434\u0430 \u044f \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c: \u0437\u0430\u0447\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u043e\u0439? \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0435 \u0441\u043c\u043e\u0447\u044c \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u0441\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u043b\u043e\u0447\u0438\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b ROOT-\u043f\u0440\u0430\u0432\u0430, \u0442\u043e \u0441 \u043a\u0430\u043a\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 &#171;\u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0438&#187; \u0432 \u0432\u0438\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430 \u0432 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445?<\/p>\n<p>Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0435 \u0447\u0438\u0442\u0430\u043b\u0438 \u0433\u0430\u0439\u0434 \u043b\u0430\u0439\u043d\u044b, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: <code>Context<\/code> \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c <code>onDestroy<\/code>, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e TargetAPI \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<br \/>\u0412 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432\u0441\u0451 \u0440\u043e\u0432\u043d\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442: \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0435\u0431\u044f <code>startForegroundService<\/code> \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c (\u043d\u0443, \u0430 \u0447\u0442\u043e, \u043a\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0438\u0442, \u0440\u0430\u0437 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u0442, \u0432\u0435\u0440\u043d\u043e?), \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0441\u0432\u043e\u0439 <code>Context<\/code> \u0438\u043b\u0438 \u0441\u0430\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 <code>Service<\/code> \u0432 <code>public static<\/code> \u043f\u043e\u043b\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u0435\u0433\u043e \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>\u0410 \u0432\u0441\u0451 \u043f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0440\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u0434\u043e\u043b\u0433\u0438\u0439: \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0413\u0423 \u043e\u0431\u0435\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0435\u0437\u0434\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u044b\u0439 \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0435\u0441\u0442\u044c \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0436\u0438\u0442\u044c \u0441 \u044d\u0442\u0438\u043c.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/930138\/\"> https:\/\/habr.com\/ru\/articles\/930138\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0438\u0442\u0430\u044f \u0425\u0430\u0431\u0440, \u044f \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0441\u0442\u0430\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0438\u0440 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2014 \u0413\u0423) \u043d\u0430 \u0431\u0430\u0437\u0435 Android, \u0445\u043e\u0442\u044f \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0442\u0430\u043c \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043e\u0434\u043d\u0438 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0430\u0432\u0442\u043e \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0440\u044b\u043d\u043a\u0435: Geely Coolray \u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e Geely Tugella. <br \/>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0441 \u0432\u044b\u0440\u0435\u0437\u043a\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u0438\u0437 JADX \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p>\u041f\u0430\u0446\u0438\u0435\u043d\u0442: Belgee X50 2024 \u0433\u043e\u0434\u0430, \u043e\u043d \u0436\u0435 Geely Coolray \u0434\u043e\u0440\u0435\u0441\u0442\u0430\u0439\u043b\u0438\u043d\u0433, \u043d\u043e \u0441 \u043d\u043e\u0432\u044b\u043c \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u043c \u0431\u0435\u043b\u043e\/\u0441\u0438\u043d\u0435\u043c UI.<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/h2>\n<p>\u0416\u0435\u043b\u0435\u0437\u043a\u0438 \u0438 \u0441\u043e\u0444\u0442 \u0434\u043b\u044f Geely \u0438\u0437\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f ECARX.<\/p>\n<p>\u0416\u0435\u043b\u0435\u0437\u043e \u043b\u0435\u0433\u043a\u043e <a href=\"https:\/\/4pda.to\/forum\/index.php?act=findpost&amp;pid=132608145&amp;anchor=Spoil-132608145-2\" rel=\"noopener noreferrer nofollow\">\u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0430\u043c\u0438 \u0438\u0437 AIDA64<\/a>: \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 ECARX E02, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f Mediatek Helio P60 (MT6771), 4 \u0413\u0431 RAM, 64 Gb Flash, \u0434\u0432\u0443\u0445\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u044b\u0439 WiFi \u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0433\u0434\u0435-\u0442\u043e \u0432 \u0442\u043e\u0440\u043f\u0435\u0434\u0435 \u0438 \u044d\u043a\u0440\u0430\u043d 1920\u0445720.<\/p>\n<p>\u0414\u043e\u043f\u0438\u043b\u0435\u043d\u043d\u044b\u0439 Android 9 API 28, <a href=\"https:\/\/4pda.to\/forum\/index.php?act=findpost&amp;pid=132608145&amp;anchor=Spoil-132608145-7\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>, HAL \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0430\u0432\u0442\u043e. <br \/>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d. <\/p>\n<p>\u041d\u0435 \u0433\u0443\u0441\u0442\u043e \u0438 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043d\u043e \u043d\u0430 \u0432\u0441\u0435 \u0430\u0432\u0442\u043e-\u0445\u043e\u0442\u0435\u043b\u043a\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. <\/p>\n<h2>\u0410 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c?<\/h2>\n<p>\u0418\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u041f\u041e \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <br \/>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 CAN-\u0448\u0438\u043d\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0431\u043b\u043e\u043a \u0413\u0423 \u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0430\u0432\u0442\u043e &#171;\u043d\u0430 \u0441\u0442\u043e\u043b\u0435&#187;, \u043f\u0430\u0442\u0447\u0430\u0442 <code>boot.img<\/code> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Magisk, \u043f\u0440\u0430\u0432\u044f\u0442 <code>PackageManager<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f: \u0441\u0442\u0430\u0432\u044f\u0442 usbgps, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u0435\u0433\u043e \u0432 fusedlocation, \u0438 \u0442.\u0434. <\/p>\n<blockquote>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044b \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u0435\u043b\u0430 \u0441 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0436\u0435\u043b\u0435\u0437\u043a\u0430\u043c\u0438, \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0434\u0435\u043d\u044c\u0433\u0438.<br \/>\u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043e\u043d\u0438 \u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0438\u0432\u0435\u0437\u0451\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0440\u044b\u043d\u043a\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0443.<\/p>\n<\/blockquote>\n<p>\u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430 Belgee X50 \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/lunaris-firmware.ru\/ru\/%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8\/belgee-x50\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f\u0445, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432<\/a>, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u0440\u044f\u0434 \u043d\u044e\u0430\u043d\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0423 \u0432\u0430\u0441 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 2 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435 \u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430:<\/p>\n<ul>\n<li>\n<p>\u041e\u0434\u043d\u0430 \u043f\u0443\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043b\u0435\u0439\/\u043f\u0430\u0443\u0437\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u043b\u0435\u0435\u0440\u0430\u0445, \u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u0438\u043b\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u043c\u0443\u0437\u044b\u043a\u0430 \u0438\u0437 \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u043b\u043a\u0438\u0439: 160 DPI \u043f\u0440\u0438 9.5&#8243; 1920\u0445720<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438: \u0442\u0430\u043c \u0434\u0430\u0436\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 =)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, PowerAMP) \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u042f\u043d\u0434\u0435\u043a\u0441.\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440 \u0438 2\u0413\u0418\u0421)<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e ADB, \u043d\u043e \u0438 \u0432 \u044d\u0442\u043e\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0432\u043e\u0445: \u043c\u0435\u043d\u044e\u0448\u043a\u0430 &#171;\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432&#187; \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u0418\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0443 \u043d\u0430\u0441 \u0436\u0435 \u0435\u0441\u0442\u044c ROOT-\u043f\u0440\u0430\u0432\u0430: \u0441\u0442\u0430\u0432\u0438\u043c <code>com.kva.adboverwifi<\/code>, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>service.adb.tcp.port<\/code> \u0432 <code>5555<\/code> \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ADBd. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c <code>adb connect &lt;ip&gt;<\/code>, \u043d\u043e <code>adb devices<\/code> \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e <code>unauthorized<\/code>. \u0414\u0438\u0430\u043b\u043e\u0433 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043a\u043b\u0430\u0434\u0435\u043c \u043a\u043b\u044e\u0447\u0438\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 <code>\/data\/misc\/adb\/adb_keys<\/code>, \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 ADB.<\/p>\n<p>\u0417\u0430\u0440\u044f\u0436\u0430\u0435\u043c BatchAPKTool, \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u043e ADB <code>\/system<\/code> \u0440\u0430\u0437\u0434\u0435\u043b \u0438\u043b\u0438 \u0440\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0434\u0430\u043c\u043f\u043e\u0432, \u0434\u0435\u043e\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c, \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043b\u0435\u0433\u043a\u0438\u0445 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u041e_\u043e.<\/p>\n<ol>\n<li>\n<p><a href=\"#recent_apps\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#poweramp\" rel=\"noopener noreferrer nofollow\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 PowerAMP \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#dpi\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u043b\u043a\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#buttons\" rel=\"noopener noreferrer nofollow\">\u041a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u0443\u043b\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#navfix\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"recent_apps\" id=\"recent_apps\"><\/a><\/p>\n<h4>\u041c\u0435\u043d\u044e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043b\u0438\u0448\u043d\u0438\u043c\u0438 \u0410\u043a\u0442\u0438\u0432\u0438\u0442\u0438<\/h4>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043b\u0435\u0433\u043a\u043e\u0433\u043e. <br \/>\u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043b\u0430\u0443\u043d\u0447\u0435\u0440 <code>NSLauncher.apk<\/code>, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u043c\u0430\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f <code>XCHvac.apk<\/code>, \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0441\u043c\u0435\u043d\u044b \u0442\u0435\u043c\u044b \u0442\u0435\u043c\u043d\u0430\u044f\/\u0431\u0435\u043b\u0430\u044f (\u0437\u0430\u0447\u0435\u043c \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e?) <code>ECarXPowerManagerService.apk<\/code>. <\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;activity android:configChanges=\"uiMode\" android:exported=\"true\" android:fitsSystemWindows=\"true\" android:launchMode=\"singleTask\" android:name=\"ecarx.hvac.app.MainActivity\"&gt; &lt;intent-filter&gt; &lt;action android:name=\"android.intent.action.MAIN\"\/&gt; &lt;action android:name=\"android.intent.action.HVAC_WIDGET\"\/&gt; &lt;action android:name=\"android.intent.action.PSD_HVAC_WIDGET\"\/&gt; &lt;category android:name=\"android.intent.category.LAUNCHER\"\/&gt; &lt;\/intent-filter&gt; &lt;\/activity&gt;<\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u044b\u043c \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c (\u0438\u043b\u0438 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432) \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>android:excludeFromRecents=\"true\"<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>\u0418\u0434\u0435\u043c \u043a \u0430\u0432\u0442\u043e, \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 APK \u0442\u0443\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u043b\u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f, \u0433\u043e\u0442\u043e\u0432\u043e. <br \/>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0435 \u0436\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"poweramp\" id=\"poweramp\"><\/a><\/p>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 PowerAMP \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/h4>\n<p>\u0426\u0435\u043f\u043b\u044f\u0435\u043c ADB, \u0434\u0435\u043b\u0430\u0435\u043c <code>adb logcat<\/code>, \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c PowerAMP.<br \/>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u0430 \u0432 logcat \u0437\u0430\u0432\u0435\u0449\u0430\u043d\u0438\u0435 \u043e\u0442 <code>system_server<\/code>:<\/p>\n<pre><code>07-01 01:49:36.041 15732 15749 D avm_service_app: ActivityWatcher.java(113):appCrashed:  appCrashed proc:null pid:11655 m:java.util.NoSuchElementException m2:java.util.NoSuchElementException time:1751305776039 st:java.util.NoSuchElementException 07-01 01:49:36.041 15732 15749 D avm_service_app:       at android.util.MapCollections$ArrayIterator.next(MapCollections.java:55) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.adjustCpuAbisForSharedUserLPw(PackageManagerService.java:12267) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageOnlyLI(PackageManagerService.java:11005) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10448) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.scanPackageTracedLI(PackageManagerService.java:10229) 07-01 01:49:36.041 15732 15749 D avm_service_app:       at com.android.server.pm.PackageManagerService.installNewPackageLIF(PackageManagerService.java:16792) \/\/ \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u043b \u0447\u0442\u043e\u0431 \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u043a\u043e\u0432 \u0431\u044b\u043b\u043e 07-01 01:49:36.041 11655 11688 I Process : Sending signal. PID: 11655 SIG: 9<\/code><\/pre>\n<p>\u041d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c JADX \u043d\u0430 <code>services.jar<\/code>, \u0438\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>adjustCpuAbisForSharedUserLPw<\/code>: <\/p>\n<details class=\"spoiler\">\n<summary>private static List&lt;String&gt; adjustCpuAbisForSharedUserLPw(Set&lt;PackageSetting&gt; packagesForUser, PackageParser.Package scannedPackage)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">private static List&lt;String&gt; adjustCpuAbisForSharedUserLPw(Set&lt;PackageSetting&gt; packagesForUser, PackageParser.Package scannedPackage) {     String adjustedAbi;     List&lt;String&gt; changedAbiCodePath = null;     String requiredInstructionSet = null;     if (scannedPackage != null &amp;&amp; scannedPackage.applicationInfo.primaryCpuAbi != null) {         requiredInstructionSet = VMRuntime.getInstructionSet(scannedPackage.applicationInfo.primaryCpuAbi);     }     PackageSetting requirer = null;      \/\/ \u0442\u0443\u0442 \u0431\u044b\u043b for, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 AOSP      if (requiredInstructionSet != null) {         if (requirer != null) {             adjustedAbi = requirer.primaryCpuAbiString;             if (scannedPackage != null) {                 scannedPackage.applicationInfo.primaryCpuAbi = adjustedAbi;             }         } else {             adjustedAbi = scannedPackage.applicationInfo.primaryCpuAbi;         }         if (packagesForUser.iterator().next().getSharedUserId() == 1000) {             adjustedAbi = \"arm64-v8a\";         }          \/\/ \u0442\u0443\u0442 \u0431\u044b\u043b for, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 AOSP      }     return changedAbiCodePath; } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0437\u0430\u0447\u0435\u043c \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 21 \u0441\u0442\u0440\u043e\u043a\u0435: \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439? \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 PackageManager? \u041f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u0447\u0442\u043e <code>packagesForUser<\/code> \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c Set&#8217;\u043e\u043c&#8230;<\/p>\n<blockquote>\n<p>\u0437\u0430\u0447\u0435\u043c \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e?<\/p>\n<\/blockquote>\n<p>\u041b\u0435\u0437\u0435\u043c \u0432 smali \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. <\/p>\n<p>\u0421\u043e\u043c\u043d\u0435\u0432\u0430\u044f\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 AOSP Android 9 API 28, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435. \u041d\u0435 \u043d\u0430\u0448\u0435\u043b &#8212; \u0432\u0438\u0434\u0438\u043c\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u0435\u0439\u0441 \u0445\u043e\u0442\u044c \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u0438\u0439, \u043d\u043e \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0430\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 system \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 FlashTool &#8212; \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0443 \u043d\u0430\u0441 \u0413\u0423 \u0430\u0432\u0442\u043e \u0431\u0435\u0437 TWRP, \u0434\u0430 \u0438 \u0434\u043e &#171;\u043a\u043d\u043e\u043f\u043e\u043a&#187; \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043b\u0435\u0437\u0442\u044c \u0437\u0430 \u0431\u0430\u0440\u0434\u0430\u0447\u043e\u043a, \u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c. <br \/>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a (\u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0435\u043c\u0443), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>services.jar<\/code> \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0433\u0434\u0435 \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0443\u0436\u0435 10 \u043c\u0438\u043d\u0443\u0442 &#8212; \u043f\u0440\u043e\u043a\u0430\u0442\u0438\u043b\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430: \u0441 PowerAMP \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"dpi\" id=\"dpi\"><\/a><\/p>\n<h3>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u043b\u043a\u0438\u0439<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435 \u043f\u0430\u0440\u0438\u043b\u043e, \u043d\u043e \u043f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c (\u0441) \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>wm density 240<\/code><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043b\u0438\u043c\u0430\u0442, \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0438 SystemUI \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 (layout) \u043a \u0448\u0442\u0430\u0442\u043d\u043e\u043c\u0443 DPI: \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0443 \u0432\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0430, \u043d\u0438 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u0439\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u043e\u0439: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c Magisk, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/LSPosed\/LSPosed\" rel=\"noopener noreferrer nofollow\">LSPosed<\/a> (\u043e\u043d \u0436\u0435 <a href=\"https:\/\/trashbox.ru\/topics\/96897\/xposed-framework-zachem-eto-nuzhno-i-s-chem-eto-edyat\" rel=\"noopener noreferrer nofollow\">Xposed<\/a> \u043d\u0430 \u0431\u0430\u0437\u0435 Zygisk), \u0430 \u0442\u0430\u043c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/BlueCat300\/XposedAppSettings\" rel=\"noopener noreferrer nofollow\">App Settings<\/a> &#8212; \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. <br \/>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f DPI 240 \u0434\u043b\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440\u0430 \/ \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0421 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445: \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f; \u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 LSPosed \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c LSPosed Manager, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044e App Settings \u043d\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435, \u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043f\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e. <br \/>\u0410 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u0442: \u043d\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445, \u043d\u0438 \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0438 \u043a\u0430\u043a \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445. <br \/>\u0422\u043e\u0447\u043d\u0435\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0430\u043c\u0430 \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0430-\u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u043e \u043e\u043d\u0430 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <code>CarSettings.apk<\/code> &#8212;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-468262","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=468262"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468262\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=468262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=468262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=468262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}