{"id":286904,"date":"2017-05-26T13:40:03","date_gmt":"2017-05-26T09:40:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=286904"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=286904","title":{"rendered":"\u0421 \u0447\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Android Studio 3.0 Preview \u0438 Gradle 4.0-milestone-1"},"content":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430 <a href=\"https:\/\/events.google.com\/io\/\">Google IO 2017 Keynote<\/a> \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e <a href=\"https:\/\/developer.android.com\/studio\/preview\/index.html\">Android Studio 3.0 Preview<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/new-android-plugin-migration.html#variant_api\">Gradle 4.0-milestone-1<\/a>, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0440\u0443\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u0447\u0435\u043a, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c API.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0447\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u0438 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0438\u043b\u0438 \u043e\u0431\u0437\u043e\u0440 \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0448\u0435\u043a. \u042d\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043b\u0438\u0447\u043d\u043e \u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/livetyping.com\/ru\/\">LiveTyping<\/a> \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0441 \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>apt<\/li>\n<li>Retrolambda<\/li>\n<li>RxJava2<\/li>\n<li>Dagger2<\/li>\n<li>Retrofit2<\/li>\n<li>OkHttp3<\/li>\n<li>ButterKnife<\/li>\n<li>Moxy<\/li>\n<li>StorIO<\/li>\n<li>IcePick<\/li>\n<li>AutoValue<\/li>\n<li>GooglePlayServices<\/li>\n<li>Calligraphy <\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"shag-1\">\u0428\u0430\u0433 1.<\/h3>\n<p>  <\/p>\n<p>\u0421\u043e\u0432\u0435\u0442\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/developer.android.com\/studio\/preview\/index.html\">Android Studio 3.0 Preview<\/a> \u0440\u044f\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0439 Android Studio 2.3, \u0430 \u043d\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0435. \u0411\u044b\u043b \u0433\u043e\u0440\u044c\u043a\u0438\u0439 \u043e\u043f\u044b\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0443\u0447\u0438\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0438\u0437 Canary \u043a\u0430\u043d\u0430\u043b\u0430. \u041c\u043d\u0435 \u043f\u043e\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0438\u043b\u043e\u0441\u044c \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0447\u0438\u043a\u043e\u0432 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0430 Android Studio 2.2 Preview 1 \u0441\u0442\u0443\u0434\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 <a href=\"https:\/\/www.reddit.com\/r\/androiddev\/comments\/4m81yb\/how_many_times_did_android_studio_22_preview_2\/\">\u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e \u043a\u0440\u0430\u0448\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 2-5 \u043c\u0438\u043d\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u044b<\/a>. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u043e\u0441\u044c \u2014 \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445, \u0438 \u043d\u0435 \u043b\u0435\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043e Preview 6. \u041e\u0442\u043a\u0430\u0442 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u043b. <\/p>\n<p>  <\/p>\n<h3 id=\"shag-2\">\u0428\u0430\u0433 2.<\/h3>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0443\u0434\u0438\u0438 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/XvColMpCdgc3u0KbKS9YvzQK1tYpzw.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u041b\u0438\u0431\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0435\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443, \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u0440\u0443\u043a\u0430\u043c\u0438<\/p>\n<p>  <\/p>\n<p>\u0412 <code>%PROJECT%\/gradle\/wrapper\/gradle-wrapper.properties<\/code> \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c<\/p>\n<p>  <\/p>\n<pre><code>distributionUrl=https\\:\/\/services.gradle.org\/distributions\/gradle-3.3-all.zip<\/code><\/pre>\n<p>  <\/p>\n<p>\u043d\u0430 <\/p>\n<p>  <\/p>\n<pre><code>distributionUrl=https\\:\/\/services.gradle.org\/distributions\/gradle-4.0-milestone-1-all.zip<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 <code>%PROJECT%\/build.gradle<\/code> \u0437\u0430\u043c\u0435\u043d\u0435\u043c<\/p>\n<p>  <\/p>\n<pre><code>buildscript {    dependencies { -       classpath 'com.android.tools.build:gradle:2.3.0'    } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u043d\u0430<\/p>\n<p>  <\/p>\n<pre><code>buildscript {    dependencies { +        classpath 'com.android.tools.build:gradle:3.0.0-alpha1'    } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u043e\u0434\u0438\u043d \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u0438\u043a. Android Studio \u043f\u043e\u043a\u0430 \u0441\u0430\u043c\u0430 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f <code>android gradle plugin 3.0.0-alpha1<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 <code>%PROJECT%\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>buildscript {    repositories {         maven { +            url 'https:\/\/maven.google.com'         } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"shag-3\">\u0428\u0430\u0433 3.<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/nsoqm4gEFeHW7Bqq5sEKaQP0Q2hRjK.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/vY1JYtLbyIxxjCLukz1ZNanxz6QCsJ.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043d\u0430\u0448 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0442\u0430\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043b apk \u0444\u0430\u0439\u043b\u044b \u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043d\u0430\u043c \u0444\u043e\u0440\u043c\u0430\u0442.<br \/>  \u0418\u0434\u0435\u043c \u0432 <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/new-android-plugin-migration.html#variant_api\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 android gradle plugin<\/a> \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0438\u0437\u0443 \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435<\/p>\n<p>  <\/p>\n<pre><code>API change in variant output  Using the Variant API to manipulate variant outputs is broken with the new plugin. If you're using this API with the new plugin, you'll see the following error message:  Error:(41, 0) Not valid. This build error occurs because variant-specific tasks are no longer created during the configuration stage. This results in the plugin not knowing all of its outputs up front, but it also means faster configuration times. As an alternative, we will introduce new APIs to provide similar functionality.<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0436, \u043f\u043e\u043a\u0430 \u0434\u0435\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u0443\u0434\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u0441\u044c \u0442\u0430\u0441\u043a \u0438 \u0436\u0438\u0432\u0435\u043c \u0442\u0430\u043a. \u0416\u0434\u0435\u043c \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 API.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0434\u043d\u0435\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c apk \u0444\u0430\u0439\u043b\u044b \u043a\u043b\u0430\u0434\u0443\u0442\u0441\u044f \u043d\u0435 \u0432 <code>%PROJECT%\/app\/build\/outputs\/apk\/<\/code> \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435, \u0430 \u0434\u043b\u044f \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043f\u043e buildtypes \u0438 flavors. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e 2 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 <\/p>\n<p>  <\/p>\n<pre><code>%PROJECT%\/app\/build\/outputs\/apk\/debug %PROJECT%\/app\/build\/outputs\/apk\/release<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445 \u043b\u0435\u0436\u0430\u0442 2 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<p>  <\/p>\n<pre><code>app-debug.apk output.json<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0432\u0441\u0435 \u044f\u0441\u043d\u043e, \u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<\/p>\n<p>  <\/p>\n<pre><code>[     {         &quot;outputType&quot;: {             &quot;type&quot;: &quot;APK&quot;         },         &quot;apkInfo&quot;: {             &quot;type&quot;: &quot;MAIN&quot;,             &quot;splits&quot;: [],             &quot;versionCode&quot;: 10000         },         &quot;outputFile&quot;: {             &quot;path&quot;: &lt;FULL_APK_PATH&gt;         },         &quot;properties&quot;: {             &quot;packageId&quot;: &lt;YOUR_PACKAGE_NAME&gt;,             &quot;split&quot;: &quot;&quot;         }     } ]<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043f\u043b\u043e\u0430\u0434\u0430 apk \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  <\/p>\n<h3 id=\"shag-4\">\u0428\u0430\u0433 4.<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/O7dYzqTq3kkHBeD0DYVXosRYUlFO3a.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<pre><code>Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:generateDebugAndroidTestSources]  Warning:The Jack toolchain is deprecated and will not run. To enable support for Java 8 language features built into the plugin, remove 'jackOptions { ... }' from your build.gradle file, and add  android.compileOptions.sourceCompatibility 1.8 android.compileOptions.targetCompatibility 1.8  Future versions of the plugin will not support usage of 'jackOptions' in build.gradle. To learn more, go to https:\/\/d.android.com\/r\/tools\/java-8-support-message.html  Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle:     apply plugin: 'me.tatarka.retrolambda' To learn more, go to https:\/\/d.android.com\/r\/tools\/java-8-support-message.html  Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle:     apply plugin: 'me.tatarka.retrolambda' To learn more, go to https:\/\/d.android.com\/r\/tools\/java-8-support-message.html<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c 2 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/p>\n<p>  <\/p>\n<p>a. <code>The Jack toolchain is deprecated<\/code> \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0435\u0433\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f.<br \/>  \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0447\u0442\u043e <a href=\"https:\/\/android-developers.googleblog.com\/2017\/03\/future-of-java-8-language-feature.html\">\u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a<\/a> \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c jackOptions \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>%PROJECT%\/app\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>android {    defaultConfig { -       jackOptions { -           enabled false -       }    } }<\/code><\/pre>\n<p>  <\/p>\n<p>b. \u041d\u043e\u0432\u0430\u044f Android Studio 2.4 Preview \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/java8-support.html#supported_features\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Java8<\/a> \u0438 Retrolambda \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/java8-support.html#migrate_from_retrolambda\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/a> \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0435 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. <\/p>\n<p>  <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>%PROJECT%\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>buildscript {    dependencies { -       classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' -       classpath 'me.tatarka:gradle-retrolambda:3.3.0' -       \/\/ NOTE: Do not place your application dependencies here; they belong -       \/\/ in the individual module build.gradle files    } -   \/\/ Exclude the lombok version that the android plugin depends on. -   configurations.classpath.exclude group: 'com.android.tools.external.lombok' }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>%PROJECT%\/app\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>- apply plugin: 'me.tatarka.retrolambda'<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Java8, \u0435\u0441\u043b\u0438 \u0435\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e<\/p>\n<p>  <\/p>\n<pre><code>android {    compileOptions { +       sourceCompatibility JavaVersion.VERSION_1_8 +       targetCompatibility JavaVersion.VERSION_1_8    } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"shag-5\">\u0428\u0430\u0433 5.<\/h3>\n<p>  <\/p>\n<p>\u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c Gradle API \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/new-android-plugin-migration.html#new_configurations\">dependency configurations<\/a><\/p>\n<p>  <\/p>\n<pre><code>compile -&gt; implementation provided -&gt; compileOnly<\/code><\/pre>\n<p>  <\/p>\n<p>\u043d\u0438 \u0438 \u0434\u043b\u044f \u043f\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f <\/p>\n<p>  <\/p>\n<pre><code>debugCompile -&gt; debugImplementation releaseCompile -&gt; releaseImplementation debugProvided -&gt; debugCompileOnly releaseProvided -&gt; releaseCompileOnly testCompile -&gt; testImplementation androidTestCompile -&gt; androidTestImplementation<\/code><\/pre>\n<p>  <\/p>\n<p>\u043d\u0443 \u0438\u043b\u0438 \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043c, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 buildtypes \u0438 flavors.<\/p>\n<p>  <\/p>\n<h3 id=\"shag-6\">\u0428\u0430\u0433 6.<\/h3>\n<p>  <\/p>\n<p>\u0415\u0449\u0435 \u0440\u0430\u043d\u0435\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 apt plugin \u043d\u0430 annotationProcessor. \u0423\u0434\u0430\u043b\u0438\u043b\u0438 \u0432\u0441\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f <code>android-apt<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <code>%PROJECT%\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>buildscript {    dependencies { -       classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'    } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>%PROJECT%\/app\/build.gradle<\/code><\/p>\n<p>  <\/p>\n<pre><code>-  apply plugin: 'com.neenbedankt.android-apt'<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/p>\n<p>  <\/p>\n<pre><code>apt -&gt; annotationProcessor<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Dagger2, StorIO, AutoValue, Butterknife, Timber, Moxy \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0443\u0442 \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u043d\u0435\u0440\u0435\u0448\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <a href=\"https:\/\/github.com\/frankiesardo\/icepick\">IcePick<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/github.com\/frankiesardo\/icepick\/issues\/81\">annotationProcessor \u0438 Kotlin<\/a>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/6CBj0de9tfSSuxd5XOAHYReMVm5JKk.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0431\u044f\u0442\u0430 \u0438\u0437 Evernote \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0432\u043e\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/evernote\/android-state\">Android-State<\/a>, <a href=\"https:\/\/github.com\/evernote\/android-state\/issues\/13\">SNAPSHOT<\/a> \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0438\u043c\u0435\u0435\u0442 API \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 API IcePick.<\/p>\n<p>  <\/p>\n<pre><code>repositories {     jcenter()      maven { +        url 'https:\/\/oss.sonatype.org\/content\/repositories\/snapshots\/'     } }  dependencies { +  implementation 'com.evernote:android-state:1.1.0-SNAPSHOT' +  annotationProcessor 'com.evernote:android-state-processor:1.1.0-SNAPSHOT' }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"shag-7\">\u0428\u0430\u0433 7.<\/h3>\n<p>  <\/p>\n<p>\u0418 \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0430\u0441 \u0436\u0434\u0430\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u044e\u0440\u043f\u0440\u0438\u0437<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/monosnap.com\/file\/7wZPKp5WF72wPQWoZK9L9HLpUkpANu.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 multidex. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u043d\u0430\u043c\u0438 dexcount-gradle-plugin. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: <\/p>\n<p>  <\/p>\n<pre><code>NOTE: dexcount does not currently work with the new Android Build Tools as of 3.0.0-alpha1; it has removed APIs that we depend on and, while replacements have been promised, none have yet been provided.<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436, \u043f\u043e\u043a\u0430 \u0442\u043e\u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438 \u0436\u0434\u0435\u043c \u043f\u0440\u0430\u0432\u043e\u043a. <\/p>\n<p>  <\/p>\n<h3 id=\"itog\">\u0418\u0442\u043e\u0433<\/h3>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u043b\u0441\u044f. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u0443 \u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0439 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438. \u041f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043b\u0438 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0443\u0434\u0438\u044e \u0438 Gradle \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0436\u0434\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u0430. \u0421 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0432\u044b?<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<p>  <\/p>\n<ol>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\/index.html\">Android Studio 3.0 Preview 1<\/a><\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/new-android-plugin-migration.html\">New android plugin migration<\/a><\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/java8-support.html\">Java8 support<\/a><\/li>\n<li><a href=\"https:\/\/android-developers.googleblog.com\/2017\/04\/java-8-language-features-support-update.html\">Java8 language features support update<\/a><\/li>\n<\/ol>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/329530\/\"> https:\/\/habrahabr.ru\/post\/329530\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430 <a href=\"https:\/\/events.google.com\/io\/\">Google IO 2017 Keynote<\/a> \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e <a href=\"https:\/\/developer.android.com\/studio\/preview\/index.html\">Android Studio 3.0 Preview<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/studio\/preview\/features\/new-android-plugin-migration.html#variant_api\">Gradle 4.0-milestone-1<\/a>, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0440\u0443\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u0447\u0435\u043a, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c API.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0447\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u0438 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0438\u043b\u0438 \u043e\u0431\u0437\u043e\u0440 \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0448\u0435\u043a. \u042d\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043b\u0438\u0447\u043d\u043e \u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/livetyping.com\/ru\/\">LiveTyping<\/a> \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <\/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-286904","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286904","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=286904"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286904\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}