{"id":379130,"date":"2024-06-18T15:01:18","date_gmt":"2024-06-18T15:01:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=379130"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=379130","title":{"rendered":"<span>Flutter Add-to-App: \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435, \u0447\u0435\u043c \u0434\u0432\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442  \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Flutter. \u041d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u044f. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0432 \u043b\u0443\u0447\u0430\u0445 \u0441\u043e\u0444\u0438\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>Flutter Add-to-App<\/strong> \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 Surf Flutter Team. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u0430 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041e \u0447\u0451\u043c \u0441\u0442\u0430\u0442\u044c\u044f<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Flutter Add-to-App \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d \u043d\u0443\u0436\u0435\u043d;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 Android \u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0438\u0434\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043a\u0430\u043a \u044d\u043a\u0440\u0430\u043d, \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e);<\/p>\n<\/li>\n<li>\n<p>\u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Flutter Add-to-App<\/h3>\n<p>Flutter Add-to-App \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 Android \u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Flutter \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043a\u043e\u043d, \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0432  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 Flutter Add-to-App. \u0412\u0435\u0434\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043f\u043e\u043b\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c: \u0432 Android \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <code>FlutterActivity<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 <code>Activity<\/code>, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 iOS \u2014 <code>FlutterViewController<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043c\u044b\u0441\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"bash\">    flutter create -t module --org com.example flutter_module<\/code><\/pre>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a .aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/p>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a gradle-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043b\u044e\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0435 \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0438\u043d\u0443\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK (\u0432\u0440\u044f\u0434 \u043b\u0438 \u044d\u0442\u043e \u043c\u0438\u043d\u0443\u0441 \u0434\u043b\u044f Flutter-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>.aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/h4>\n<p>\u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c .aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u0432 Android-\u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c .aar \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043d\u0438\u043c:<\/p>\n<pre><code class=\"bash\">     flutter build aar<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 <code>app\/build.gradle<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48f\/b3b\/ec4\/48fb3bec4b64937babb6e82f80b94afa.png\" width=\"2522\" height=\"1438\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/48f\/b3b\/ec4\/48fb3bec4b64937babb6e82f80b94afa.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<\/li>\n<\/ol>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>.gradle<\/code> \u0444\u0430\u0439\u043b\u044b, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>.gradle.kts<\/code> \u0444\u0430\u0439\u043b\u044b, \u043d\u0443\u0436\u043d\u043e: <\/p>\n<ul>\n<li>\n<p>\u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>gradle<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"kotlin\">    maven {       url '..\/flutter_module\/build\/host\/outputs\/repo'     }     maven {       url 'http:\/\/download.flutter.io'     }<\/code><\/pre>\n<p>\u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"kotlin\">    maven(      url = \"..\/flutter_module\/build\/host\/outputs\/repo\"     )     maven(      url = \"https:\/\/storage.googleapis.com\/download.flutter.io\"     )<\/code><\/pre>\n<\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <code>settings.gradle.kt<\/code> \u0438 \u0431\u043b\u043e\u043a\u0430 <code>dependencyResolutionManagement<\/code> \u0432 \u043d\u0451\u043c. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u043e\u043a \u0435\u0441\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"diff\">  dependencyResolutionManagement {    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)    repositories {      google()      mavenCentral()      ++   maven( ++     url = \"..\/flutter_module\/build\/host\/outputs\/repo\" ++   ) ++   maven( ++     url = \"https:\/\/storage.googleapis.com\/download.flutter.io\" ++   )     }   }<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u0430\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432  Android-\u043f\u0440\u043e\u0435\u043a\u0442. \u0421\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u0438 \u043c\u044b <code>.gradle<\/code> \u0438\u043b\u0438 <code>.gradle.kts<\/code> \u0444\u0430\u0439\u043b\u044b.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 .gradle-\u0444\u0430\u0439\u043b\u044b<\/h3>\n<ol>\n<li>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 <code>settings.gradle<\/code>:<\/p>\n<pre><code class=\"kotlin\"> include ':app'                           \/\/ assumed existing content  setBinding(new Binding([gradle: this]))  \/\/ new  evaluate(new File(                       \/\/ new      settingsDir.parentFile,              \/\/ new      'flutter_module\/.android\/include_flutter.groovy' \/\/ new  ))            <\/code><\/pre>\n<\/li>\n<li>\n<p>\u041a\u043e\u0434 \u043d\u0438\u0436\u0435 \u2014 \u0432 <code>app\/build.gradle<\/code> \u0432\u043d\u0443\u0442\u0440\u044c \u0431\u043b\u043e\u043a\u0430 <code>dependencies<\/code>:<\/p>\n<pre><code class=\"kotlin\">     implementation project(':flutter')<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 .gradle.kts \u0444\u0430\u0439\u043b\u044b<\/h3>\n<blockquote>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 gradle \u043d\u0430 gradle.kts \u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/migrating_from_groovy_to_kotlin_dsl.html#script_file_naming\">\u0442\u0443\u0442<\/a>.<\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432 \u043a\u043e\u0440\u043d\u0435 Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 gradle-\u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>flutter_init.gradle<\/code>) \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\"> include ':app'                           \/\/ assumed existing content  setBinding(new Binding([gradle: this]))  \/\/ new  evaluate(new File(                       \/\/ new      settingsDir.parentFile,              \/\/ new      'flutter_module\/.android\/include_flutter.groovy'    \/\/ new  ))            <\/code><\/pre>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 <code>settings.gradle.kts<\/code>:<\/p>\n<pre><code class=\"kotlin\"> apply(\"flutter_init.gradle\")<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0431\u043b\u043e\u043a\u0435 <code>dependencyResolutionManagement<\/code> \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    dependencyResolutionManagement { --      repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)          ++      repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)       repositories {         google()         mavenCentral() ++        maven ( ++          url= \"https:\/\/storage.googleapis.com\/download.flutter.io\" ++        )       }     }<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 <code>app\/build.gradle.kts<\/code> (\u0432 \u0431\u043b\u043e\u043a <code>dependencies<\/code>):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">    implementation(project(\":flutter\"))<\/code><\/pre>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Android, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u043e\u043d\u0438 \u0447\u0430\u0449\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445) \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c CocoaPods<\/p>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043b\u044e\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0436\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0438\u043d\u0443\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c CocoaPods<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u0430\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e <code>Podfile<\/code> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"ruby\">     flutter_application_path = '..\/fluter_module' # flutter_module \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f      load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')<\/code><\/pre>\n<blockquote>\n<p> \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u0442 <code>Podfile<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>pod init<\/code>.<\/p>\n<\/blockquote>\n<blockquote>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 <code>pod<\/code>, \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 Project Format \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 <code>Xcode 14.0-compatible<\/code>. \u041f\u043e\u043d\u0438\u0436\u0430\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043e 13.<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a <code>target 'MyApp' do<\/code> (<code>MyApp<\/code> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    target 'MyApp' do         ... ++      install_all_flutter_pods(flutter_application_path)     end<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a <code>post_install<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    post_install do |installer|         ... ++      flutter_post_install(installer) if defined?(flutter_post_install)     end<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>pod install<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e<\/strong>: <\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c XCode, \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u044b\u043b \u043e\u0442\u043a\u0440\u044b\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>rm -rf ~\/Library\/Developer\/Xcode\/DerivedData<\/code> \u2014 \u0442\u0430\u043a \u043c\u044b \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0431\u043e\u0440\u043e\u043a, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 Xcode \u0440\u0430\u043d\u044c\u0448\u0435, \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Xcode \u00ab\u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f\u00bb \u043d\u0430\u0448\u0438\u043c \u0431\u0438\u043b\u0434\u043e\u043c \u0441 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043b\u0438\u0441\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c XCode \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>open MyApp.xcworkspace<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0437\u0430\u0432\u0435\u0442\u043d\u043e\u0435  <code>Build Succeeded<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>Embedded Framework<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u043a\u0430\u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Flutter \u0432\u043d\u0443\u0442\u0440\u0438 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"> flutter build ios-framework --output=path\/to\/your\/ios_app\/MyApp\/Flutter\/<\/code><\/pre>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c  \u0432 <code>Targets->\u0412\u0430\u0448\u0435_\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435->Build Settings<\/code> \u0438 \u0438\u0449\u0435\u043c <code>\"Framework search paths\"<\/code>.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/59a\/621\/c0c\/59a621c0c3d0a3fe4f668ba04a79cd3f.png\" width=\"2522\" height=\"1050\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59a\/621\/c0c\/59a621c0c3d0a3fe4f668ba04a79cd3f.png\"\/><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>\"$(PROJECT_DIR)\/Flutter\/{configuration}\/\"<\/code>, \u0433\u0434\u0435 configuration \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: <code>\"Debug\"<\/code>, <code>\"Profile\"<\/code>, <code>\"Release\"<\/code>.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/70c\/1e8\/309\/70c1e830965178478ecb58834bb5fd40.png\" width=\"2522\" height=\"802\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/70c\/1e8\/309\/70c1e830965178478ecb58834bb5fd40.png\"\/><\/figure>\n<h3>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. Android<\/h3>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h4>\n<p>\u041f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u00ab\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043b\u0438\u0446\u0430\u043c\u0438\u00bb:<\/p>\n<ul>\n<li>\n<p><code>FlutterEngine<\/code> \u2014 \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a Flutter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c. \u041e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p><code>FlutterActivity<\/code>, <code>FlutterFragment<\/code> \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041e\u043d\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 <code>Activity<\/code> \u0438 <code>Fragment<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0431\u0430 \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>FlutterEngineProvider<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>FlutterEngine<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterEngine<\/code> \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f: <\/p>\n<ul>\n<li>\n<p>\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>main.dart<\/code> \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>main()<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>\/<\/code>).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>FlutterEngine<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043a\u043e\u0434 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>FlutterEngine<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code>, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c Activity<\/h4>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>FlutterActivity<\/code> \u0432 <code>AndroidManifest<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 <code>Application<\/code>:<\/p>\n<pre><code class=\"xml\">    &lt;activity         android:name=\"io.flutter.embedding.android.FlutterActivity\"         android:theme=\"@style\/LaunchTheme\"         android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"         android:hardwareAccelerated=\"true\"         android:windowSoftInputMode=\"adjustResize\"     \/><\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448 Activity. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>startActivity<\/code>:<\/p>\n<pre><code class=\"kotlin\">    myButton.setOnClickListener {       startActivity(         this,         FlutterActivity.createDefaultIntent(this),         null,       )     }<\/code><\/pre>\n<p>\u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>FlutterEngine<\/code>. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0440\u043e\u0443\u0442:<\/p>\n<pre><code class=\"kotlin\">    myButton.setOnClickListener {       startActivity(         this,         FlutterActivity           .withNewEngine()           .initialRoute(\"\/my_route\")           .build(this),         null,       )     }<\/code><\/pre>\n<p>\u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435. \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u0430, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u041a\u043e\u0440\u0437\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f? \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u0430, \u0430 \u044d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0443\u043c\u0435\u0441\u0442\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a.<\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430<\/h4>\n<p>\u041f\u043e\u0434 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0433\u0440\u0435\u0432\u00bb \u0434\u0432\u0438\u0436\u043a\u0430 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0446\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 Flutter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u043e\u043f\u043b\u0430\u0442\u044b), \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0448\u0451\u043b \u0432 \u041a\u043e\u0440\u0437\u0438\u043d\u0443.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>Application<\/code>:<\/p>\n<p><code>AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"diff\">&lt;application -- android:name=\".Application\" ++ android:name=\".MainApplication\"        <\/code><\/pre>\n<p><code>MainApplication.kt<\/code>:<\/p>\n<pre><code class=\"kotlin\">class MainApplication : Application() {   lateinit var flutterEngine : FlutterEngine    companion object Factory {     \/\/ \u0417\u0430\u0434\u0430\u0451\u043c \u0434\u043b\u044f id \u0434\u0432\u0438\u0436\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u044e\u0431\u043e\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e:     val flutterEngineId = \"id_of_flutter_engine\"   }    override fun onCreate() {     super.onCreate()      flutterEngine = FlutterEngine(this)      \/\/ \u0422\u0443\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442     flutterEngine.navigationChannel.setInitialRoute(\"your\/route\/here\")      \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c Dart-\u043a\u043e\u0434     flutterEngine.dartExecutor.executeDartEntrypoint(       DartExecutor.DartEntrypoint.createDefault()     )      \/\/ \u041a\u0435\u0448\u0438\u0440\u0443\u0435\u043c \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434 \u043d\u0430\u0448\u0438\u043c id     FlutterEngineCache       .getInstance()       .put(flutterEngineId, flutterEngine)   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u044b\u0437\u043e\u0432 <code>FlutterActivity<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">     startActivity(         this,         FlutterActivity.withCachedEngine(MainApplication.flutterEngineId).build(this),         null,     )<\/code><\/pre>\n<blockquote>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u0434\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e\u0441\u044f \u0432 <code>main<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>flutterEngine.dartExecutor.executeDartEntrypoint<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<h4>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c Fragment<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.<\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0432 View:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"xml\">    &lt;androidx.fragment.app.FragmentContainerView          xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"         android:id=\"@+id\/fragment_container_view\"         android:tag=\"flutter_fragment\"         android:layout_width=\"match_parent\"         android:layout_height=\"300dp\"         android:name=\"io.flutter.embedding.android.FlutterFragment\" \/><\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c <code>FragmentActivity<\/code> \u043a\u0430\u043a \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0442\u043e\u0439 Activity, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Fragment:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">    class MainActivity : FragmentActivity() {         ...     }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0439\u0442\u0435 <code>FlutterFragment<\/code> \u0432\u043e View:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class MainActivity : FragmentActivity() {     companion object {         private const val TAG_FLUTTER_FRAGMENT = \"flutter_fragment\"     }           private var flutterFragment: FlutterFragment? = null      override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContentView(R.layout.main_screen)         val fragmentManager: FragmentManager = supportFragmentManager         flutterFragment =             fragmentManager.findFragmentByTag(TAG_FLUTTER_FRAGMENT) as? FlutterFragment         if (flutterFragment == null) {             val newFragment = FlutterFragment.createDefault()                          \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u0432\u0438\u0436\u043e\u043a.             \/\/             \/\/ val newFragment = FlutterFragment.withCachedEngine(MainApplication.flutterEngineId).build() as? FlutterFragment              \/\/ \u0410 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e.             \/\/             \/\/ val flutterFragment = FlutterFragment.withNewEngine()             \/\/ .transparencyMode(TransparencyMode.transparent)             \/\/ .build()              \/\/ \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u043b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c              \/\/ \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u043d\u0434\u0435\u0440\u0430                         \/\/ val flutterFragment = FlutterFragment.withNewEngine()             \/\/ .renderMode(RenderMode.texture)             \/\/ .build()              flutterFragment = newFragment             fragmentManager.beginTransaction()                 .add(R.id.fragment_container_view, newFragment, TAG_FLUTTER_FRAGMENT).commit()         }     }      \/\/\/ \u041c\u0435\u0442\u043e\u0434\u044b \u043d\u0438\u0436\u0435 \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u041e\u0421, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438.     override fun onPostResume() {       super.onPostResume()       flutterFragment?.onPostResume()     }      override fun onNewIntent(@NonNull intent: Intent) {       flutterFragment?.onNewIntent(intent)     }      override fun onBackPressed() {       super.onBackPressed()       flutterFragment?.onBackPressed()     }      override fun onRequestPermissionsResult(       requestCode: Int,       permissions: Array&lt;String?>,       grantResults: IntArray     ) {       super.onRequestPermissionsResult(         requestCode,         permissions,         grantResults       )       flutterFragment?.onRequestPermissionsResult(         requestCode,         permissions,         grantResults       )     }      override fun onActivityResult(       requestCode: Int,       resultCode: Int,       data: Intent?     ) {       super.onActivityResult(requestCode, resultCode, data)       flutterFragment?.onActivityResult(         requestCode,         resultCode,         data       )     }      override fun onUserLeaveHint() {       super.onUserLeaveHint()       flutterFragment?.onUserLeaveHint()     }      override fun onTrimMemory(level: Int) {       super.onTrimMemory(level)       flutterFragment?.onTrimMemory(level)     } }<\/code><\/pre>\n<h4>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c Fragment (\u0432 \u0440\u043e\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u0430)<\/h4>\n<p>\u0412 Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 Activity \u0438 \u043c\u043d\u043e\u0433\u043e Fragment, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>\u0412 \u0441\u0438\u043b\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>FlutterFragment<\/code> \u043c\u043e\u0433\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u043b\u0434\u0435\u0440\u044b (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435), \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \u0433\u0440\u0430\u0444 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u0439\u0434\u0451\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, <strong>\u043d\u0430\u0448\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/strong> \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f Fragment. <\/p>\n<p><strong>\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0446\u0435\u043b\u044c<\/strong> \u2014 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043d\u0430\u0448 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (\u044d\u043a\u0440\u0430\u043d\u043e\u0432).<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u0448 <code>FlutterFragment<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class FlutterExampleFragment : FlutterFragment() {  }<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u0435\u043c\u0443 Fragment \u043d\u0443\u0436\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435:<\/p>\n<pre><code class=\"kotlin\">class FlutterExampleFragment public constructor(     private val someViewModel: SomeViewModel ) : FlutterFragment() {  }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0438\u043b\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u0438 \u043c\u044b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>CachedEngineFragmentBuilder<\/code> \u0438\u043b\u0438 <code>NewEngineFragmentBuilder<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>engineId<\/code>):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class CustomCachedEngineFragmentBuilder(engineId: String) :     CachedEngineFragmentBuilder(FlutterExampleFragment::class.java, engineId) {      fun buildWithParam(mSomeViewModel: SomeViewModel): FlutterExampleFragment {         val frag = FlutterExampleFragment(mSomeViewModel)         \/\/\/ \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u00ab\u043f\u043e\u0434\u043a\u0430\u043f\u043e\u0442\u043d\u044b\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f          \/\/\/ \u0434\u043b\u044f Fragment, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a          \/\/\/ \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 Fragment \u0441\u0430\u043c\u0438\u043c \u0431\u0435\u0437 \u0431\u0438\u043b\u0434\u0435\u0440\u0430.                  frag.arguments = createArgs()          return frag     } }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>Fragment, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444, \u0431\u0443\u0434\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0438\u043b\u0438\u0449\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e <code>FlutterFragment<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0448 <code>FlutterFragment<\/code> \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043a\u0430\u043a \u044d\u043a\u0440\u0430\u043d \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0432 layout \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e Fragment \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?> &lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"     xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"     xmlns:tools=\"http:\/\/schemas.android.com\/tools\"     android:layout_width=\"match_parent\"     android:layout_height=\"match_parent\"     tools:context=\".fragments.example.ExampleFragment\">      &lt;androidx.fragment.app.FragmentContainerView         xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"         android:id=\"@+id\/flutter_example_fragment\"         android:tag=\"flutter_example_fragment\"         android:layout_width=\"match_parent\"         android:layout_height=\"match_parent\"         app:layout_constraintBottom_toBottomOf=\"parent\"         app:layout_constraintLeft_toLeftOf=\"parent\"         app:layout_constraintRight_toRightOf=\"parent\"         android:name=\"io.flutter.embedding.android.FlutterFragment\" \/> &lt;\/androidx.constraintlayout.widget.ConstraintLayout><\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <code>tag<\/code> \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043d\u0435\u043c\u0443 \u043c\u044b \u043d\u0430\u0439\u0434\u0451\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>FlutterFragment.<\/code><\/p>\n<ol start=\"4\">\n<li>\n<p>\u0421\u043b\u0435\u0434\u0443\u0449\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c <code>FlutterFragment<\/code> \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/p>\n<pre><code class=\"kotlin\">class ExampleFragment : Fragment() {    companion object {       \/\/ \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0442\u0435\u0433\u043e\u043c \u0438\u0437 layout.       private const val TAG_FLUTTER_FRAGMENT = \"flutter_example_fragment\"   }    private var flutterFragment: FlutterExampleFragment? = null    override fun onCreateView(     inflater: LayoutInflater, container: ViewGroup?,     savedInstanceState: Bundle? ): View {     val fragmentManager: FragmentManager = parentFragmentManager      flutterFragment = fragmentManager         .findFragmentByTag(TAG_FLUTTER_FRAGMENT) as? FlutterExampleFragment      \/\/\/ \u0412 \u0441\u0438\u043b\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u00ab\u0443\u0445\u043e\u0434\u0430\u00bb \u0441 \u044d\u043a\u0440\u0430\u043d\u0430     \/\/\/ \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c      \/\/\/ \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 - \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a MissingPluginException      \/\/\/ \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430.     \/\/\/ \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0440\u0430\u043d\u0435\u0435, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e      \/\/\/ \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043d\u043e\u0432\u043e.     if (flutterFragment != null) {         fragmentManager.beginTransaction().remove(flutterFragment as? FlutterFragment).commit()     }      \/\/\/ \u041f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0437\u0434\u0435\u0441\u044c id \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.     var newFlutterFragment = CustomCachedEngineFragmentBuilder(MainApplication.exampleModuleEngineId)     .buildWithParam(mSomeViewModel)      flutterFragment = newFlutterFragment     fragmentManager         .beginTransaction()         .add(             R.id.flutter_example_fragment,             newFlutterFragment,             TAG_FLUTTER_FRAGMENT         )         .commit()      return binding.root   } }<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. iOS<\/h3>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h4>\n<p>\u00ab\u0414\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043b\u0438\u0446\u0430\u00bb \u0432 iOS \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0435 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 Android:<\/p>\n<ul>\n<li>\n<p><code>FlutterEngine<\/code> \u2014 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043d\u0430\u043c \u0434\u0432\u0438\u0436\u043e\u043a Flutter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p><code>FlutterViewController<\/code> \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>UIViewController<\/code> \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b \u044d\u0442\u0430\u043f\u0430\u043c \u043d\u0430 Android:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterEngine<\/code> \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>FlutterEngine<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043a\u043e\u0434 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterViewController<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>FlutterEngine<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 <code>FlutterViewController<\/code>, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>View<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430<\/h4>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Flutter-\u044d\u043a\u0440\u0430\u043d.<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0438\u0436\u043e\u043a:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"swift\">class FlutterDependencies: ObservableObject {     let flutterEngine = FlutterEngine(name: \"id_of_engine\")     init(){         \/\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a \u0441 \u0440\u043e\u0443\u0442\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 main.         flutterEngine.run()         \/\/ \u0421\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b iOS \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c Flutter.         GeneratedPluginRegistrant.register(with: self.flutterEngine);     } }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a <code>EnvironmentObject<\/code> \u043a \u0442\u043e\u043c\u0443 <code>View<\/code>, \u0433\u0434\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"swift\"> window.rootViewController = UIHostingController(      rootView: YourView().environmentObject(FlutterDependencies())      )<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>FlutterDependencies<\/code> \u043a\u0430\u043a \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 <code>View<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"swift\">    struct TaskListView: View {         @EnvironmentObject var flutterDependencies: FlutterDependencies         ...     }<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 Flutter-\u044d\u043a\u0440\u0430\u043d\u0430:<\/p>\n<pre><code class=\"swift\">func showFlutter() {             guard         let windowScene = UIApplication.shared.connectedScenes             .first(where: { $0.activationState == .foregroundActive &amp;&amp; $0 is UIWindowScene }) as? UIWindowScene,         let window = windowScene.windows.first(where: \\.isKeyWindow),         let rootViewController = window.rootViewController     else { return }          let flutterViewController = FlutterViewController(         \/\/\/ \u041c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a - \u0442\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0441 \u043d\u0443\u043b\u044f.         engine: flutterDependencies.flutterEngine,         nibName: nil,         bundle: nil)     \/\/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0438\u043b\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f - \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e.     flutterViewController.modalPresentationStyle = .pageSheet     flutterViewController.isViewOpaque = false          rootViewController.present(flutterViewController, animated: true) }<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0439 \u044d\u043a\u0440\u0430\u043d:<\/p>\n<pre><code class=\"swift\">    Button(action: {                 showFlutter()             }) {                 Text(\"Open Flutter\")             }<\/code><\/pre>\n<\/li>\n<\/ol>\n<h4>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u0434\u0435\u0431\u0430\u0433-\u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0432\u044f\u0437\u044c Flutter \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c <code>AppDelegate<\/code> \u043e\u0442 <code>FlutterAppDelegate<\/code>.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u0438 \u044d\u043a\u0440\u0430\u043d\u0430<\/h4>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0432 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 Fragment \u0432 Android.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u0448\u0430\u0433\u0430, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Flutter-\u0434\u0432\u0438\u0436\u043a\u0430 \u0438 \u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u0432 \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<ol>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u0451\u0440\u0442\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0438\u043b\u0438\u0449\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044f. \u042d\u0442\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <code>UIViewControllerRepresentable<\/code> \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0451 \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0432\u0451\u0440\u0441\u0442\u043a\u0443. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0438\u0436\u043e\u043a \u2014 \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"swift\">    struct FlutterViewControllerWrapper: UIViewControllerRepresentable {          var engine: FlutterEngine          func makeUIViewController(context: Context) -> FlutterViewController {             return FlutterViewController(engine: engine, nibName: nil, bundle: nil)         }          func updateUIViewController(_ uiViewController: FlutterViewController, context: Context) {             \/\/ \u041c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c              \/\/ \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.         }     }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0451\u0440\u0441\u0442\u043a\u0438:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"swift\">    var body: some View {         NavigationView {             List {                 Button(action: { onPressed() }) {                   Text(\"Some button\")                 }                 \/\/\/ fluttenDependencies - \u044d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435.                 FlutterViewControllerWrapper(engine: flutterDependencies.engine).frame(width: 200, height: 300)             }             .navigationBarTitle(Text(\"Example\"))         }     }<\/code><\/pre>\n<h3>\u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/h3>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438 \u044d\u0442\u043e\u0433\u043e? \u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u041a\u043e\u0440\u0437\u0438\u043d\u044b \u2014 \u0442\u0443\u0434\u0430 \u043d\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043a\u0430\u043a \u0442\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c?<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<\/th>\n<th data-colwidth=\"234\" width=\"234\">\n<p>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/p>\n<\/th>\n<th>\n<p>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 <code>main()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 <code>MethodChannel<\/code>, <code>EventChannel<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043b\u044e\u0441\u044b<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0438\u043d\u0443\u0441\u044b<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/h4>\n<p>\u041d\u0430\u0434\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430.<\/p>\n<h3>\u0421 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c. Android<\/h3>\n<pre><code class=\"diff\">class MainApplication : Application(), Configuration.Provider {   lateinit var flutterEngine : FlutterEngine   companion object Factory {     val flutterEngineId = \"id_of_flutter_engine\"   }    override fun onCreate() {     super.onCreate()     flutterEngine = FlutterEngine(this)      flutterEngine.dartExecutor.executeDartEntrypoint( ++    DartExecutor.DartEntrypoint.createDefault(), ++    listOf(\"arg1\",\"arg2\"), ++  )      FlutterEngineCache       .getInstance()       .put(flutterEngineId, flutterEngine)   } }<\/code><\/pre>\n<h3>\u0411\u0435\u0437 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430<\/h3>\n<pre><code class=\"diff\">startActivity(     context,     FlutterActivity             .withNewEngine() ++          .dartEntrypointArgs(listOf(\"arg1\",\"arg2\"))     null, )<\/code><\/pre>\n<h3>iOS<\/h3>\n<pre><code class=\"diff\">    class FlutterDependencies: ObservableObject {         let flutterEngine = FlutterEngine(name: \"my flutter engine\")         init(){             flutterEngine.run(                 withEntrypoint: nil,                 libraryURI: nil,                 initialRoute: nil, ++              entrypointArgs: [\"arg1\", \"arg2\"]             )             GeneratedPluginRegistrant.register(with: self.flutterEngine);         }     }<\/code><\/pre>\n<h3>\u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Flutter<\/h3>\n<pre><code class=\"dart\">void main(List&lt;String> args) {   runApp(MyApp(args: args)); }<\/code><\/pre>\n<h4>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b<\/h4>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b.<\/p>\n<h3>Android<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 Activity.<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e Activity, \u0447\u044c\u0438\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u0431\u0443\u0434\u0435\u0442 <code>FlutterActivity<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class FlutterEntryActivity : FlutterActivity() {}<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0451 \u0432 <code>AndroidManifest<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"xml\">  &lt;activity         android:name=\"your.package.name.FlutterEntryActivity\"         android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"         android:hardwareAccelerated=\"true\"         android:windowSoftInputMode=\"adjustResize\"   \/><\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430) \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <code>Extras<\/code> (\u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u043c). <\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Activity:<\/p>\n<pre><code class=\"kotlin\">class FlutterEntryActivity : FlutterActivity() {  companion object Factory {      const val ARG_KEY = \"flutter_arg\"       fun withState(context: Context, state: String): Intent {          \/\/ \u0422\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 FlutterActivity \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 (\u0443 \u043d\u0430\u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441),          \/\/ \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c NewEngineIntentBuilder, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0438\u043f \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438          \/\/ \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u0438\u043d\u0442\u0435\u043d\u0442.          return NewEngineIntentBuilder(              FlutterEntryActivity::class.java          ).build(context).putExtra(ARG_KEY, state)           \/\/ \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c           \/\/ CachedEngineIntentBuilder - \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f          \/\/ id \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430        }      }  }<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 Activity \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">    \/\/\/ \u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u042d\u0422\u041e\u0422 \u043c\u0435\u0442\u043e\u0434 (\u0441 \u042d\u0422\u0418\u041c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c). \u0418\u043d\u0430\u0447\u0435      \/\/\/ \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         val engine = flutterEngine ?: return          \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u0430\u043d\u0430\u043b \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c         val channel =             MethodChannel(engine.dartExecutor.binaryMessenger, \"your_channel_name\")         val arg = intent.getStringExtra(FlutterEntryActivity.ARG_KEY) ?: throw Exception()         \/\/ \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0438\u0445 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443.         channel.invokeMethod(\"sendInputArgs\", arg)     }<\/code><\/pre>\n<blockquote>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0445 \u00ab\u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f\u00bb \u0432\u043e Flutter-\u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 Activity.<\/p>\n<\/blockquote>\n<ol start=\"5\">\n<li>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>MethodChannel<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">++ class FlutterEntryActivity : FlutterActivity(), MethodCallHandler {      companion object Factory {         const val ARG_KEY = \"flutter_arg\"          fun withState(context: Context, state: String): Intent {             return CachedEngineIntentBuilder(                 FlutterEntryActivity::class.java, ENGINE_ID,             ).build(context).putExtra(ARG_KEY, state)         }     }      override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         val engine = flutterEngine ?: return         val channel = MethodChannel(engine.dartExecutor.binaryMessenger, \"android_app\") ++      channel.setMethodCallHandler(this)         val arg = intent.getStringExtra(FlutterEntryActivity.ARG_KEY) ?: throw Exception()         channel.invokeMethod(\"sendInputArgs\", arg)     }  ++  override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { ++      when (call.method) { ++          \"sendDataToNativeSide\" -> { ++              \/\/ \u0432\u0430\u0448\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 ++          } ++      } ++  } }<\/code><\/pre>\n<h3>iOS<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 iOS \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>showFlutter<\/code>:<\/p>\n<pre><code class=\"diff\">   func showFlutter() {        guard            let windowScene = UIApplication.shared.connectedScenes                .first(where: { $0.activationState == .foregroundActive &amp;&amp; $0 is UIWindowScene }) as? UIWindowScene,            let window = windowScene.windows.first(where: \\.isKeyWindow),            let rootViewController = window.rootViewController        else { return }         let flutterViewController = FlutterViewController(            engine: flutterDependencies.flutterEngine,            nibName: nil,            bundle: nil)        flutterViewController.modalPresentationStyle = .pageSheet        flutterViewController.isViewOpaque = false        rootViewController.present(flutterViewController, animated: true)  ++      let channel = FlutterMethodChannel( ++          name: \"ios_app\",  ++          binaryMessenger: flutterViewController.binaryMessenger ++      ) ++      channel.invokeMethod(\"passArgs\", arguments: \"hello from ios\")    }<\/code><\/pre>\n<p>\u0418, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Flutter:<\/p>\n<pre><code class=\"dart\">    MethodChannel _channel = MethodChannel('ios_app');     _channel.setMethodCallHandler((call) {       switch (call.method) {         case 'passArgs':           print(call.arguments);           break;         default:           throw MissingPluginException();       }     });<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<pre><code class=\"diff\">    func showFlutter() {         guard             let windowScene = UIApplication.shared.connectedScenes                 .first(where: { $0.activationState == .foregroundActive &amp;&amp; $0 is UIWindowScene }) as? UIWindowScene,             let window = windowScene.windows.first(where: \\.isKeyWindow),             let rootViewController = window.rootViewController         else { return }          let flutterViewController = FlutterViewController(             engine: flutterDependencies.flutterEngine,             nibName: nil,             bundle: nil)         flutterViewController.modalPresentationStyle = .pageSheet         flutterViewController.isViewOpaque = false         rootViewController.present(flutterViewController, animated: true)  ++      let channel = FlutterMethodChannel( ++          name: \"ios_app\",  ++          binaryMessenger: flutterViewController.binaryMessenger ++      ) ++      channel.setMethodCallHandler( ++          { ++              (call: FlutterMethodCall, result: FlutterResult) -> Void in ++              switch (call.method) { ++              case \"sendDataToNativeSide\": ++                  \/\/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 ++                  break ++              default: ++                  result(FlutterMethodNotImplemented) ++              } ++          } ++      )     }<\/code><\/pre>\n<h3>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438?<\/h3>\n<p>\u041d\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043c\u043e\u0434\u0443\u043b\u044c, \u043d\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0434\u0443\u043b\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f (\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f). \u041c\u043e\u0434\u0443\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u043c\u043e\u0434\u0443\u043b\u0438 (<code>flutter create -t module --org com.example first_module<\/code>)<br \/> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c4\/ed7\/61d\/0c4ed761dc95e5dcaefd45c33ffba690.png\" width=\"2522\" height=\"1438\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c4\/ed7\/61d\/0c4ed761dc95e5dcaefd45c33ffba690.png\"\/><\/figure>\n<\/li>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<pre><code class=\"dart\">   import 'package:first_module\/main.dart' as first;    import 'package:second_module\/main.dart' as second;     \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044e main \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u043c    void main() {}     \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438    @pragma('vm:entry-point')     void startFirstModule(List&lt;String> args) {      first.main();    }     @pragma('vm:entry-point')    void startSecondModule(List&lt;String> args) {      second.main();    }<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043b\u043e \u0437\u0430 \u043c\u0430\u043b\u044b\u043c \u2014 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430.<\/p>\n<h4>Android<\/h4>\n<h3>\u0421 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u0430<\/h3>\n<p>\u0412 <code>MainApplication.kt<\/code> (\u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0433\u0434\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u043e\u043a) \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u0432\u0438\u0436\u043a\u0443 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c:<\/p>\n<pre><code class=\"kotlin\">class MainApplication : Application() {     lateinit var firstModuleFlutterEngine: FlutterEngine     lateinit var secondModuleFlutterEngine: FlutterEngine      companion object Factory {         val flutterFirstModuleEngineId = \"id_of_flutter_engine\"         val flutterSecondModuleEngineId = \"id_of_second_flutter_engine\"     }      override fun onCreate() {         super.onCreate()          firstModuleFlutterEngine = FlutterEngine(this)          val pathToBundle = FlutterInjector.instance().flutterLoader().findAppBundlePath()          firstModuleFlutterEngine.dartExecutor.executeDartEntrypoint(             DartExecutor.DartEntrypoint(                 pathToBundle,                 \"startFirstModule\", \/\/ \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u00ab\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442\u00bb \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c.             )         )          secondModuleFlutterEngine = FlutterEngine(this)           secondModuleFlutterEngine.dartExecutor.executeDartEntrypoint(             DartExecutor.DartEntrypoint(                 pathToBundle,                  \"startSecondModule\",             )         )          FlutterEngineCache             .getInstance()             .put(flutterFirstModuleEngineId, firstModuleFlutterEngine)         FlutterEngineCache             .getInstance()             .put(flutterSecondModuleEngineId, secondModuleFlutterEngine)     } }<\/code><\/pre>\n<h3>\u0411\u0435\u0437 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u0430<\/h3>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0444\u0430\u0431\u0440\u0438\u043a\u0430 <code>FlutterActivity<\/code> \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c entrypoint-\u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c.<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e Activity, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0442 <code>FlutterActivity<\/code>:<\/p>\n<p><code>AndroidManifest.xml<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"xml\">&lt;activity  android:name=\"com.example.flt_integration_test.FlutterEntryActivity\" android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"  android:hardwareAccelerated=\"true\"  android:windowSoftInputMode=\"adjustResize\" \/> <\/code><\/pre>\n<p><code>FlutterEntryActivity.kt<\/code>:<\/p>\n<pre><code class=\"kotlin\"> class FlutterEntryActivity : FlutterActivity() {  }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>getDartEntrypointFunctionName<\/code>:<\/p>\n<pre><code class=\"kotlin\"> class FlutterEntryActivity : FlutterActivity() {      override fun getDartEntrypointFunctionName() :String {          return \"startFirstModule\"      }  }<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Activity:<\/p>\n<pre><code class=\"kotlin\">     startActivity(          context,          FlutterActivity.NewEngineIntentBuilder(              FlutterEntryActivity::class.java).build(context),          null,      )<\/code><\/pre>\n<\/li>\n<\/ol>\n<h4>iOS<\/h4>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c entrypoint \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>run<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">import SwiftUI import Flutter import FlutterPluginRegistrant  class FlutterDependencies: ObservableObject {     let flutterEngine = FlutterEngine(name: \"my flutter engine\")   init(){ --    flutterEngine.run() ++    flutterEngine.run(withEntrypoint: \"startFirstModule\")         GeneratedPluginRegistrant.register(with: self.flutterEngine);   } }  @main struct MyApp: App {     @StateObject var flutterDependencies = FlutterDependencies()         var body: some Scene {             WindowGroup {                 ContentView().environmentObject(flutterDependencies)             }         } }<\/code><\/pre>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u043d\u043e \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0435\u0449\u0451 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c.<\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FlutterEngineGroup<\/h4>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0433\u0440\u0435\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>FlutterEngineGroup<\/code>.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 FlutterEngineGroup<\/h3>\n<p>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043d\u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u0449\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c (\u0430\u0441\u0441\u0435\u0442\u044b, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Flutter) \u2014 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u0435\u0449\u0438, \u043e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438.<\/p>\n<p>\u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u043d \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u2014 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<h3>Android<\/h3>\n<ol>\n<li>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u2014 \u044d\u0442\u043e <code>Application<\/code>-\u043a\u043b\u0430\u0441\u0441. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u0435 \u0434\u043b\u044f <code>FlutterEngineGroup<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043c id \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class MainApplication : Application() {     \/\/ \u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0441 \u043e\u0431\u0449\u0438\u043c \u0441\u043a\u043e\u0443\u043f\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.     lateinit var engineGroup: FlutterEngineGroup      \/\/ Id \u0434\u0432\u0438\u0436\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.     companion object Factory {         const val firstNoduleEngineId = \"first_engine\"         const val secondNoduleEngineId = \"second_engine\"     } }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">    override fun onCreate() {         super.onCreate()         engineGroup = FlutterEngineGroup(this)         val pathToBundle = FlutterInjector.instance().flutterLoader().findAppBundlePath()          \/\/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0432\u0438\u0436\u043a\u0438         val firstEngine = engineGroup.createAndRunEngine(             this,             DartExecutor.DartEntrypoint(                 pathToBundle,                 \"startFirstModule\",             ),         )         val secondEngine = engineGroup.createAndRunEngine(             this,             DartExecutor.DartEntrypoint(                 pathToBundle,                 \"startSecondModule\",              ),         )          \/\/\/ \u0418 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u0432 \u043a\u0435\u0448\u0435.         FlutterEngineCache.getInstance().put(             firstNoduleEngineId,             firstEngine,         )         FlutterEngineCache.getInstance().put(             secondNoduleEngineId,             secondEngine,         )     }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0432\u044b\u0448\u0435. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0435\u0441\u0442\u044c \u2014 \u043d\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0438\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>engineGroup<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438 \u0431\u0435\u0440\u0435\u0436\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<\/li>\n<\/ol>\n<h3>iOS<\/h3>\n<p>\u041e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 <code>FlutterDependencies<\/code>, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435:<\/p>\n<pre><code class=\"swift\">class FlutterDependencies: ObservableObject {     let flutterEngineGroup = FlutterEngineGroup(         name: \"flutter_engine_group\",         project: FlutterDartProject()     )          lazy var addTodoFlutterEngine: FlutterEngine = {         return flutterEngineGroup.makeEngine(             withEntrypoint: \"startAddModule\",             libraryURI: \"package:flutter_module\/main.dart\",             initialRoute: \"\/\"         )     }()          lazy var editTodoFlutterEngine: FlutterEngine = {         return flutterEngineGroup.makeEngine(             withEntrypoint: \"startEditModule\",             libraryURI: \"package:flutter_module\/main.dart\",             initialRoute: \"\/\"         )     }()          init(){         addTodoFlutterEngine.run()         editTodoFlutterEngine.run()         GeneratedPluginRegistrant.register(with: self.addTodoFlutterEngine)         GeneratedPluginRegistrant.register(with: self.editTodoFlutterEngine)     } }<\/code><\/pre>\n<h3>\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 (\u043a\u0440\u043e\u043c\u0435 \u0435\u0433\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u043c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0418 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\u043c\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438, \u0431\u0443\u0434\u0443\u0447\u0438 Flutter-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.<\/p>\n<h4>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h4>\n<p>\u0414\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>flutter attach<\/code>. \u041e\u043d\u0430 \u0438\u0449\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 <code>FlutterEngine<\/code> \u0438 \u00ab\u043f\u0440\u0438\u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f\u00bb \u043a \u043d\u0438\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043d\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c hot restart\/reload, \u0447\u0438\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u043d\u0438\u0446\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u0432\u0438\u0436\u043e\u043a \u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>flutter attach<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0435\u0449\u0451 \u043e\u0434\u043d\u043e Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435), \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0435\u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a69\/c85\/30b\/a69c8530bb9fb15718fa1612d2012a2f.png\" width=\"2522\" height=\"628\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a69\/c85\/30b\/a69c8530bb9fb15718fa1612d2012a2f.png\"\/><\/figure>\n<\/li>\n<\/ol>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ul>\n<li>\n<p>\u0443\u043a\u0430\u0437\u0430\u0442\u044c id \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0430\u043c\u044b\u0439 \u00ab\u0441\u0432\u0435\u0436\u0438\u0439\u00bb \u043f\u043e\u0440\u0442 (\u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 iOS (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 <a href=\"https:\/\/github.com\/flutter\/flutter\/issues\/119549\">\u0442\u0443\u0442<\/a>))<\/p>\n<\/li>\n<\/ul>\n<ol start=\"6\">\n<li>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DevTools, hot restart\/reload \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0438 \u0434\u0435\u0431\u0430\u0433-\u0440\u0435\u0436\u0438\u043c\u0430 \u0432 Flutter.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0451<\/h3>\n<p>\u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Flutter Add-to-App. <\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u0442\u0435\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u0434\u0435\u0440\u0436\u0438\u0442\u0435 <a href=\"https:\/\/github.com\/Sadhorsephile\/flutter-add-to-app-example\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<blockquote>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043f\u0440\u043e Flutter \u2014 \u0432 Telegram-\u043a\u0430\u043d\u0430\u043b\u0435 Surf Flutter Team.\u00a0<\/p>\n<p>\u041a\u0435\u0439\u0441\u044b, \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 Flutter Surf \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.\u00a0<a href=\"https:\/\/t.me\/+4Omig4bIx9dkZmYy\"><strong>\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c<\/strong><\/a>!<\/p>\n<\/blockquote>\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\/822693\/\"> https:\/\/habr.com\/ru\/articles\/822693\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435, \u0447\u0435\u043c \u0434\u0432\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442  \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Flutter. \u041d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u044f. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0432 \u043b\u0443\u0447\u0430\u0445 \u0441\u043e\u0444\u0438\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>Flutter Add-to-App<\/strong> \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 Surf Flutter Team. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u0430 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041e \u0447\u0451\u043c \u0441\u0442\u0430\u0442\u044c\u044f<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Flutter Add-to-App \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d \u043d\u0443\u0436\u0435\u043d;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 Android \u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0438\u0434\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043a\u0430\u043a \u044d\u043a\u0440\u0430\u043d, \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e);<\/p>\n<\/li>\n<li>\n<p>\u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Flutter Add-to-App<\/h3>\n<p>Flutter Add-to-App \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 Android \u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Flutter \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043a\u043e\u043d, \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0432  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 Flutter Add-to-App. \u0412\u0435\u0434\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043f\u043e\u043b\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c: \u0432 Android \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <code>FlutterActivity<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 <code>Activity<\/code>, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 iOS \u2014 <code>FlutterViewController<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043c\u044b\u0441\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"bash\">    flutter create -t module --org com.example flutter_module<\/code><\/pre>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a .aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/p>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a gradle-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043b\u044e\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0435 \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0438\u043d\u0443\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK (\u0432\u0440\u044f\u0434 \u043b\u0438 \u044d\u0442\u043e \u043c\u0438\u043d\u0443\u0441 \u0434\u043b\u044f Flutter-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>.aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/h4>\n<p>\u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c .aar-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u0432 Android-\u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c .aar \u0438\u0437 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043d\u0438\u043c:<\/p>\n<pre><code class=\"bash\">     flutter build aar<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 <code>app\/build.gradle<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<\/li>\n<\/ol>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>.gradle<\/code> \u0444\u0430\u0439\u043b\u044b, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>.gradle.kts<\/code> \u0444\u0430\u0439\u043b\u044b, \u043d\u0443\u0436\u043d\u043e: <\/p>\n<ul>\n<li>\n<p>\u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>gradle<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"kotlin\">    maven {       url '..\/flutter_module\/build\/host\/outputs\/repo'     }     maven {       url 'http:\/\/download.flutter.io'     }<\/code><\/pre>\n<p>\u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"kotlin\">    maven(      url = \"..\/flutter_module\/build\/host\/outputs\/repo\"     )     maven(      url = \"https:\/\/storage.googleapis.com\/download.flutter.io\"     )<\/code><\/pre>\n<\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <code>settings.gradle.kt<\/code> \u0438 \u0431\u043b\u043e\u043a\u0430 <code>dependencyResolutionManagement<\/code> \u0432 \u043d\u0451\u043c. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u043e\u043a \u0435\u0441\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"diff\">  dependencyResolutionManagement {    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)    repositories {      google()      mavenCentral()      ++   maven( ++     url = \"..\/flutter_module\/build\/host\/outputs\/repo\" ++   ) ++   maven( ++     url = \"https:\/\/storage.googleapis.com\/download.flutter.io\" ++   )     }   }<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u0430\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432  Android-\u043f\u0440\u043e\u0435\u043a\u0442. \u0421\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u0438 \u043c\u044b <code>.gradle<\/code> \u0438\u043b\u0438 <code>.gradle.kts<\/code> \u0444\u0430\u0439\u043b\u044b.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 .gradle-\u0444\u0430\u0439\u043b\u044b<\/h3>\n<ol>\n<li>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 <code>settings.gradle<\/code>:<\/p>\n<pre><code class=\"kotlin\"> include ':app'                           \/\/ assumed existing content  setBinding(new Binding([gradle: this]))  \/\/ new  evaluate(new File(                       \/\/ new      settingsDir.parentFile,              \/\/ new      'flutter_module\/.android\/include_flutter.groovy' \/\/ new  ))            <\/code><\/pre>\n<\/li>\n<li>\n<p>\u041a\u043e\u0434 \u043d\u0438\u0436\u0435 \u2014 \u0432 <code>app\/build.gradle<\/code> \u0432\u043d\u0443\u0442\u0440\u044c \u0431\u043b\u043e\u043a\u0430 <code>dependencies<\/code>:<\/p>\n<pre><code class=\"kotlin\">     implementation project(':flutter')<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 .gradle.kts \u0444\u0430\u0439\u043b\u044b<\/h3>\n<blockquote>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 gradle \u043d\u0430 gradle.kts \u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/migrating_from_groovy_to_kotlin_dsl.html#script_file_naming\">\u0442\u0443\u0442<\/a>.<\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432 \u043a\u043e\u0440\u043d\u0435 Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 gradle-\u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>flutter_init.gradle<\/code>) \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\"> include ':app'                           \/\/ assumed existing content  setBinding(new Binding([gradle: this]))  \/\/ new  evaluate(new File(                       \/\/ new      settingsDir.parentFile,              \/\/ new      'flutter_module\/.android\/include_flutter.groovy'    \/\/ new  ))            <\/code><\/pre>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 <code>settings.gradle.kts<\/code>:<\/p>\n<pre><code class=\"kotlin\"> apply(\"flutter_init.gradle\")<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0431\u043b\u043e\u043a\u0435 <code>dependencyResolutionManagement<\/code> \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    dependencyResolutionManagement { --      repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)          ++      repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)       repositories {         google()         mavenCentral() ++        maven ( ++          url= \"https:\/\/storage.googleapis.com\/download.flutter.io\" ++        )       }     }<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 <code>app\/build.gradle.kts<\/code> (\u0432 \u0431\u043b\u043e\u043a <code>dependencies<\/code>):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">    implementation(project(\":flutter\"))<\/code><\/pre>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Android, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u043e\u043d\u0438 \u0447\u0430\u0449\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445) \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c CocoaPods<\/p>\n<\/th>\n<th>\n<p>\u041a\u0430\u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043b\u044e\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0436\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0438\u043d\u0443\u0441\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Flutter SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c CocoaPods<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u0430\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 iOS-\u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e <code>Podfile<\/code> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"ruby\">     flutter_application_path = '..\/fluter_module' # flutter_module \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f      load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')<\/code><\/pre>\n<blockquote>\n<p> \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u0442 <code>Podfile<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>pod init<\/code>.<\/p>\n<\/blockquote>\n<blockquote>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 <code>pod<\/code>, \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 Project Format \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 <code>Xcode 14.0-compatible<\/code>. \u041f\u043e\u043d\u0438\u0436\u0430\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043e 13.<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a <code>target 'MyApp' do<\/code> (<code>MyApp<\/code> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    target 'MyApp' do         ... ++      install_all_flutter_pods(flutter_application_path)     end<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a <code>post_install<\/code>:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"diff\">    post_install do |installer|         ... ++      flutter_post_install(installer) if defined?(flutter_post_install)     end<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>pod install<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e<\/strong>: <\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c XCode, \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u044b\u043b \u043e\u0442\u043a\u0440\u044b\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>rm -rf ~\/Library\/Developer\/Xcode\/DerivedData<\/code> \u2014 \u0442\u0430\u043a \u043c\u044b \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0431\u043e\u0440\u043e\u043a, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 Xcode \u0440\u0430\u043d\u044c\u0448\u0435, \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Xcode \u00ab\u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f\u00bb \u043d\u0430\u0448\u0438\u043c \u0431\u0438\u043b\u0434\u043e\u043c \u0441 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043b\u0438\u0441\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c XCode \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>open MyApp.xcworkspace<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0437\u0430\u0432\u0435\u0442\u043d\u043e\u0435  <code>Build Succeeded<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>Embedded Framework<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Flutter-\u043c\u043e\u0434\u0443\u043b\u044c \u043a\u0430\u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Flutter \u0432\u043d\u0443\u0442\u0440\u0438 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"> flutter build ios-framework --output=path\/to\/your\/ios_app\/MyApp\/Flutter\/<\/code><\/pre>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c  \u0432 <code>Targets->\u0412\u0430\u0448\u0435_\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435->Build Settings<\/code> \u0438 \u0438\u0449\u0435\u043c <code>\"Framework search paths\"<\/code>.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>\"$(PROJECT_DIR)\/Flutter\/{configuration}\/\"<\/code>, \u0433\u0434\u0435 configuration \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: <code>\"Debug\"<\/code>, <code>\"Profile\"<\/code>, <code>\"Release\"<\/code>.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. Android<\/h3>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h4>\n<p>\u041f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u00ab\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043b\u0438\u0446\u0430\u043c\u0438\u00bb:<\/p>\n<ul>\n<li>\n<p><code>FlutterEngine<\/code> \u2014 \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a Flutter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Flutter-\u043c\u043e\u0434\u0443\u043b\u0435\u043c. \u041e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p><code>FlutterActivity<\/code>, <code>FlutterFragment<\/code> \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041e\u043d\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 <code>Activity<\/code> \u0438 <code>Fragment<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0431\u0430 \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>FlutterEngineProvider<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>FlutterEngine<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f \u0432 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterEngine<\/code> \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f: <\/p>\n<ul>\n<li>\n<p>\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>main.dart<\/code> \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>main()<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>\/<\/code>).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>FlutterEngine<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043a\u043e\u0434 Flutter-\u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>FlutterEngine<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code>, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>FlutterActivity<\/code> \u0438\u043b\u0438 <code>FlutterFragment<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c Activity<\/h4>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>FlutterActivity<\/code> \u0432 <code>AndroidManifest<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 <code>Application<\/code>:<\/p>\n<pre><code class=\"xml\">    &lt;activity         android:name=\"io.flutter.embedding.android.FlutterActivity\"         android:theme=\"@style\/LaunchTheme\"         android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"         android:hardwareAccelerated=\"true\"         android:windowSoftInputMode=\"adjustResize\"     \/><\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448 Activity. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>startActivity<\/code>:<\/p>\n<pre><code class=\"kotlin\">    myButton.setOnClickListener {       startActivity(         this,         FlutterActivity.createDefaultIntent(this),         null,       )     }<\/code><\/pre>\n<p>\u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>FlutterEngine<\/code>. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0440\u043e\u0443\u0442:<\/p>\n<pre><code class=\"kotlin\">    myButton.setOnClickListener {<\/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-379130","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/379130","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=379130"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/379130\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=379130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=379130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=379130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}