{"id":468634,"date":"2025-07-25T15:16:07","date_gmt":"2025-07-25T15:16:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=468634"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=468634","title":{"rendered":"<span>\u041f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f Android Studio<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 <a href=\"https:\/\/habr.com\/ru\/companies\/domclick\/articles\/867018\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u0435\u0439<\/a> \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Android Studio (\u0438\u043b\u0438 IntelliJ Idea). \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043a\u0443\u043d\u0451\u043c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IDE. <\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 Android Studio, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0421\u0442\u0443\u0434\u0438\u044f\u00bb). \u041f\u043e\u0434\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0435\u0439 \u0438\u043b\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0439 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0421\u0442\u0443\u0434\u0438\u044f \u0438 \u0442\u0430\u043a \u0443\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c, \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043d\u043e\u0432\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0422\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0421\u0442\u0443\u0434\u0438\u0438, \u0447\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e code style, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/463\/acc\/dcc\/463accdcc81bd21b9fd7a9b5aa96dcd1.jpeg\" alt=\"\u041d\u0443, \u043f\u043e\u0433\u043d\u0430\u043b\u0438\" title=\"\u041d\u0443, \u043f\u043e\u0433\u043d\u0430\u043b\u0438\" width=\"1000\" height=\"562\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/463\/acc\/dcc\/463accdcc81bd21b9fd7a9b5aa96dcd1.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/463\/acc\/dcc\/463accdcc81bd21b9fd7a9b5aa96dcd1.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0443, \u043f\u043e\u0433\u043d\u0430\u043b\u0438<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430. \u0422\u0443\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b. <\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (<a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/tools-intellij-platform-gradle-plugin.html\" rel=\"noopener noreferrer nofollow\">IntelliJ Platform Gradle Plugin<\/a>). \u042d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433. <\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u00a0\u2014 \u0432\u0437\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435. \u041a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/22989-android\/versions\" rel=\"noopener noreferrer nofollow\">Android<\/a> \u0438 <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable\" rel=\"noopener noreferrer nofollow\">Kotlin<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0421\u0442\u0443\u0434\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c. \u0413\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432\u044b\u0448\u043b\u0430 \u0421\u0442\u0443\u0434\u0438\u044f \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 K2, \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438 \u0442\u0430\u0440\u0433\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438, \u0438\u043b\u0438 \u0443 \u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 K2. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u0439 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432 Gradle, \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0435\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:<\/p>\n<pre><code class=\"kotlin\">tasks {     patchPluginXml {         sinceBuild.set(\"232\")         untilBuild.set(\"253.*\")     } }<\/code><\/pre>\n<p>\u0422\u0430\u0440\u0433\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f C\u0442\u0443\u0434\u0438\u0438, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f IntelliJ Idea. \u0412\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0449\u0435 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435, \u043d\u043e \u0440\u0430\u0437 \u043c\u044b \u043d\u0430\u0446\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043d\u0430 C\u0442\u0443\u0434\u0438\u044e, \u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0451. \u041f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/android-studio.html#android-studio-plugin-setup\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0421\u0442\u0443\u0434\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>About Android Studio<\/code>, \u043d\u0435 \u0442\u0430, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430; \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/android-studio-releases-list.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Gradle, \u0432\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>plugin.xml<\/code> \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 depends. \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u00ab\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435\u00bb \u043f\u043b\u0430\u0433\u0438\u043d\u044b IntelliJ Idea, \u0441\u0430\u043c\u044b\u043c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>Git4Idea<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Git \u0432 IDE. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u043d\u0443\u0436\u043d\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>bundledPlugins<\/code>. \u041a\u0441\u0442\u0430\u0442\u0438, \u0440\u0430\u0437 \u0443\u0436 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b\u0438 K2, \u0442\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432 <code>plugin.xml <\/code>(\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 <a href=\"https:\/\/blog.jetbrains.com\/platform\/2024\/09\/migrating-your-kotlin-plugin-to-k2-mode\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>):<\/p>\n<pre><code class=\"xml\">&lt;extensions defaultExtensionNs=\"org.jetbrains.kotlin\"&gt;         &lt;supportsKotlinPluginMode supportsK2=\"true\"\/&gt; &lt;\/extensions&gt;<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0432 \u0444\u0430\u0439\u043b\u0435 <code>build.gradle<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 (\u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435): <\/p>\n<pre><code class=\"kotlin\">dependencies {     intellijPlatform {         androidStudio(\"2025.1.1.13\")         bundledPlugin(\"org.jetbrains.android\")         \/\/intellijIdeaCommunity(\"2025.1\")          bundledPlugins(listOf(\"Git4Idea\"))          \/\/https:\/\/plugins.jetbrains.com\/plugin\/22989-android\/versions         plugin(\"org.jetbrains.android:251.26927.70\")         \/\/https:\/\/plugins.jetbrains.com\/plugin\/13123-terminal\/versions         plugin(\"org.jetbrains.plugins.terminal:251.26094.87\")         \/\/https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable         plugin(\"org.jetbrains.kotlin:252.23591.19-IJ\")     } }<\/code><\/pre>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b, \u043e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u0441\u043b\u043e\u0436\u043d\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 API \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u043b\u0443\u0447\u0448\u0435\u0435 \u0438 \u0441\u0430\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0432. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/JetBrains\/intellij-community\" rel=\"noopener noreferrer nofollow\">intellij-community<\/a>.<\/p>\n<p>\u0421\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043e\u0440\u0443\u0436\u0438\u043c\u0441\u044f \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/kotlin-ui-dsl-version-2.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a> \u043f\u043e DSL, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0430\u0440\u0443 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438\u0437 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u044b \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u043c\u0435\u0440\u044b  \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 Android-\u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>flavors<\/code>, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>flavorDimensions<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>buildTypes<\/code>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a Gradle-\u0437\u0430\u0434\u0430\u0447 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 apk\/bundle, UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0442. \u043f. \u041f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0451 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>minifyEnabled<\/code>, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430: \u0435\u0441\u043b\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432 \u0421\u0442\u0443\u0434\u0438\u0438, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u0440\u0443\u043f\u0443\u043b\u0451\u0437\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0438\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0434\u0438\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <code>flavor<\/code>, \u043d\u0430\u0442\u044b\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c UI-\u0442\u0435\u0441\u0442. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 C\u0442\u0443\u0434\u0438\u0438, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable\" rel=\"noopener noreferrer nofollow\">terminal<\/a>.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u043e\u0439\u043c\u0451\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u00ab\u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0439\u00bb \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0435\u0441\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0421\u0442\u0443\u0434\u0438\u0438 (\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u0441 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a, \u043e\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/editor-gutter.html\" rel=\"noopener noreferrer nofollow\">Gutter<\/a>).<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043c\u0438\u043d\u043a\u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0421\u0442\u0443\u0434\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c Shell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0421\u0442\u0443\u0434\u0438\u0438 \u043f\u0440\u043e\u0439\u0434\u0451\u043c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Action \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <code>plugin.xml<\/code>. \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u041f\u0435\u0440\u0432\u043e\u0435\u00a0\u2014 \u043f\u043e\u043d\u044f\u0442\u044c, \u043c\u0435\u0448\u0430\u0435\u0442\u00a0\u043b\u0438 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f (<a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/indexing-and-psi-stubs.html#dumb-mode\" rel=\"noopener noreferrer nofollow\">Dumb Mode<\/a>) \u0432\u00a0\u0421\u0442\u0443\u0434\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>AnAction<\/code> \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <code>DumbAwareAction<\/code>. <\/p>\n<pre><code class=\"kotlin\">class RunScriptAction : DumbAwareAction() {       override fun actionPerformed(event: AnActionEvent) {         val project = event.project ?: return         SilentProcessRunner().run(           project = project,            command = \"sh .\/some_script.sh param=1\"         )     } }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u043a\u0443\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u043a\u043d\u043e\u043f\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0443 \u0443\u0431\u0440\u0430\u0442\u044c \u0432 \u043c\u0435\u043d\u044e Run, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Android.InstantRunActions<\/code>\u00a0\u2014 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0432\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u043e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443), <code>RunContextGroup<\/code>\u00a0\u2014 \u043c\u0435\u043d\u044e \u0432\u00a0\u0433\u0440\u0443\u043f\u043f\u0435 Run \u0432\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u043f\u0440\u0438\u00a0\u043a\u043b\u0438\u043a\u0435 \u043f\u043e\u00a0\u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, <code>RunToolbarMainActionGroup<\/code>\u00a0\u2014 \u0442\u043e\u0436\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0432\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e\u00a0\u043b\u0435\u0432\u0435\u0435, \u0433\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0437\u0435\u043b\u0451\u043d\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0430, \u043d\u0443 \u0438\u00a0\u0442.\u00a0\u0434. \u0412\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0443\u0442\u043e\u0440\u043d\u043e, \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/JetBrains\/intellij-community\" rel=\"noopener noreferrer nofollow\">intellij-community<\/a> \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043c\u0435\u043d\u044e \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445 <code>plugin.xml<\/code> (\u0438\u043d\u043e\u0433\u0434\u0430 \u0418\u0418 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0442, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b). <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IntelliJ Idea \u0438 Android Studio \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00a0\u2014 <code>RunMenu<\/code> (\u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0432\u00a0\u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443, \u043f\u0443\u043d\u043a\u0442 Run), \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Group \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0438\u0445 Action \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f\u00a0\u043a\u0440\u0430\u0441\u043e\u0442\u044b. \u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>anchor<\/code> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<pre><code class=\"xml\">&lt;actions&gt;     &lt;group id=\"ru.domclick.example_plugin.RunGroup\"&gt;         &lt;separator\/&gt;         &lt;add-to-group group-id=\"RunMenu\" anchor=\"first\"\/&gt;     &lt;\/group&gt;      &lt;action id=\"ru.domclick.example_plugin.RunScriptAction\"             class=\"ru.domclick.example_plugin.RunScriptAction\"             text=\"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c script\"&gt;         &lt;add-to-group group-id=\"ru.domclick.example_plugin.RunGroup\" anchor=\"first\"\/&gt;     &lt;\/action&gt; &lt;\/actions&gt;<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b50\/97d\/2a9\/b5097d2a9880beb98f97dc50d0a9bcc2.png\" alt=\"\u041a\u043d\u043e\u043f\u043e\u0447\u043a\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e\" title=\"\u041a\u043d\u043e\u043f\u043e\u0447\u043a\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e\" width=\"728\" height=\"154\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b50\/97d\/2a9\/b5097d2a9880beb98f97dc50d0a9bcc2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b50\/97d\/2a9\/b5097d2a9880beb98f97dc50d0a9bcc2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043d\u043e\u043f\u043e\u0447\u043a\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0439\u0442\u0438 API \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u044f\u0437\u043a\u0435 <code>GeneralCommandLine<\/code> (\u0437\u0434\u0435\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u0430\u043a\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435) \u0438 <code>ProcessOutput<\/code> (\u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430). \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u00a0\u0432\u0438\u0434\u0443, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0421\u0442\u0443\u0434\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f\u00a0\u043e\u0447\u0438\u0441\u0442\u043a\u0438 Gradle-\u043a\u0435\u0448\u0435\u0439), \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u00abPermission denied\u00bb. \u041d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u00a0\u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u042d\u0442\u043e, \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442.<\/p>\n<pre><code class=\"kotlin\">class SilentProcessRunner {      fun run(project: Project, command: String, onComplete: () -&gt; Unit = {}) {         val commandLine = GeneralCommandLine()             .withWorkDirectory(project.basePath)             .withParameters(\"-c\", command)             .withExePath(\"sh\")          val output: ProcessOutput = ExecUtil.execAndGetOutput(commandLine)          if (output.exitCode == 0) {             onComplete.invoke()         } else {             Messages.showErrorDialog(                 \/* project = *\/ project,                 \/* message = *\/ \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u043a\u043e\u0434 ${output.exitCode}):\\n${output.stderr}\",                 \/* title = *\/ \"\u041e\u0448\u0438\u0431\u043a\u0430\"             )         }     } }<\/code><\/pre>\n<h2>\u0414\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 UI-\u0442\u0435\u0441\u0442\u043e\u0432<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443, \u043f\u043e\u00a0\u043a\u043b\u0438\u043a\u0443 \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u0435\u043c \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 UI\u2011\u0442\u0435\u0441\u0442\u0430. \u041a\u043d\u043e\u043f\u043a\u0443 \u0443\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0441\u0440\u0430\u0437\u0443 \u043a\u00a0\u0434\u0438\u0430\u043b\u043e\u0433\u0443 (\u043a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u043c). \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430\u00a0\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 <code>DialogBuilder<\/code>, \u0443\u00a0\u043d\u0435\u0433\u043e \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 (<code>addOkAction<\/code> \u0438 <code>addCancelAction<\/code>), \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>centerPanel<\/code>, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>show<\/code> (\u0438\u043b\u0438 <code>showNotModal<\/code>, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0421\u0442\u0443\u0434\u0438\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0437\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430). <\/p>\n<pre><code class=\"kotlin\">DialogBuilder()     .title(\"\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c UI-\u0442\u0435\u0441\u0442\u043e\u0432\")     .apply {           removeAllActions()           addOkAction().apply {           setText(\"\u0417\u0430\u043f\u0443\u0441\u043a\")           setOkOperation {               dialogWrapper.close(\/* exitCode = *\/ 1)               runTestCommand(project, testPackage, testFunction, flavor, isMinifyEnabled)               }           }           addCancelAction().setText(\"\u041e\u0442\u043c\u0435\u043d\u0430\")     }     .centerPanel(           panel {...}              .apply {                   preferredSize = Dimension(\/* width = *\/ 700, \/* height = *\/ 300)              }     )     .showNotModal()<\/code><\/pre>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432 DSL-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>panel<\/code>. \u0412\u0451\u0440\u0441\u0442\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438: \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (<code>row<\/code>, <code>column<\/code>, <code>group<\/code> \u0438 \u0442.\u043f.) \u0438 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b (<code>label<\/code>, <code>textField<\/code>, <code>radioButton<\/code>, <code>checkBox<\/code> \u0438 \u0442.\u043f.), \u0432 \u0431\u0438\u043b\u0434\u0435\u0440\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0432\u0441\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>bind<\/code>, \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 <code>buttonsGroup<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c <code>flavor<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0440\u0430\u0434\u0438\u043e-\u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0432\u044b\u0431\u043e\u0440.<\/p>\n<pre><code class=\"kotlin\">group(\"\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430\") {       row {           label(\"\u0412\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u043b\u0435 \u043d\u0438\u0436\u0435 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430\")       }       row {           classTextField = textField()               .align(Align.FILL)               .label(\"\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u043f\u0430\u043a\u0435\u0442\u043e\u043c\")               .onChanged { input -&gt;                   testPackage = input.text.trim()               }       }   }  group(\"Flavor\") {       buttonsGroup {           row {               radioButton(\"Flavor1\", \"Flavor1\")                   .selected(true)                   .onChanged {                       flavor = \"Flavor1\"                   }           }           row {               radioButton(\"Flavor2\", \"Flavor2\")                   .onChanged {                       flavor = \"Flavor2\"                   }           }       }.bind({ flavor }, { flavor = it })        row {           checkBox(\"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c minify (R8)\")               .onChanged {                   isMinifyEnabled = it.isEnabled               }       }   }<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f2\/3ea\/0dc\/7f23ea0dce0fa9f7110e91962b771698.png\" alt=\"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435\" title=\"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435\" width=\"1444\" height=\"774\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7f2\/3ea\/0dc\/7f23ea0dce0fa9f7110e91962b771698.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f2\/3ea\/0dc\/7f23ea0dce0fa9f7110e91962b771698.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0421\u0442\u0443\u0434\u0438\u0438. \u041d\u0430 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430 <code>.\/gradlew :app:connected${flavor}${dimention}DebugAndroidTest<\/code>&#8230; \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u00ab\u043e\u043a\u043e\u0448\u043a\u043e\u00bb \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0432\u00a0\u0421\u0442\u0443\u0434\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0443, \u0433\u0434\u0435 \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/04d\/4d3\/9f7\/04d4d39f71e710140f9bb26fb29be53f.png\" alt=\"&quot;\u041e\u043a\u043d\u043e&quot; \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438\" title=\"&quot;\u041e\u043a\u043d\u043e&quot; \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438\" width=\"1398\" height=\"240\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/04d\/4d3\/9f7\/04d4d39f71e710140f9bb26fb29be53f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/04d\/4d3\/9f7\/04d4d39f71e710140f9bb26fb29be53f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u00ab\u041e\u043a\u043d\u043e\u00bb \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u043a\u043d\u043e \u0432\u00a0\u0421\u0442\u0443\u0434\u0438\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>ToolWindow<\/code>, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 <code>ToolWindowManager<\/code>, \u0443\u043a\u0430\u0437\u0430\u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>activate<\/code>. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\u00a0\u043b\u0438 \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u043e\u0432 \u0438\u043b\u0438\u00a0\u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <code>window.contentManager<\/code> \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>findContent<\/code>, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0438\u043c\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0438. \u0415\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0447\u0435\u0440\u0435\u0437 <code>createShellWidget<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0451 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439. \u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>sendCommandToExecute<\/code>.<\/p>\n<pre><code class=\"kotlin\">val window = ToolWindowManager.getInstance(project)             .getToolWindow(TerminalToolWindowFactory.TOOL_WINDOW_ID) ?: return  val terminalView = TerminalToolWindowManager.getInstance(project) val contentManager = window.contentManager val content = contentManager.findContent(terminalTabName) val widget = if (content != null) {       contentManager.setSelectedContent(content, true)       TerminalToolWindowManager.findWidgetByContent(content)           ?: terminalView.createShellWidget(                     \/* workingDirectory = *\/ project.basePath,                     \/* tabName = *\/ terminalTabName,                     \/* requestFocus = *\/ true,                     \/* deferSessionStartUntilUiShown = *\/ true             ) } else {      terminalView.createShellWidget(                     \/* workingDirectory = *\/ project.basePath,                     \/* tabName = *\/ terminalTabName,                     \/* requestFocus = *\/ true,                     \/* deferSessionStartUntilUiShown = *\/ true             ) }  widget.sendCommandToExecute(command)  window.activate({}, true)<\/code><\/pre>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439 callback \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0438\u0434\u0436\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0433\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0438 <code>ProcessHandler<\/code> \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f\u00a0\u2014 \u043f\u0438\u0448\u0438\u0442\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>TerminalWidget<\/code> \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u0430\u044f, \u0447\u0430\u0441\u0442\u044c API \u043f\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0443 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0442\u0430\u0440\u044b\u043c <code>ShellTerminalWidget<\/code> \u0438 <code>JBTerminalWidget<\/code>, \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u043d\u0438 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b (\u0431\u0443\u0434\u0435\u0442 \u0431\u0440\u043e\u0441\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435).<\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a UI-\u0442\u0435\u0441\u0442\u0430 \u0432 Gutter<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u043b\u0438\u043a\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0430 \u0445\u043e\u0442\u0438\u043c \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u043d\u0435 \u0421\u0442\u0443\u0434\u0438\u0438, \u043e\u043d\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u043b\u0430\u0433\u0438\u043d), \u043f\u0440\u0438\u0447\u0451\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043a\u043b\u0430\u0441\u0441 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/line-marker-provider.html\" rel=\"noopener noreferrer nofollow\">LineMarkerProvider<\/a>. \u0415\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 <code>extensions<\/code> \u0432 <code>plugins.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;codeInsight.lineMarkerProvider language=\"kotlin\"     implementationClass=\"ru.domclick.example_plugin.AndroidUiTestLineMarkerProvider\"\/&gt;<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>getLineMarkerInfo<\/code>, \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 <code>PsiElement<\/code>\u00a0\u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/psi.html\" rel=\"noopener noreferrer nofollow\">PSI<\/a> (\u0442\u0430\u043a\u0436\u0435 \u044d\u0442\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/companies\/domclick\/articles\/818067\/\" rel=\"noopener noreferrer nofollow\">Lint<\/a>, \u0430\u00a0\u0432\u043e\u00a0\u0432\u0442\u043e\u0440\u043e\u0439 <a href=\"https:\/\/habr.com\/ru\/companies\/domclick\/articles\/870650\/\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u0438<\/a>\u00a0\u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u00a0K2). \u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430. \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u00ab\u043e\u0442\u0441\u0435\u0438\u0442\u044c\u00bb \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a UI-\u0442\u0435\u0441\u0442\u0430\u043c (\u0442\u0443\u0442 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043b\u0435\u0436\u0438\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c UI-\u0442\u0435\u0441\u0442\u044b \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 androidTest \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 <code>Test<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u044b, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443, \u0432\u0435\u0440\u043d\u0443\u0432 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 <code>LineMarkerInfo<\/code>, \u0433\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u043a\u043b\u0438\u043a\u0443: \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0435\u0451 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435, \u043a\u0430\u043a \u0443\u0436\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<pre><code class=\"kotlin\">class AndroidUiTestLineMarkerProvider : LineMarkerProvider {     override fun getLineMarkerInfo(element: PsiElement): LineMarkerInfo&lt;*&gt;? {          if ((element as? KtElement)?.containingClassOrObjectOrSelf() != null) return null          val className = (element.parent as? KtClass)?.name         val methodName = (element.parent as? KtNamedFunction)?.kotlinFqName?.shortName()?.asString()          val hasTestAnnotation = (element.parent as? KtNamedFunction)             ?.hasAnnotation(ClassId(FqName(\"org.junit\"), Name.identifier(\"Test\"))) == true          val isAndroidTestFile = element.containingFile.virtualFile?.canonicalPath?.contains(\"\/src\/androidTest\/\") == true          return if (isAndroidTestFile &amp;&amp; ((className == element.text &amp;&amp; className!!.contains(\"Test\"))                     || (methodName == element.text &amp;&amp; hasTestAnnotation))         ) {             LineMarkerInfo(                 \/* element = *\/ element,                 \/* range = *\/ element.textRange,                 \/* icon = *\/ AllIcons.RunConfigurations.TestState.Run,                 \/* tooltipProvider = *\/ {                     when {                         methodName != null -&gt; \"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442: $methodName\"                         className != null -&gt; \"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442: $className\"                         else -&gt; \"\"                     }                 },                 \/* navHandler = *\/ { _, _ -&gt; runAndroidUiTest(element, methodName) },                 \/* alignment = *\/ GutterIconRenderer.Alignment.RIGHT,                 \/* accessibleNameProvider = *\/ { \"\" }             )         } else {             null         }     } }<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e2f\/172\/f94\/e2f172f946dbf1951a3c566736e044a6.png\" alt=\"\u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u043a\u043e\u043d\u043a\u0430 \u0440\u044f\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439\" title=\"\u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u043a\u043e\u043d\u043a\u0430 \u0440\u044f\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439\" width=\"522\" height=\"214\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e2f\/172\/f94\/e2f172f946dbf1951a3c566736e044a6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e2f\/172\/f94\/e2f172f946dbf1951a3c566736e044a6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u043a\u043e\u043d\u043a\u0430 \u0440\u044f\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 LineMarker, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0440\u0443\u0442\u0438\u043d\u0443. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u043e\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 Kotlin, \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u043d\u0443\u0436\u0434\u044b. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0432\u044b\u0436\u0438\u043b\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u0439\u0442\u0438 \u0435\u0449\u0451 \u0434\u0430\u043b\u044c\u0448\u0435. <\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u043f\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>CheckinHandler<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430. <\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u043e\u043d\u0443\u0441\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e\u2011\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 (\u0438\u043b\u0438 \u0421\u0442\u0443\u0434\u0438\u0438). \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <code>ProjectActivity<\/code>, \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 <code>extensions<\/code> \u0447\u0435\u0440\u0435\u0437 <code>postStartupActivity.<\/code> <\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f\u00a0\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441\u043b\u0443\u0436\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>.\/gradlew buildPlugin<\/code>. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u043b\u0435\u0436\u0438\u0442 \u0432 <code>build\/distributions<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043b\u044f\u00a0\u043a\u0430\u043a\u0438\u0445\u2011\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0421\u0442\u0443\u0434\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0440\u0430\u043d\u0435\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u0435\u0448\u0435\u0439 Gradle), \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a: <code>ApplicationManagerEx.getApplicationEx().restart(true).<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0431\u043e\u0440\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c, \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/run-configurations.html#architecture-overview\" rel=\"noopener noreferrer nofollow\">API<\/a>. <\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/928744\/\"> https:\/\/habr.com\/ru\/articles\/928744\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 <a href=\"https:\/\/habr.com\/ru\/companies\/domclick\/articles\/867018\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u0435\u0439<\/a> \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Android Studio (\u0438\u043b\u0438 IntelliJ Idea). \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043a\u0443\u043d\u0451\u043c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IDE. <\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 Android Studio, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0421\u0442\u0443\u0434\u0438\u044f\u00bb). \u041f\u043e\u0434\u00a0\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0435\u0439 \u0438\u043b\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0439 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0421\u0442\u0443\u0434\u0438\u044f \u0438 \u0442\u0430\u043a \u0443\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c, \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043d\u043e\u0432\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0422\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0421\u0442\u0443\u0434\u0438\u0438, \u0447\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e code style, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0443, \u043f\u043e\u0433\u043d\u0430\u043b\u0438<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430. \u0422\u0443\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b. <\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (<a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/tools-intellij-platform-gradle-plugin.html\" rel=\"noopener noreferrer nofollow\">IntelliJ Platform Gradle Plugin<\/a>). \u042d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433. <\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u00a0\u2014 \u0432\u0437\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435. \u041a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/22989-android\/versions\" rel=\"noopener noreferrer nofollow\">Android<\/a> \u0438 <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable\" rel=\"noopener noreferrer nofollow\">Kotlin<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0421\u0442\u0443\u0434\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c. \u0413\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432\u044b\u0448\u043b\u0430 \u0421\u0442\u0443\u0434\u0438\u044f \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 K2, \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438 \u0442\u0430\u0440\u0433\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438, \u0438\u043b\u0438 \u0443 \u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 K2. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u0439 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432 Gradle, \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0435\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:<\/p>\n<pre><code class=\"kotlin\">tasks {     patchPluginXml {         sinceBuild.set(\"232\")         untilBuild.set(\"253.*\")     } }<\/code><\/pre>\n<p>\u0422\u0430\u0440\u0433\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f C\u0442\u0443\u0434\u0438\u0438, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f IntelliJ Idea. \u0412\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0449\u0435 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435, \u043d\u043e \u0440\u0430\u0437 \u043c\u044b \u043d\u0430\u0446\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043d\u0430 C\u0442\u0443\u0434\u0438\u044e, \u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0451. \u041f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/android-studio.html#android-studio-plugin-setup\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0421\u0442\u0443\u0434\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>About Android Studio<\/code>, \u043d\u0435 \u0442\u0430, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430; \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/android-studio-releases-list.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Gradle, \u0432\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>plugin.xml<\/code> \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 depends. \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u00ab\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435\u00bb \u043f\u043b\u0430\u0433\u0438\u043d\u044b IntelliJ Idea, \u0441\u0430\u043c\u044b\u043c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>Git4Idea<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Git \u0432 IDE. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u043d\u0443\u0436\u043d\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>bundledPlugins<\/code>. \u041a\u0441\u0442\u0430\u0442\u0438, \u0440\u0430\u0437 \u0443\u0436 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b\u0438 K2, \u0442\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432 <code>plugin.xml <\/code>(\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 <a href=\"https:\/\/blog.jetbrains.com\/platform\/2024\/09\/migrating-your-kotlin-plugin-to-k2-mode\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>):<\/p>\n<pre><code class=\"xml\">&lt;extensions defaultExtensionNs=\"org.jetbrains.kotlin\"&gt;         &lt;supportsKotlinPluginMode supportsK2=\"true\"\/&gt; &lt;\/extensions&gt;<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0432 \u0444\u0430\u0439\u043b\u0435 <code>build.gradle<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 (\u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435): <\/p>\n<pre><code class=\"kotlin\">dependencies {     intellijPlatform {         androidStudio(\"2025.1.1.13\")         bundledPlugin(\"org.jetbrains.android\")         \/\/intellijIdeaCommunity(\"2025.1\")          bundledPlugins(listOf(\"Git4Idea\"))          \/\/https:\/\/plugins.jetbrains.com\/plugin\/22989-android\/versions         plugin(\"org.jetbrains.android:251.26927.70\")         \/\/https:\/\/plugins.jetbrains.com\/plugin\/13123-terminal\/versions         plugin(\"org.jetbrains.plugins.terminal:251.26094.87\")         \/\/https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable         plugin(\"org.jetbrains.kotlin:252.23591.19-IJ\")     } }<\/code><\/pre>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b, \u043e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u0441\u043b\u043e\u0436\u043d\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 API \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u043b\u0443\u0447\u0448\u0435\u0435 \u0438 \u0441\u0430\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0432. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/JetBrains\/intellij-community\" rel=\"noopener noreferrer nofollow\">intellij-community<\/a>.<\/p>\n<p>\u0421\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043e\u0440\u0443\u0436\u0438\u043c\u0441\u044f \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/kotlin-ui-dsl-version-2.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a> \u043f\u043e DSL, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0430\u0440\u0443 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438\u0437 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u044b \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u043c\u0435\u0440\u044b  \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 Android-\u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>flavors<\/code>, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>flavorDimensions<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>buildTypes<\/code>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a Gradle-\u0437\u0430\u0434\u0430\u0447 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 apk\/bundle, UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0442. \u043f. \u041f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0451 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>minifyEnabled<\/code>, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430: \u0435\u0441\u043b\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432 \u0421\u0442\u0443\u0434\u0438\u0438, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u0440\u0443\u043f\u0443\u043b\u0451\u0437\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0438\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0434\u0438\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <code>flavor<\/code>, \u043d\u0430\u0442\u044b\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c UI-\u0442\u0435\u0441\u0442. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 C\u0442\u0443\u0434\u0438\u0438, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/stable\" rel=\"noopener noreferrer nofollow\">terminal<\/a>.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u043e\u0439\u043c\u0451\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 UI-\u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u00ab\u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0439\u00bb \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0435\u0441\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0421\u0442\u0443\u0434\u0438\u0438 (\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u0441 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a, \u043e\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/editor-gutter.html\" rel=\"noopener noreferrer nofollow\">Gutter<\/a>).<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043c\u0438\u043d\u043a\u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0421\u0442\u0443\u0434\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c Shell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0421\u0442\u0443\u0434\u0438\u0438 \u043f\u0440\u043e\u0439\u0434\u0451\u043c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Action \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <code>plugin.xml<\/code>. \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u041f\u0435\u0440\u0432\u043e\u0435\u00a0\u2014 \u043f\u043e\u043d\u044f\u0442\u044c, \u043c\u0435\u0448\u0430\u0435\u0442\u00a0\u043b\u0438 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f (<a href=\"https:\/\/plugins.jetbrains.com\/docs\/intellij\/indexing-and-psi-stubs.html#dumb-mode\" rel=\"noopener noreferrer nofollow\">Dumb Mode<\/a>) \u0432\u00a0\u0421\u0442\u0443\u0434\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>AnAction<\/code> \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <code>DumbAwareAction<\/code>. <\/p>\n<pre><code class=\"kotlin\">class RunScriptAction : DumbAwareAction() {       override fun actionPerformed(event: AnActionEvent) {         val project = event.project ?: return         SilentProcessRunner().run(           project = project,            command = \"sh .\/some_script.sh param=1\"         )     } }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u043a\u0443\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u043a\u043d\u043e\u043f\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0443 \u0443\u0431\u0440\u0430\u0442\u044c \u0432 \u043c\u0435\u043d\u044e Run, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Android.InstantRunActions<\/code>\u00a0\u2014 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0432\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u043e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443), <code>RunContextGroup<\/code>\u00a0\u2014 \u043c\u0435\u043d\u044e \u0432\u00a0\u0433\u0440\u0443\u043f\u043f\u0435 Run \u0432\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u043f\u0440\u0438\u00a0\u043a\u043b\u0438\u043a\u0435 \u043f\u043e\u00a0\u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, <code>RunToolbarMainActionGroup<\/code>\u00a0\u2014 \u0442\u043e\u0436\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0432\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e\u00a0\u043b\u0435\u0432\u0435\u0435, \u0433\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0437\u0435\u043b\u0451\u043d\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0430, \u043d\u0443 \u0438\u00a0\u0442.\u00a0\u0434. \u0412\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0443\u0442\u043e\u0440\u043d\u043e, \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/JetBrains\/intellij-community\" rel=\"noopener noreferrer nofollow\">intellij-community<\/a> \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043c\u0435\u043d\u044e \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445 <code>plugin.xml<\/code> (\u0438\u043d\u043e\u0433\u0434\u0430 \u0418\u0418 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0442, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b). <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IntelliJ Idea \u0438 Android Studio \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00a0\u2014 <code>RunMenu<\/code> (\u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0432\u00a0\u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443, \u043f\u0443\u043d\u043a\u0442 Run), \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Group \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0438\u0445 Action \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f\u00a0\u043a\u0440\u0430\u0441\u043e\u0442\u044b. \u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>anchor<\/code> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<pre><code class=\"xml\">&lt;actions&gt;     &lt;group id=\"ru.domclick.example_plugin.RunGroup\"&gt;         &lt;separator\/&gt;         &lt;add-to-group group-id=\"RunMenu\" anchor=\"first\"\/&gt;     &lt;\/group&gt;      &lt;action id=\"ru.domclick.example_plugin.RunScriptAction\"             class=\"ru.domclick.example_plugin.RunScriptAction\"             text=\"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c script\"&gt;         &lt;add-to-group group-id=\"ru.domclick.example_plugin.RunGroup\" anchor=\"first\"\/&gt;     &lt;\/action&gt; &lt;\/actions&gt;<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u043d\u043e\u043f\u043e\u0447\u043a\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0439\u0442\u0438 API \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u044f\u0437\u043a\u0435 <code>GeneralCommandLine<\/code> (\u0437\u0434\u0435\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u0430\u043a\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435) \u0438 <code>ProcessOutput<\/code> (\u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430). \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u00a0\u0432\u0438\u0434\u0443, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0421\u0442\u0443\u0434\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f\u00a0\u043e\u0447\u0438\u0441\u0442\u043a\u0438 Gradle-\u043a\u0435\u0448\u0435\u0439), \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u00abPermission denied\u00bb. \u041d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u00a0\u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u042d\u0442\u043e, \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442.<\/p>\n<pre><code class=\"kotlin\">class SilentProcessRunner {      fun run(project: Project, command: String, onComplete: () -&gt; Unit = {}) {         val commandLine = GeneralCommandLine()             .withWorkDirectory(project.basePath)             .withParameters(\"-c\", command)             .withExePath(\"sh\")          val output: ProcessOutput = ExecUtil.execAndGetOutput(commandLine)          if (output.exitCode == 0) {             onComplete.invoke()         } else {             Messages.showErrorDialog(                 \/* project = *\/ project,                 \/* message = *\/ \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u043a\u043e\u0434 ${output.exitCode}):\\n${output.stderr}\",                 \/* title = *\/ \"\u041e\u0448\u0438\u0431\u043a\u0430\"             )         }     } }<\/code><\/pre>\n<h2>\u0414\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 UI-\u0442\u0435\u0441\u0442\u043e\u0432<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443, \u043f\u043e\u00a0\u043a\u043b\u0438\u043a\u0443 \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u0435\u043c \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 UI\u2011\u0442\u0435\u0441\u0442\u0430. \u041a\u043d\u043e\u043f\u043a\u0443 \u0443\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0441\u0440\u0430\u0437\u0443 \u043a\u00a0\u0434\u0438\u0430\u043b\u043e\u0433\u0443 (\u043a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u043c). \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430\u00a0\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 <code>DialogBuilder<\/code>, \u0443\u00a0\u043d\u0435\u0433\u043e \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 (<code>addOkAction<\/code> \u0438 <code>addCancelAction<\/code>), \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>centerPanel<\/code>, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>show<\/code> (\u0438\u043b\u0438 <code>showNotModal<\/code>, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0421\u0442\u0443\u0434\u0438\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0437\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430). <\/p>\n<pre><code class=\"kotlin\">DialogBuilder()     .title(\"\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c UI-\u0442\u0435\u0441\u0442\u043e\u0432\")     .apply <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-468634","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468634","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=468634"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/468634\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=468634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=468634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=468634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}