{"id":185234,"date":"2013-07-02T12:26:02","date_gmt":"2013-07-02T08:26:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=185234"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=185234","title":{"rendered":"<span class=\"post_title\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 Android<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/358\/78e\/7f1\/35878e7f1537d0d6f703bdfff09bce15.jpg\" \/><\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e, \u0445\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438. \u042f Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0422\u043e\u0447\u043d\u0435\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a. \u042f \u043b\u0435\u043d\u0438\u0432\u044b\u0439 Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u0435\u043d\u044f \u043d\u0430\u0447\u0430\u043b\u0438 \u0443\u0433\u043d\u0435\u0442\u0430\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u0437\u0430 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 IDE. <br \/>  <a name=\"habracut\"><\/a><\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0438 android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b RoboJuice \u0441 \u0435\u0433\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 View. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u0442\u0441\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c Activity \u043e\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 Activity \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 RoboActivity, \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u0432 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u0443 \u043c\u0435\u043d\u044f \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0441\u044f \u0437\u0434\u0440\u0430\u0432\u044b\u0439 \u0441\u043a\u0435\u043f\u0442\u0438\u0446\u0438\u0437\u043c. \u041a \u044d\u0442\u043e\u0439 \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 AndroidAnnotations, ButterKnife \u0438 \u043f\u0440. \u0412\u0441\u0435 \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043e\u0434\u0430 \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u0433\u043e, \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0449\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 ButterKnife:<\/p>\n<pre><code class=\"java\">@InjectView(R.id.title) TextView title;<\/code><\/pre>\n<p>  \u0432\u043c\u0435\u0441\u0442\u043e<\/p>\n<pre><code class=\"java\">title = (TextView) findViewById(R.id.title);<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 quickfix \u044d\u0442\u043e \u0437\u0430\u0439\u043c\u0435\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u2014 \u0437\u0430\u0447\u0435\u043c <s>\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435<\/s> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. <\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u2014 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 IDE (<a href=\"http:\/\/habrahabr.ru\/post\/183502\/\">http:\/\/habrahabr.ru\/post\/183502\/<\/a> ) \u041b\u0438\u0447\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b, \u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438.<\/p>\n<h3>\u0414\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430 \u043c\u0435\u043d\u044f \u0442\u0435\u0440\u0437\u0430\u043b \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u043a\u0442\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442\/\u043f\u043b\u0430\u0433\u0438\u043d\/%\u0441\u0432\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442% \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438\u0437 xml layout. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u0448\u0435\u043b, \u0431\u044b\u043b\u043e <a href=\"http:\/\/code.google.com\/p\/android-code-generator-plugin\/\">http:\/\/code.google.com\/p\/android-code-generator-plugin\/<\/a>. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Eclipse, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u0442 xml \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 %name%Activity.java. \u0422\u0430\u043a\u0436\u0435 \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044f \u0432 <a href=\"http:\/\/tmorcinek.wordpress.com\/2011\/11\/30\/eclipse-plugin-for-automatic-generation-of-activity-code-from-xml-layout-file\/\">\u0431\u043b\u043e\u0433\u0435<\/a>. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u043b\u0438\u0431\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043b\u0438\u0431\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u00ab\u0410 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c?\u00bb.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u043f\u0430\u0440\u0443 \u0440\u0430\u0437, \u044f \u043d\u0430\u0448\u0435\u043b \u0440\u044f\u0434 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044f \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438:<br \/>   \u2014 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f view \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 onCreate();<br \/>   \u2014 \u043f\u0440\u043e\u043f\u0438c\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 \u043e\u0431\u0449\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445;<br \/>   \u2014 \u043d\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 View. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e Roboto, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Android.<br \/>   \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Listeners \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Activity. \u041a\u043e\u0433\u0434\u0430 \u0438\u0445 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 3-4 \u2014 \u043a\u043e\u0434 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e;<br \/>   \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 View, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c id. \u041d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, LinearLayout) \u0440\u0435\u0434\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434\u0435.<br \/>   \u2014 \u043d\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e ArrayAdapter \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c Holder. \u0412\u0435\u0449\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f;<br \/>   \u2014 \u0441\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c, \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u0449\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0435\u0449\u0435, \u043f\u043e\u043d\u044f\u043b \u2014 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435\u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u0438 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0422\u0417:<br \/>   \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442;<br \/>   \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0445 View, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442 \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f;<br \/>   \u2014 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c 3 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 view, \u0448\u0440\u0438\u0444\u0442\u043e\u0432, listeners. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 onCreate \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0442\u0435\u043d\u0430 \u043a\u043e\u0434\u0430;<br \/>   \u2014 \u0435\u0441\u043b\u0438 \u0432 xml \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f ListView, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c xml-\u0444\u0430\u0439\u043b \u0441 \u0432\u0435\u0440\u0441\u0442\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043b\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0431\u044b\u043b \u0432\u0437\u044f\u0442 \u0432\u044b\u0448\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 xml \u0432\u0441\u0435 View, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d id.  <\/p>\n<pre><code class=\"java\"> private NodeList getNodesWithId(InputStream inputStream) throws ParserConfigurationException, SAXException,  IOException, XPathExpressionException {  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  \/\/ factory.setNamespaceAware(true); \/\/ never forget this!  DocumentBuilder builder = factory.newDocumentBuilder();  Document doc = builder.parse(inputStream);  XPathFactory pathFactory = XPathFactory.newInstance();  XPath xPath = pathFactory.newXPath();  XPathExpression expression = xPath.compile(&quot;\/\/*[@id]&quot;);  return (NodeList) expression.evaluate(doc, XPathConstants.NODESET); } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 ViewGenerator, ActivityGenerator, AdapterGenerator.<br \/>  \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 \u043a\u043e\u0434\u0430, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e. <br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"java\"> private final static String FIELD_PATTERN = &quot;\\tprivate %1$s %2$s;\\n&quot;; private final static String METHOD_VOID_PATTERN = &quot;\\tprivate void %1$s(){\\n%2$s\\t}\\n&quot;;\t <\/code><\/pre>\n<p>  ViewGenerator \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 View \u0438\u0437 xml(\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439, findViewById, setTypeFace, setListener \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b). \u041f\u0440\u0438\u0447\u0435\u043c \u043a\u0430\u043a \u0434\u043b\u044f Activity, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f ViewHolder \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f setListeners:  <\/p>\n<pre><code class=\"java\"> \tprivate String getListeners(boolean innerClass){ \t\tStringBuilder builder = new StringBuilder(); \t\tfor (WidgetResource widgetResource : widgetsTypes.keySet()) { \t\t\tif (BUTTON_WIDGETS.contains(widgetsTypes.get(widgetResource).getName())) { \t\t\t\tbuilder.append(String.format(innerClass ? ONCLICK_INNER_PATTERN : ONCLICK_PATTERN, widgetResource.getVariableName())); \t\t\t} \t\t} \t\treturn builder.toString(); \t} <\/code><\/pre>\n<p>  ActivityGenerator \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 Activity c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 ViewGenerator:  <\/p>\n<pre><code class=\"java\">   public String generate() { \t\tStringBuilder stringBuilder = new StringBuilder(); \t\tif (packageName != null && !packageName.isEmpty()) { \t\t\tstringBuilder.append(getPackage()); \t\t\tstringBuilder.append(&quot;\\n&quot;); \t\t} \t\tstringBuilder.append(getImports()); \t\tstringBuilder.append(viewGenerator.getImports()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\t \t\tStringBuilder innerBuilder = new StringBuilder(); \t\tinnerBuilder.append(getTag()); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(viewGenerator.getFields(false)); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(getCreateMethod()); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(getInitActionBarMethod()); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(viewGenerator.getInitViewsMethod(false)); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(viewGenerator.getSetFontsMethod(false)); \t\tinnerBuilder.append(&quot;\\n&quot;); \t\tinnerBuilder.append(viewGenerator.getSetListenersMethod(false)); \t\tstringBuilder.append(String.format(HEADER_PATTERN, activityResource.getVariableName(), innerBuilder.toString())); \t\treturn stringBuilder.toString(); \t} <\/code><\/pre>\n<p>  AdapterGenerator \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 Adapter:  <\/p>\n<pre><code class=\"java\"> \tpublic String generate() { \t\tStringBuilder stringBuilder = new StringBuilder(); \t\tif (packageName != null && !packageName.isEmpty()) { \t\t\tstringBuilder.append(getPackage()); \t\t\tstringBuilder.append(&quot;\\n&quot;); \t\t} \t\tstringBuilder.append(getImports()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(getHeader()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(getTag()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(FIELDS_PATTERN); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(getConstructor()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(getGetView()); \t\tstringBuilder.append(&quot;\\n&quot;); \t\tstringBuilder.append(getHolder()); \t\tstringBuilder.append(&quot;}&quot;); \t\tstringBuilder.append(&quot;\\n&quot;); \t\treturn stringBuilder.toString(); \t} <\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<p>  Activity<\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;RelativeLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;     android:layout_width=&quot;match_parent&quot;     android:layout_height=&quot;match_parent&quot;     android:orientation=&quot;vertical&quot; &gt;      &lt;ListView         android:id=&quot;@+id\/news_list_activity_news_list&quot;         android:layout_width=&quot;match_parent&quot;         android:layout_height=&quot;match_parent&quot; \/&gt;      &lt;ImageView         android:layout_width=&quot;fill_parent&quot;         android:layout_height=&quot;wrap_content&quot; \/&gt;      &lt;RelativeLayout         android:layout_width=&quot;match_parent&quot;         android:layout_height=&quot;match_parent&quot;          &lt;ProgressBar             android:id=&quot;@+id\/articles_progress&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot; \/&gt;          &lt;TextView             android:id=&quot;@+id\/articles_exist_text_view&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot;              \/&gt;      &lt;Button             android:id=&quot;@+id\/articles_exist_button&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot;\/&gt;     &lt;\/RelativeLayout&gt;  &lt;\/RelativeLayout&gt;  <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043b\u0438\u0441\u0442\u0430<\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;     android:layout_width=&quot;fill_parent&quot;     android:layout_height=&quot;wrap_content&quot;     android:orientation=&quot;vertical&quot;     android:paddingLeft=&quot;15dp&quot;     android:paddingRight=&quot;15dp&quot; &gt;      &lt;TextView         android:id=&quot;@+id\/row_news_date_header_text&quot;         android:layout_width=&quot;fill_parent&quot;         android:layout_height=&quot;wrap_content&quot;          \/&gt;      &lt;RelativeLayout         android:id=&quot;@+id\/news_main_layout&quot;         android:layout_width=&quot;fill_parent&quot;         android:layout_height=&quot;wrap_content&quot; &gt;          &lt;FrameLayout             android:id=&quot;@+id\/row_news_image_container&quot;             android:layout_width=&quot;96dp&quot;             android:layout_height=&quot;68dp&quot;              &gt;              &lt;ImageView                 android:id=&quot;@+id\/row_news_icon&quot;                 android:layout_width=&quot;match_parent&quot;                 android:layout_height=&quot;match_parent&quot;                 android:scaleType=&quot;fitXY&quot; \/&gt;         &lt;\/FrameLayout&gt;          &lt;TextView             android:id=&quot;@+id\/row_news_title_text&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot;             \/&gt;          &lt;TextView             android:id=&quot;@+id\/row_news_type_text&quot;             android:layout_width=&quot;fill_parent&quot;             android:layout_height=&quot;wrap_content&quot;             \/&gt;          &lt;ImageView             android:id=&quot;@+id\/row_news_date_icon&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot;             \/&gt;          &lt;TextView             android:id=&quot;@+id\/row_news_date_text&quot;             android:layout_width=&quot;wrap_content&quot;             android:layout_height=&quot;wrap_content&quot;             \/&gt;     &lt;\/RelativeLayout&gt;      &lt;View         android:id=&quot;@+id\/row_news_items_divider&quot;         android:layout_width=&quot;fill_parent&quot;         android:layout_height=&quot;1dp&quot;         android:background=&quot;@drawable\/divider_gray_horizontal&quot; \/&gt;  &lt;\/LinearLayout&gt; <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<pre><code class=\"java\"> package com.test.activity;  import android.os.Bundle; import android.app.Activity; import android.widget.ProgressBar; import android.widget.TextView; import android.graphics.Typeface; import com.test.R; import android.widget.ListView; import android.widget.Button; import android.view.View.OnClickListener; import android.view.View;  public class NewsListActivityActivity extends Activity {     private static final String TAG = NewsListActivityActivity.class.getSimpleName();      private ProgressBar articlesProgress;     private ListView newsListActivityNewsList;     private TextView articlesExistTextView;     private Button articlesExistButton;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.news_list_activity);          initActionBar();         initViews();         setFonts();         setListeners();     }      private void initActionBar(){     }      private void initViews(){         articlesProgress = (ProgressBar) findViewById(R.id.articles_progress);         newsListActivityNewsList = (ListView) findViewById(R.id.news_list_activity_news_list);         articlesExistTextView = (TextView) findViewById(R.id.articles_exist_text_view);         articlesExistButton = (Button) findViewById(R.id.articles_exist_button);     }      private void setFonts(){         Typeface roboto = null;\/\/TODO init this by utils         articlesExistTextView.setTypeface(roboto);     }      private void setListeners(){         articlesExistButton.setOnClickListener(new OnClickListener() {             @Override             public void onClick(View v) {              }         });     } } <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"java\"> package com.test.adapter;  import com.test.R; import android.graphics.Typeface; import android.content.Context; import java.util.List; import android.widget.ArrayAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.graphics.Typeface; import android.widget.ImageView; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.view.View.OnClickListener; import android.view.View;  public class NewsListActivityAdapter extends ArrayAdapter&lt;String&gt;{     private static final String TAG = NewsListActivityAdapter.class.getSimpleName();      private Context context;     private LayoutInflater inflater;       public NewsListActivityAdapter(Context context, List&lt;String&gt; objects) {         super(context, R.layout.news_list_item, objects);         inflater = LayoutInflater.from(context);         this.context = context;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {         ViewHolder holder;         if (convertView == null){             convertView = inflater.inflate(R.layout.news_list_item, parent, false);             holder = new ViewHolder(convertView);             convertView.setTag(holder);         } else {             holder = (ViewHolder) convertView.getTag();         }          String item = getItem(position);         if (item != null){             holder.populateForm(item);      }         return convertView;     }     private class ViewHolder{          private TextView rowNewsDateHeaderText;         private TextView rowNewsDateText;         private TextView rowNewsTypeText;         private TextView rowNewsTitleText;          public ViewHolder(View v){             initViews(v);             setFonts();         }         private void initViews(View v){             rowNewsDateHeaderText = (TextView) v.findViewById(R.id.row_news_date_header_text);             rowNewsDateText = (TextView) v.findViewById(R.id.row_news_date_text);             rowNewsTypeText = (TextView) v.findViewById(R.id.row_news_type_text);             rowNewsTitleText = (TextView) v.findViewById(R.id.row_news_title_text);         }          private void setFonts(){             Typeface roboto = null;\/\/TODO init this by utils             rowNewsDateHeaderText.setTypeface(roboto);             rowNewsDateText.setTypeface(roboto);             rowNewsTypeText.setTypeface(roboto);             rowNewsTitleText.setTypeface(roboto);         }          public void populateForm(String item) {          }     } } <\/code><\/pre>\n<h3>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/h3>\n<p>  1. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c jar \u0444\u0430\u0439\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 \u043f\u0430\u043f\u043a\u0443 plugins Eclipse. <br \/>  2. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Eclipse.<br \/>  3. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 xml-\u0444\u0430\u0439\u043b\u044b \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u043d\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432.<br \/>  4. \u041f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 -&gt; Android Code Generator.<br \/>  5. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 %packagename%.activity \u0438 %packagename%.adapter.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c \u043b\u0435\u0433\u0447\u0435. \u041f\u043b\u0430\u0433\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Eclipse 4.2. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/surfstudio\/android-code-generator-plugin-fx\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  P.S. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Eclipse. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0434\u0443\u043c\u0430\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043b\u044f Android Studio. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/185234\/\"> http:\/\/habrahabr.ru\/post\/185234\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/358\/78e\/7f1\/35878e7f1537d0d6f703bdfff09bce15.jpg\" \/><\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e, \u0445\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438. \u042f Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0422\u043e\u0447\u043d\u0435\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a. \u042f \u043b\u0435\u043d\u0438\u0432\u044b\u0439 Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u0435\u043d\u044f \u043d\u0430\u0447\u0430\u043b\u0438 \u0443\u0433\u043d\u0435\u0442\u0430\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u0437\u0430 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 IDE.   <\/p>\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-185234","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/185234","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=185234"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/185234\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=185234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=185234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=185234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}