{"id":483788,"date":"2026-06-16T08:12:14","date_gmt":"2026-06-16T08:12:14","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=483788"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=483788","title":{"rendered":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Android Studio \u0438\u043b\u0438 \u0427\u0438\u0441\u0442\u0438\u043c \u0431\u0435\u0437\u0443\u043c\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e \u043b\u043e\u0433\u043e\u0432 \u0432 LogCat"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0432 \u043e\u043a\u043d\u0435 Logcat \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0440\u0435\u0442\u044c \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u0438. \u0418 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u0442\u0430\u043c \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, Logcat \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0438\u043b\u0438\u0430\u043b \u0430\u0434\u0430. \u0422\u0443\u0434\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u044b\u043f\u043b\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043b\u043e\u0433\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u00ab\u0448\u043e\u0440\u043e\u0445\u0438\u00bb \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043a\u0443\u0447\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0434\u043e\u0448\u0451\u043b \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043a\u0438\u043f\u0435\u043d\u0438\u044f. \u041b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439 \u0431\u0430\u0433 \u0432 \u044d\u0442\u043e\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0442\u0430\u043b\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u043e\u043b\u044c\u043d\u043e &#8212; \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0442\u0435\u043a\u0430\u043b\u0438. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b Android Studio, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043b\u043e\u0433\u0430\u043c\u0438 \u043f\u044f\u0442\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0438\u0447 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043f\u0430\u043c \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0440\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0448\u043c\u0430\u0440\u0430\u0445. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432 \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0441\u044b \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0435\u0440\u0442\u044b, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b LogCat, \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0441\u0442\u0438\u043b\u0438 \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0442\u0435\u0433\u0430\u043c, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043d\u0430 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043b\u043e\u0433\u043e\u0432 \u0432 AI. \u0412\u044b\u0436\u0440\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438. \u041d\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043e\u0442\u043d\u0438\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u041f\u043e\u043d\u044f\u0432, \u0447\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0442\u0430\u043b \u043f\u043b\u0430\u0433\u0438\u043d <strong>TAO LogExt<\/strong> \u0434\u043b\u044f Android Studio, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u0442\u0443 \u0440\u0443\u0442\u0438\u043d\u0443 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0418\u0434\u0435\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0443\u0434\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e Tool Window. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438\u0437 \u043a\u043e\u0434\u0430, \u043e\u043d\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430\u043c\u0438. \u0422\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e &#8212; \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u0442\u0435\u0433\u0438 \u0432 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u0441\u0435\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u0441\u0435\u0442\u0438, \u043a\u0443\u0434\u0430 \u0432\u043e\u0439\u0434\u0443\u0442 \u0442\u0435\u0433\u0438 OkHttp \u0438 \u0432\u0430\u0448\u0435\u0433\u043e API, \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u0438\u0447\u0443. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u043e\u043b\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u044b: \u0442\u043a\u043d\u0443\u043b \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0440\u0435\u0441\u0435\u0442, \u0438 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u043e\u0442 \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0448\u0443\u043c\u0430.<\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u043e \u0441\u043f\u0430\u043c\u044f\u0449\u0438\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 SDK. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0435\u0451 \u0442\u0435\u0433 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0438\u0433\u043d\u043e\u0440, \u0438 \u043e\u043d \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442 \u0438\u0437 \u0432\u044b\u0434\u0430\u0447\u0438 (\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u043e\u0436\u043d\u043e). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u043b\u043e\u043c\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Android Studio \u0438 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c Logcat &#8212; \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0443\u0442\u0438\u043d\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c\u0438 \u0433\u0430\u043b\u043e\u0447\u0435\u043a.<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u0430\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043d\u0435\u0440\u0432\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043b\u0435\u0433\u0430\u0441\u0438 \u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u0433\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0435\u0431\u0430\u0433\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u0432 \u0440\u0430\u0437\u044b: \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043c\u044b\u0448\u043a\u043e\u0439.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f Android Studio.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0a7\/bf9\/27e\/0a7bf927e8d725e06975c2dcc48728f9.png\" width=\"1689\" height=\"1188\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0a7\/bf9\/27e\/0a7bf927e8d725e06975c2dcc48728f9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0a7\/bf9\/27e\/0a7bf927e8d725e06975c2dcc48728f9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d: \u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/strong><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c, \u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443. \u041c\u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e. \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IntelliJ Platform SDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0438\u043a\u0442\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u043c. <\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b IntelliJ IDEA, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0438\u0437\u0430\u0440\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Android Studio \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u043d\u0435\u0439 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0436\u0438\u0432\u0443\u044e. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043e \u043a\u043e\u0434\u0435. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0442\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p><strong>build.gradle.kts &#8212; \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443<\/strong><\/p>\n<p>\u0412 \u0431\u043b\u043e\u043a\u0435 <strong>intellijPlatform <\/strong>\u043f\u0438\u0448\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0447\u0435\u0440\u0435\u0437 <strong>local(file(\u2026))<\/strong> \u043f\u0443\u0442\u044c \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Android Studio.  \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u0432 <strong>pluginConfiguration <\/strong>\u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <strong>ideaVersion<\/strong>. \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441, \u043f\u043e\u043b\u044f <strong>sinceBuild <\/strong>\u0438 <strong>untilBuild <\/strong>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0421\u0442\u0443\u0434\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 261 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u0435\u0440\u0441\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 2026.1. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f Android Studio \u0438 IntelliJ IDEA \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u043d\u0438 \u044d\u0442\u043e \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c\u0438 AI- IC- IU- IE-, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u0430\u043c\u0438  \u00af\\_(\u30c4)_\/\u00af  \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0432 <strong>runIde<\/strong> \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b JVM \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c <a href=\"http:\/\/disable.android.first.run\" rel=\"noopener noreferrer nofollow\">disable.android.first.run<\/a>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f Setup Wizard, \u0430 \u043f\u0430\u043c\u044f\u0442\u044c <strong>maxHeapSize <\/strong>\u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0431\u043b\u043e\u043a <strong>signing <\/strong>\u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0438 \u043a \u043a\u043b\u044e\u0447\u0430\u043c \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430, \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Marketplace \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0431\u0430\u0442 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u043e.<\/p>\n<pre><code class=\"kotlin\">intellijPlatform {    pluginConfiguration {        name = \"TAO LogExt\"        ideaVersion {            sinceBuild = \"261\" \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android Studio 2026.1            untilBuild = \"271.*\"        }    }    signing {        certificateChainFile = file(\"certificate_chain.crt\")        privateKeyFile = file(\"private_key.pem\")    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>plugin.xml &#8212; \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/strong><\/p>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043b\u0435\u0436\u0438\u0442 \u0432 <strong>src\/main\/resources\/META-INF\/<\/strong> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u043b\u044c AndroidManifest.xml. \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c. \u041f\u043e\u043b\u0435 <strong>id<\/strong> \u0441\u043b\u0443\u0436\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u0433\u0430\u0445 <strong>depends <\/strong>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043c\u043e\u0434\u0443\u043b\u0438: <strong>com.intellij.modules.platform<\/strong> \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u043e\u043a\u043d\u0430\u043c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u043c, \u0430 <strong>org.jetbrains.android<\/strong> \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ADB \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0411\u0435\u0437 \u044d\u0442\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u044b Android \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 <strong>toolWindow<\/strong>, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c, \u0438\u043b\u0438 <strong>projectService <\/strong>\u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0435 <strong>actions<\/strong>. \u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0448\u0438 &#8230;Action \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u043c\u0435\u043d\u044e <strong>ViewMenu <\/strong>\u0438\u043b\u0438 <strong>ToolsMenu<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u0421\u0442\u0443\u0434\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435  \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 Activity \u0438 Service.<\/p>\n<pre><code class=\"xml\">&lt;idea-plugin&gt;    &lt;id&gt;ua.at.tsvetkov.logext&lt;\/id&gt;    &lt;name&gt;TAO LogExt&lt;\/name&gt;    &lt;vendor url=\"https:\/\/github.com\/lordtao\"&gt;Alexandr Tsvetkov&lt;\/vendor&gt;    &lt;depends&gt;com.intellij.modules.platform&lt;\/depends&gt;    &lt;depends&gt;org.jetbrains.android&lt;\/depends&gt;    &lt;extensions defaultExtensionNs=\"com.intellij\"&gt;        &lt;toolWindow id=\"TAO LogExt\"                    anchor=\"bottom\"                    icon=\"\/icons\/toolWindowIcon.svg\"                    factoryClass=\"ua.at.tsvetkov.logext.ui.LogExtToolWindowFactory\"\/&gt;                &lt;projectService serviceImplementation=\"ua.at.tsvetkov.logext.services.LogExtSettingsService\"\/&gt;    &lt;\/extensions&gt;    &lt;actions&gt;        &lt;action id=\"ua.at.tsvetkov.logext.actions.OpenLogExtAction\"                class=\"ua.at.tsvetkov.logext.actions.OpenLogCatAction\"                text=\"TAO LogExt\"                icon=\"\/icons\/toolWindowIcon.svg\"&gt;            &lt;add-to-group group-id=\"ViewMenu\" anchor=\"last\"\/&gt;        &lt;\/action&gt;    &lt;\/actions&gt;&lt;\/idea-plugin&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0420\u0435\u0441\u0443\u0440\u0441\u044b: \u0418\u043a\u043e\u043d\u043a\u0438 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/strong><\/p>\n<p>\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <strong>src\/main\/resources\/icons\/<\/strong>, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 &#8212; \u0438\u043a\u043e\u043d\u043a\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 Marketplace \u0438 \u0441\u043f\u0438\u0441\u043a\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u0424\u0430\u0439\u043b pluginIcon.svg (\u0438 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b pluginIcon_dark.svg) \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0435\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 <strong>src\/main\/resources\/META-INF\/<\/strong>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 SVG, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u0430\u0445. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 <em>toolWindowIcon.svg<\/em>, \u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b IDE \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c <em>dark, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 toolWindowIcon_dark.svg<\/em>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043a\u043e\u043d\u043a\u0430\u043c \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f. \u0412 TAO LogExt \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 (\u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443.<\/p>\n<p><strong>\u0414\u043e\u0431\u044b\u0432\u0430\u0435\u043c \u043b\u043e\u0433\u0438: \u0420\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u0438 ADB<\/strong><\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 ddmlib, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0421\u0442\u0443\u0434\u0438\u0438. \u041d\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0421\u0442\u0443\u0434\u0438\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e. \u0412 LogExtListenerService \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043c\u0435\u0442\u043e\u0434 executeShellCommand \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 logcat -v threadtime. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u043b\u043e\u0433\u0438. \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 Logcat \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 IDE.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 IShellOutputReceiver. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 ddmlib.<\/p>\n<pre><code class=\"kotlin\">private fun setupDeviceLogcat(device: Any, callback: (String) -&gt; Unit) {    val receiverClass = Class.forName(\"com.android.ddmlib.IShellOutputReceiver\")    val proxyReceiver = java.lang.reflect.Proxy.newProxyInstance(        receiverClass.classLoader,        arrayOf(receiverClass)    ) { _, method, args -&gt;        if (method.name == \"addOutput\") {            val data = args[0] as ByteArray            val offset = args[1] as Int            val length = args[2] as Int            callback(String(data, offset, length))        }        null    }    val executeMethod = device.javaClass.getMethod(\"executeShellCommand\",         String::class.java, receiverClass)        Thread {        executeMethod.invoke(device, \"logcat -v threadtime\", proxyReceiver)    }.apply {         isDaemon = true        start()     }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>UI: \u0421\u0442\u0440\u043e\u0438\u043c \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/strong><\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Android: \u0432\u043c\u0435\u0441\u0442\u043e XML-\u043b\u0435\u0439\u0430\u0443\u0442\u043e\u0432 \u0438 View\/Compose \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Swing \u0438 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043e\u0442 JetBrains (JB-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b). \u0415\u0441\u043b\u0438 \u0432 Android \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043a RecyclerView, \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0433\u043e \u0440\u043e\u043b\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 JBList \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 JPanel. \u0412\u043c\u0435\u0441\u0442\u043e ConstraintLayout \u0447\u0430\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <strong>BorderLayout <\/strong>\u0438\u043b\u0438 <strong>GridBagLayout<\/strong>. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0442\u043e\u043f Java, \u0445\u043e\u0442\u044f \u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u043d\u0430 Kotlin. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 LogCatToolWindowFactory, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435.<\/p>\n<p><strong>\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: ToolWindowFactory<\/strong><\/p>\n<p>\u041d\u0430\u0448 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>ToolWindowFactory<\/strong>. \u0415\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0448\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"kotlin\">class LogExtToolWindowFactory : ToolWindowFactory {    override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {        val logExtPanel = LogExtPanel(project)        val content = ContentFactory.getInstance().createContent(logExtPanel, \"\", false)        toolWindow.contentManager.addContent(content)                \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438        Disposer.register(toolWindow.contentManager, logExtPanel)    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044d\u043a\u0440\u0430\u043d: LogExtPane<\/strong><\/p>\n<p>\u0421\u0430\u043c\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e <strong>JPanel <\/strong>(\u043e\u0431\u044b\u0447\u043d\u043e \u0441 <strong>BorderLayout<\/strong>). \u0421\u0435\u0440\u0434\u0446\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ConsoleView &#8212; \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0421\u0442\u0443\u0434\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0443 \u0441\u0442\u0440\u043e\u043a \u0438 \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438. \u041c\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u043f\u0430\u043d\u0435\u043b\u0438, \u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0438 \u0441\u0431\u043e\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"kotlin\">class LogExtPanel(private val project: Project) : JPanel(BorderLayout()), Disposable {    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 ConsoleView \u0438\u0437 IntelliJ SDK    private val consoleView: ConsoleView = object : ConsoleViewImpl(project, true) {        override fun createCompositeFilter(): com.intellij.execution.filters.CompositeFilter {            val compositeFilter = com.intellij.execution.filters.CompositeFilter(project)            compositeFilter.addFilter(LogSourceLinkFilter(project))            return compositeFilter        }    }    init {        \/\/ \u041a\u043e\u043c\u043f\u043e\u043d\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441        add(createHeader(), BorderLayout.NORTH) \/\/ \u0412\u044b\u0431\u043e\u0440 \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430        add(consoleView.component, BorderLayout.CENTER) \/\/ \u041f\u043e\u043b\u0435 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438        createToolbar() \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/28d\/39b\/1bb\/28d39b1bb3269b852878ee876a104670.png\" width=\"1709\" height=\"1160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/28d\/39b\/1bb\/28d39b1bb3269b852878ee876a104670.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/28d\/39b\/1bb\/28d39b1bb3269b852878ee876a104670.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438. \u0412\u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p><strong>\u0414\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u043e\u043a\u043d\u0430: DialogWrapper<\/strong><\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043e\u043d \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, TagFilterDialog) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <strong>DialogWrapper<\/strong>. \u042d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u0430\u043c\u0438 Swing, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 OK\/Cancel \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u043e\u043a\u043d\u0430.<\/p>\n<pre><code>class LogExportDialog(private val project: Project) : DialogWrapper(project) {    private val globalSettings = LogExtGlobalSettingsService.getInstance()    private val pathField = TextFieldWithBrowseButton()    private val minimizeCheck = JBCheckBox(\"Minimize for AI\", globalSettings.state.minimizeForAi)    init {        title = \"Export Logs\"        pathField.text = globalSettings.state.lastExportPath ?: \"\"                pathField.addActionListener {            ....        }        init()    }    override fun createCenterPanel(): JComponent {        val panel = FormBuilder.createFormBuilder()            .addLabeledComponent(\"Export to:\", pathField)            .addComponent(minimizeCheck)            .panel        panel.preferredSize = Dimension(600, panel.preferredSize.height)        return panel    }....    override fun doOKAction() {        val state = globalSettings.state....        super.doOKAction()    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong><\/p>\n<p>\u041a\u0443\u0434\u0430 \u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430?  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <strong>Storage <\/strong>\u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>PersistentStateComponent<\/strong>. <\/p>\n<pre><code class=\"kotlin\">@Service(Service.Level.PROJECT)@State(name = \"LogExtSettings\", storages = [Storage(\"logext_plugin_settings.xml\")]) \/\/ &lt;- \u0412\u043e\u0442 \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u043cclass LogExtSettingsService : PersistentStateComponent&lt;LogExtSettingsService.State&gt; {    class State { \/\/ \u044d\u0442\u043e \u043d\u0430\u0448\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438        var ignoredTags: MutableSet&lt;String&gt; = mutableSetOf()        var levelColors: MutableMap&lt;String, LevelAttributes&gt; = mutableMapOf()                var showDate: Boolean = true        var showTime: Boolean = true        var showMillis: Boolean = true        var showPid: Boolean = true        var showTid: Boolean = true        var tagWidth: Int = 23        var maxHistorySize: Int = 100000                var clearLogOnStart: Boolean = true        var openOnStart: Boolean = true                var lastExportPath: String? = null        var lastTagsPath: String? = null        var minimizeForAi: Boolean = false        var showDuplicateTags: Boolean = false    }    private var myState = State()    override fun getState(): State = myState \/\/ \u0442\u0443\u0442 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e    override fun loadState(state: State) { \/\/ \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e        myState = state    }  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b25\/ef1\/08f\/b25ef108ff3fb8b916ed23e68da86d02.png\" width=\"1690\" height=\"1193\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b25\/ef1\/08f\/b25ef108ff3fb8b916ed23e68da86d02.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b25\/ef1\/08f\/b25ef108ff3fb8b916ed23e68da86d02.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0418\u0442\u043e\u0433<\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438. <strong>TAO LogExt<\/strong> \u043f\u043e\u043c\u043e\u0433 \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0435\u0431\u0430\u0433\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u043c. \u042f \u0443\u0432\u0435\u0440\u0435\u043d \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0444\u0438\u0447 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u0438 \u0444\u0438\u0434\u0431\u0435\u043a\u0430\u043c. <\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u043d\u0430 GitHub \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/lordtao\/LogExt\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/lordtao\/LogExt<\/a>. \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0438\u0437 \u0440\u0435\u043b\u0438\u0437\u0430 <a href=\"https:\/\/github.com\/lordtao\/LogExt\/releases\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/lordtao\/LogExt\/releases<\/a>, \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/32270-tao-logext\" rel=\"noopener noreferrer nofollow\">https:\/\/plugins.jetbrains.com\/plugin\/32270-tao-logext<\/a> \u0438\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u0432 Android Studio \u0432 Settings -&gt; Plugins -&gt; Marketplace \u043f\u043e\u0438\u0441\u043a\u043e\u043c <strong>TAO LogExt.<\/strong><\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0432\u044b\u0447\u0438\u0442\u043a\u0435 \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u0445 <a href=\"https:\/\/gemini.google.com\/\" rel=\"noopener noreferrer nofollow\">Gemini<\/a><\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08d\/545\/4b7\/08d5454b726703e7406579eec474cda3.png\" width=\"1132\" height=\"464\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/08d\/545\/4b7\/08d5454b726703e7406579eec474cda3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08d\/545\/4b7\/08d5454b726703e7406579eec474cda3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<p>\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\/1047962\/\">https:\/\/habr.com\/ru\/articles\/1047962\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u0436\u0434\u044b\u0439 Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0432 \u043e\u043a\u043d\u0435 Logcat \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0440\u0435\u0442\u044c \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u0438. \u0418 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u0442\u0430\u043c \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, Logcat \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0438\u043b\u0438\u0430\u043b \u0430\u0434\u0430. \u0422\u0443\u0434\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u044b\u043f\u043b\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043b\u043e\u0433\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u00ab\u0448\u043e\u0440\u043e\u0445\u0438\u00bb \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043a\u0443\u0447\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430.\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0434\u043e\u0448\u0451\u043b \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043a\u0438\u043f\u0435\u043d\u0438\u044f. \u041b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439 \u0431\u0430\u0433 \u0432 \u044d\u0442\u043e\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0442\u0430\u043b\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u043e\u043b\u044c\u043d\u043e &#8212; \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0442\u0435\u043a\u0430\u043b\u0438. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b Android Studio, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043b\u043e\u0433\u0430\u043c\u0438 \u043f\u044f\u0442\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0438\u0447 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043f\u0430\u043c \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0440\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0448\u043c\u0430\u0440\u0430\u0445. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432 \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0441\u044b \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0435\u0440\u0442\u044b, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b LogCat, \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0441\u0442\u0438\u043b\u0438 \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0442\u0435\u0433\u0430\u043c, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043d\u0430 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043b\u043e\u0433\u043e\u0432 \u0432 AI. \u0412\u044b\u0436\u0440\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438. \u041d\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043e\u0442\u043d\u0438\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f.\u041f\u043e\u043d\u044f\u0432, \u0447\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0442\u0430\u043b \u043f\u043b\u0430\u0433\u0438\u043d TAO LogExt \u0434\u043b\u044f Android Studio, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u0442\u0443 \u0440\u0443\u0442\u0438\u043d\u0443 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u043a\u043e\u0432.\u0418\u0434\u0435\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0443\u0434\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e Tool Window. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438\u0437 \u043a\u043e\u0434\u0430, \u043e\u043d\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430\u043c\u0438. \u0422\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e &#8212; \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u0442\u0435\u0433\u0438 \u0432 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u0441\u0435\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u0441\u0435\u0442\u0438, \u043a\u0443\u0434\u0430 \u0432\u043e\u0439\u0434\u0443\u0442 \u0442\u0435\u0433\u0438 OkHttp \u0438 \u0432\u0430\u0448\u0435\u0433\u043e API, \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u0438\u0447\u0443. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u043e\u043b\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u044b: \u0442\u043a\u043d\u0443\u043b \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0440\u0435\u0441\u0435\u0442, \u0438 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u043e\u0442 \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0448\u0443\u043c\u0430.\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u043e \u0441\u043f\u0430\u043c\u044f\u0449\u0438\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 SDK. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0435\u0451 \u0442\u0435\u0433 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0438\u0433\u043d\u043e\u0440, \u0438 \u043e\u043d \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442 \u0438\u0437 \u0432\u044b\u0434\u0430\u0447\u0438 (\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u043e\u0436\u043d\u043e). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u043b\u043e\u043c\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Android Studio \u0438 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c Logcat &#8212; \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0443\u0442\u0438\u043d\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c\u0438 \u0433\u0430\u043b\u043e\u0447\u0435\u043a.\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u0430\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043d\u0435\u0440\u0432\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043b\u0435\u0433\u0430\u0441\u0438 \u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u0433\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0435\u0431\u0430\u0433\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u0432 \u0440\u0430\u0437\u044b: \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043c\u044b\u0448\u043a\u043e\u0439.\u041d\u0438\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f Android Studio.\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d: \u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c, \u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443. \u041c\u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e. \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IntelliJ Platform SDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0438\u043a\u0442\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u043c. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b IntelliJ IDEA, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0438\u0437\u0430\u0440\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Android Studio \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u043d\u0435\u0439 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0436\u0438\u0432\u0443\u044e. \u0418\u0442\u0430\u043a, \u043e \u043a\u043e\u0434\u0435. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0442\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.build.gradle.kts &#8212; \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443\u0412 \u0431\u043b\u043e\u043a\u0435 intellijPlatform \u043f\u0438\u0448\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0447\u0435\u0440\u0435\u0437 local(file(\u2026)) \u043f\u0443\u0442\u044c \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Android Studio.  \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u0432 pluginConfiguration \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ideaVersion. \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441, \u043f\u043e\u043b\u044f sinceBuild \u0438 untilBuild \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0421\u0442\u0443\u0434\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 261 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u0435\u0440\u0441\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 2026.1. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f Android Studio \u0438 IntelliJ IDEA \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u043d\u0438 \u044d\u0442\u043e \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c\u0438 AI- IC- IU- IE-, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u0430\u043c\u0438  \u00af\\_(\u30c4)_\/\u00af  \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0443.\u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0432 runIde \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b JVM \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c disable.android.first.run, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f Setup Wizard, \u0430 \u043f\u0430\u043c\u044f\u0442\u044c maxHeapSize \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0431\u043b\u043e\u043a signing \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0438 \u043a \u043a\u043b\u044e\u0447\u0430\u043c \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430, \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Marketplace \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0431\u0430\u0442 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u043e.intellijPlatform {    pluginConfiguration {        name = &#171;TAO LogExt&#187;        ideaVersion {            sinceBuild = &#171;261&#187; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android Studio 2026.1            untilBuild = &#171;271.*&#187;        }    }    signing {        certificateChainFile = file(&#171;certificate_chain.crt&#187;)        privateKeyFile = file(&#171;private_key.pem&#187;)    }}plugin.xml &#8212; \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043b\u0435\u0436\u0438\u0442 \u0432 src\/main\/resources\/META-INF\/ \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u043b\u044c AndroidManifest.xml. \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c. \u041f\u043e\u043b\u0435 id \u0441\u043b\u0443\u0436\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u0433\u0430\u0445 depends \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043c\u043e\u0434\u0443\u043b\u0438: com.intellij.modules.platform \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u043e\u043a\u043d\u0430\u043c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u043c, \u0430 org.jetbrains.android \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ADB \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0411\u0435\u0437 \u044d\u0442\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u044b Android \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b.\u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 toolWindow, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c, \u0438\u043b\u0438 projectService \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0435 actions. \u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0448\u0438 &#8230;Action \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u043c\u0435\u043d\u044e ViewMenu \u0438\u043b\u0438 ToolsMenu, \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u0421\u0442\u0443\u0434\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435  \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 Activity \u0438 Service.&lt;idea-plugin&gt;    &lt;id&gt;ua.at.tsvetkov.logext&lt;\/id&gt;    &lt;name&gt;TAO LogExt&lt;\/name&gt;    &lt;vendor url=&#187;https:\/\/github.com\/lordtao&#187;&gt;Alexandr Tsvetkov&lt;\/vendor&gt;    &lt;depends&gt;com.intellij.modules.platform&lt;\/depends&gt;    &lt;depends&gt;org.jetbrains.android&lt;\/depends&gt;    &lt;extensions defaultExtensionNs=&#187;com.intellij&#187;&gt;        &lt;toolWindow id=&#187;TAO LogExt&#187;                    anchor=&#187;bottom&#187;                    icon=&#187;\/icons\/toolWindowIcon.svg&#187;                    factoryClass=&#187;ua.at.tsvetkov.logext.ui.LogExtToolWindowFactory&#187;\/&gt;                &lt;projectService serviceImplementation=&#187;ua.at.tsvetkov.logext.services.LogExtSettingsService&#187;\/&gt;    &lt;\/extensions&gt;    &lt;actions&gt;        &lt;action id=&#187;ua.at.tsvetkov.logext.actions.OpenLogExtAction&#187;                class=&#187;ua.at.tsvetkov.logext.actions.OpenLogCatAction&#187;                text=&#187;TAO LogExt&#187;                icon=&#187;\/icons\/toolWindowIcon.svg&#187;&gt;            &lt;add-to-group group-id=&#187;ViewMenu&#187; anchor=&#187;last&#187;\/&gt;        &lt;\/action&gt;    &lt;\/actions&gt;&lt;\/idea-plugin&gt;\u0420\u0435\u0441\u0443\u0440\u0441\u044b: \u0418\u043a\u043e\u043d\u043a\u0438 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 src\/main\/resources\/icons\/, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 &#8212; \u0438\u043a\u043e\u043d\u043a\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 Marketplace \u0438 \u0441\u043f\u0438\u0441\u043a\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u0424\u0430\u0439\u043b pluginIcon.svg (\u0438 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b pluginIcon_dark.svg) \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0435\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 src\/main\/resources\/META-INF\/. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430.\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 SVG, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u0430\u0445. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 toolWindowIcon.svg, \u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b IDE \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c dark, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 toolWindowIcon_dark.svg. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043a\u043e\u043d\u043a\u0430\u043c \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f. \u0412 TAO LogExt \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 (\u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443.\u0414\u043e\u0431\u044b\u0432\u0430\u0435\u043c \u043b\u043e\u0433\u0438: \u0420\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u0438 ADB\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 ddmlib, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0421\u0442\u0443\u0434\u0438\u0438. \u041d\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0421\u0442\u0443\u0434\u0438\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e. \u0412 LogExtListenerService \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043c\u0435\u0442\u043e\u0434 executeShellCommand \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 logcat -v threadtime. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u043b\u043e\u0433\u0438. \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 Logcat \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 IDE.\u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 IShellOutputReceiver. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 ddmlib.private fun setupDeviceLogcat(device: Any, callback: (String) -&gt; Unit) {    val receiverClass = Class.forName(&#171;com.android.ddmlib.IShellOutputReceiver&#187;)    val proxyReceiver = java.lang.reflect.Proxy.newProxyInstance(        receiverClass.classLoader,        arrayOf(receiverClass)    ) { _, method, args -&gt;        if (method.name == &#171;addOutput&#187;) {            val data = args[0] as ByteArray            val offset = args[1] as Int            val length = args[2] as Int            callback(String(data, offset, length))        }        null    }    val executeMethod = device.javaClass.getMethod(&#171;executeShellCommand&#187;,         String::class.java, receiverClass)        Thread {        executeMethod.invoke(device, &#171;logcat -v threadtime&#187;, proxyReceiver)    }.apply {         isDaemon = true        start()     }}UI: \u0421\u0442\u0440\u043e\u0438\u043c \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Android: \u0432\u043c\u0435\u0441\u0442\u043e XML-\u043b\u0435\u0439\u0430\u0443\u0442\u043e\u0432 \u0438 View\/Compose \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Swing \u0438 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043e\u0442 JetBrains (JB-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b). \u0415\u0441\u043b\u0438 \u0432 Android \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043a RecyclerView, \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0433\u043e \u0440\u043e\u043b\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 JBList \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 JPanel. \u0412\u043c\u0435\u0441\u0442\u043e ConstraintLayout \u0447\u0430\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f BorderLayout \u0438\u043b\u0438 GridBagLayout. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0442\u043e\u043f Java, \u0445\u043e\u0442\u044f \u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u043d\u0430 Kotlin. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 LogCatToolWindowFactory, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-483788","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483788","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=483788"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483788\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=483788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=483788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=483788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}