{"id":23971,"date":"2019-10-29T14:11:07","date_gmt":"2019-10-29T05:11:07","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=23971"},"modified":"2019-10-29T14:14:12","modified_gmt":"2019-10-29T05:14:12","slug":"%eb%af%b8%eb%a6%ac%eb%b3%b4%eb%8a%94-%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ec%8a%a4%ed%8a%9c%eb%94%94%ec%98%a4-4-0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=23971","title":{"rendered":"\ubbf8\ub9ac\ubcf4\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624 4.0"},"content":{"rendered":"<h1><\/h1>\n<h1><a href=\"https:\/\/www.charlezz.com\/?attachment_id=24031\" rel=\"attachment wp-att-24031\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/2018-06-12-ts3_thumbs-c90.png\" alt=\"\" width=\"600\" height=\"600\" class=\"aligncenter size-full wp-image-24031\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/2018-06-12-ts3_thumbs-c90.png 600w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/2018-06-12-ts3_thumbs-c90-150x150.png 150w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/2018-06-12-ts3_thumbs-c90-300x300.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a>Android Studio 4.0 New Feature<\/h1>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624 4.0 Canary1\uc744 Canary\uc640 Dev \ucc44\ub110\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud558\ub2e4.<\/p>\n<h3>Jetpack Compose\uc9c0\uc6d0<\/h3>\n<p><span>Jetpack Compose \ud234\ud0b7\uc740 UI\ub97c \ub9cc\ub4dc\ub294 \ud604\ub300\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc744 \uc81c\uacf5\ud55c\ub2e4. \ub610\ud55c \ud234\ud0b7\uc740 Java\uc640 \uc644\uc804\ud788 \uc0c1\ud638 \uc6b4\uc6a9 \uac00\ub2a5\ud55c \uac04\uacb0\ud558\uace0 \uad00\uc6a9\uc801\uc778 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\ub294 \ub4f1 Kotlin\uc758 \ubaa8\ub4e0 \uc774\uc810\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/span><br \/>\n<span>Android Studio\ub97c \uc0ac\uc6a9\ud558\uc5ec Jetpack Compose\ub85c \uc571\uc744 \uac1c\ubc1c\ud560 \ub54c \uc0c8 \ud504\ub85c\uc81d\ud2b8 \ud15c\ud50c\ub9bf\uacfc \uac19\uc740 \uc2a4\ub9c8\ud2b8 \ud3b8\uc9d1\uae30 \uae30\ub2a5 \ubc0f Compose UI\ub97c \uc989\uc2dc \ubbf8\ub9ac \ubcfc \uc218\uc788\ub294 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/span><br \/>\n<span>\uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\ub824\uba74<\/span><span>\u00a0<a href=\"https:\/\/developer.android.com\/jetpack\/compose\/\">Jetpack Compose \uac1c\uc694<\/a>\ub97c \ucc38\uace0\ud560 \uc218 \uc788\ub2e4.<\/span><\/p>\n<h3>D8 \ubc0f R8\uc5d0\uc11c Java8 \ub77c\uc774\ube0c\ub7ec\ub9ac desugaring<\/h3>\n<p><span>Android Studio\uc5d0\uc11c minSdk API \ub808\ubca8\uc744 \uc694\uad6c\ud558\uc9c0 \uc54a\uace0 Java 8 \uc5b8\uc5b4 API \uc0ac\uc6a9\uc744 \uc9c0\uc6d0\ud55c\ub2e4. <\/span><\/p>\n<p><span>desugaring<\/span><span>\uc774\ub77c\ub294 \ud504\ub85c\uc138\uc2a4\ub97c \ud1b5\ud574 Android Studio 3.0 \uc774\uc0c1\uc758 DEX \ucef4\ud30c\uc77c\ub7ec D8\uc740 \uc774\ubbf8 Java8 \uc5b8\uc5b4 \uae30\ub2a5\uc778 \ub78c\ub2e4 \uc2dd, \uae30\ubcf8 \uc778\ud130\ud398\uc774\uc2a4 \ubc29\ubc95, \ub9ac\uc18c\uc2a4 \uc0ac\uc6a9 \ub4f1\uc744 \uc9c0\uc6d0\ud588\ub2e4. Android Studio 4.0\uc5d0\uc11c desugaring \uc5d4\uc9c4\uc740 Java \uc5b8\uc5b4 API\ub97c desugar \ud560 \uc218 \uc788\ub3c4\ub85d \ud655\uc7a5\ub418\uc5c8\uace0, \uc774\ub294 \uc774\uc81c \uc774\uc804 \ubc84\uc804\uc758 Android\ub97c \uc9c0\uc6d0\ud558\ub294 \uc571 \uc5d0 \ucd5c\uc2e0 Android \ubc84\uc804\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud560 \uc218\uc788\ub294 \ud45c\uc900 \uc5b8\uc5b4 API\ub97c \ud3ec\ud568 \ud560 \uc218 \uc788\uc74c\uc744 \uc758\ubbf8\ud55c\ub2e4 .<\/span><br \/>\n<span><\/span><a href=\"https:\/\/d.android.com\/studio\/preview\/features#j8-desugar\"><span><\/span><\/a><span><\/span><\/p>\n<h3><span>R8 \/ ProGuard \uaddc\uce59 \ud3b8\uc9d1\uc2dc \uc2a4\ub9c8\ud2b8 \ud3b8\uc9d1\uae30 \uae30\ub2a5<\/span><\/h3>\n<p><span>Android Studio\ub294 \uc774\uc81c \uad6c\ubb38 \uac15\uc870, \ucf54\ub4dc \uc644\uc131 \ubc0f \uc624\ub958 \uac80\uc0ac\uc640 \uac19\uc740 ProGuard \uaddc\uce59 \ud30c\uc77c\uc744 \uc5f4 \ub54c \uc2a4\ub9c8\ud2b8 \ud3b8\uc9d1\uae30 \uae30\ub2a5\uc744 \uc81c\uacf5\ud55c\ub2e4. \ub610\ud55c \ud3b8\uc9d1\uae30\ub294 Android Studio \ud504\ub85c\uc81d\ud2b8\uc640 \ud1b5\ud569\ub418\uc5b4 \ubaa8\ub4e0 \ud074\ub798\uc2a4, \uba54\uc18c\ub4dc \ubc0f \ud544\ub4dc\uc5d0 \ub300\ud55c \uc644\uc804\ud55c \uae30\ud638 \uc644\uc131\uc744 \uc81c\uacf5\ud558\uba70 \ube60\ub978 \ud0d0\uc0c9 \ubc0f \ub9ac\ud329\ud1a0\ub9c1\uc744 \ud3ec\ud568\ud55c\ub2e4.<\/span><\/p>\n<h3><span>Kotlin DSL \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c \uc9c0\uc6d0<\/span><\/h3>\n<p><span>Android Gradle \ud50c\ub7ec\uadf8\uc778\uc740 \uc774\uc81c Kotlin DSL \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c (\u00a0<\/span><b><span>* .kts<\/span><\/b><span> )\uc744 \uc9c0\uc6d0\ud55c\ub2e4. Android Studio\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud558\uba74 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \ub300\ud654 \uc0c1\uc790 \ubc0f \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8 \ube60\ub978 \uc218\uc815\uacfc \uac19\uc740 \ud2b9\uc815 IDE \uae30\ub2a5\ub3c4 Kotlin \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c \uc77d\uae30 \ubc0f \uc4f0\uae30\ub97c \uc9c0\uc6d0\ud55c\ub2e4.<\/span><\/p>\n<h3><span>\ubaa8\uc158 \uc5d0\ub514\ud130<\/span><\/h3>\n<p><span>Android Studio\uc5d0\ub294 \uc774\uc81c MotionLayout \ub808\uc774\uc544\uc6c3 \uc720\ud615\uc758 \uc2dc\uac01\uc801 \ub514\uc790\uc778 \ud3b8\uc9d1\uae30\uac00 \ud3ec\ud568\ub418\uc5b4\uc788\uc5b4 \uc560\ub2c8\uba54\uc774\uc158\uc744\ubcf4\ub2e4 \uc27d\uac8c \u200b\u200b\ub9cc\ub4e4\uace0 \ubbf8\ub9ac \ubcfc \uc218 \uc788\ub2e4.<\/span><br \/>\n<span><\/span><\/p>\n<p><span>\ubaa8\uc158 \ud3b8\uc9d1\uae30\ub294 Android \uc571\uc5d0\uc11c \uc560\ub2c8\uba54\uc774\uc158\uc758 \uae30\ucd08\uac00\ub418\ub294 MotionLayout \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc694\uc18c\ub97c \uc870\uc791\ud558\uae30\uc704\ud55c \uac04\ub2e8\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud55c\ub2e4. \uc774\uc804 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uc694\uc18c\ub97c \uc791\uc131\ud558\uace0 \ubcc0\uacbd\ud558\ub824\uba74 XML \uc790\uc6d0 \ud30c\uc77c\uc5d0\uc11c \uc218\ub3d9\uc73c\ub85c \uc81c\ud55c \uc870\uac74\uc744 \ud3b8\uc9d1\ud574\uc57c\ud588\ub2e4. \uc774\uc81c \ubaa8\uc158 \ud3b8\uc9d1\uae30\ub294 \uc2dc\uc791 \ubc0f \uc885\ub8cc \uc0c1\ud0dc, \ud0a4 \ud504\ub808\uc784, \uc804\ud658 \ubc0f \ud0c0\uc784 \ub77c\uc778\uc744 \uc9c0\uc6d0\ud558\ub294 XML\uc744 \uc0dd\uc131 \ud560 \uc218 \uc788\ub2e4.<\/span><\/p>\n<h3><span>\ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ubc95\uc0ac \ubc0f \uc0c8\ub85c\uc6b4 \ud504\ub808\uadf8\uba3c\ud2b8 \ud15c\ud50c\ub9bf<\/span><\/h3>\n<p><span><\/span><b><span>File&gt; New&gt; Fragment&gt; Gallery<\/span><\/b><span> \uc744 \ud074\ub9ad<\/span><span>\u00a0\ud558\uac70\ub098 Navigation editor\uc5d0\uc11c <strong>Create new destination<\/strong><\/span><span> \uc744 \ud074\ub9ad\ud558\uc5ec \uc0c8 \ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ubc95\uc0ac \ubc0f \ud504\ub808\uadf8\uba3c\ud2b8 \ud15c\ud50c\ub9bf\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4 .<\/span><\/p>\n<h3><span>Feature-on-feature dependencies<\/span><\/h3>\n<p><span>\uc774\uc804 \ubc84\uc804\uc758 Android Gradle \ud50c\ub7ec\uadf8\uc778\uc5d0\uc11c\ub294 \ubaa8\ub4e0 Dynamic Feature \ubaa8\ub4c8\uc774 \uc571\uc758 \uae30\ubcf8 \ubaa8\ub4c8\uc5d0 \uc885\uc18d\ub418\uc5c8\ub2e4. Android Gradle \ud50c\ub7ec\uadf8\uc778 4.0.0\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uc774\uc81c \ub2e4\ub978 feature \ubaa8\ub4c8\uc5d0 \uc758\uc874\ud558\ub294 feature \ubaa8\ub4c8\uc744 \ud3ec\ud568 \ud560 \uc218 \uc788\ub2e4. \uc989, <\/span><code>:video<\/code>\ubaa8\ub4c8<span>\uc740 <\/span><code>:camera<\/code><span> \ubaa8\ub4c8\uc5d0 \uc758\uc874\ud560 \uc218 \uc788\uace0, base \ubaa8\ub4c8\uc5d0\ub3c4 \uc758\uc874\ud55c\ub2e4.<\/span><\/p>\n<h3><span>&#8216;feature&#8217; \ubc0f &#8216;instantapp&#8217; Android Gradle \ud50c\ub7ec\uadf8\uc778 \uc81c\uac70<\/span><\/h3>\n<p>Android Gradle \ud50c\ub7ec\uadf8\uc778 3.6.0\uc740 Dynamic Feature Plugin (com.android.dynamic-feature)\uc744 \uc0ac\uc6a9\ud558\uc5ec \ube4c\ub4dc \ubc0f \ud328\ud0a4\uc9c0\ud558\uae30 \uc704\ud574 Feature Plugin(com.android.feature) \ubc0f InstantApp Plugin (com.android.instantapp)\uc744 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<h3><span>Kotlin Android \ub77c\uc774\ube0c \ud15c\ud50c\ub9bf<\/span><\/h3>\n<p><span>Android Studio\uc5d0\ub294 Kotlin \ud074\ub798\uc2a4\ub97c \uc704\ud55c Android \ub77c\uc774\ube0c \ud15c\ud50c\ub9bf\uc774 \ud3ec\ud568\ub418\uc5c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc774\uc81c \ud1a0\uc2a4\ud2b8\ub97c \ube60\ub974\uac8c \uc0bd\uc785\ud558\uae30 <\/span><code>toast<\/code>\ub97c \uc785\ub825\ud558\uace0<span>\u00a0<\/span><b><span>Tab<\/span><\/b><span>\uc744 \ub204\ub97c \uc218 \uc788\ub2e4. \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ub77c\uc774\ube0c \ud15c\ud50c\ub9bf\uc758 \uc804\uccb4 \ubaa9\ub85d\uc744 \ubcf4\ub824\uba74 \uba54\ub274 \ub9c9\ub300\uc5d0\uc11c <\/span><b><span>File&gt; Settings<\/span><\/b><span> (\ub610\ub294 macOS\uc5d0\uc11c\u00a0<\/span><b><span>Android Studio&gt; Preferences<\/span><\/b><span>\u00a0)\uc744 \ud074\ub9ad\ud558\uace0\u00a0<\/span><b><span>Editor&gt; Live Templates \uc73c\ub85c \uc774\ub3d9\ud558\uc790.<\/span><\/b><\/p>\n<h3><span>\ub204\ub77d\ub41c Kotlin Maven \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc758 \ubb38\uc81c<\/span><\/h3>\n<p><span>\uae30\uc874 \ud504\ub85c\uc81d\ud2b8\ub97c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\uc5ec Android Studio 4.0\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ub2e4\uc74c \uc624\ub958 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc \ub420 \uc218 \uc788\ub2e4.<\/span><\/p>\n<pre class=\"\">Application build has failed with an error (Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25)<\/pre>\n<p><span>\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uba74 \ud504\ub85c\uc81d\ud2b8\uc758 \ucd5c\uc0c1\uc704\u00a0<\/span><b><span>build.gradle<\/span><\/b><span>\u00a0\ud30c\uc77c\uc5d0\u00a0\ub2e4\uc74c\uc744 \ucd94\uac00\ud558\uc790.<\/span><\/p>\n<pre class=\"\">buildscript {\r\n    repositories {\r\n        ...\r\n        maven { url 'https:\/\/dl.bintray.com\/kotlin\/kotlin-eap' }\r\n    }\r\n}\r\n\r\nallprojects {\r\n    repositories {\r\n        ...\r\n        maven { url 'https:\/\/dl.bintray.com\/kotlin\/kotlin-eap' }\r\n    }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Android Studio 4.0 New Feature \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624 4.0 Canary1\uc744 Canary\uc640 Dev \ucc44\ub110\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud558\ub2e4. Jetpack Compose\uc9c0\uc6d0 Jetpack Compose \ud234\ud0b7\uc740 UI\ub97c \ub9cc\ub4dc\ub294 \ud604\ub300\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc744 \uc81c\uacf5\ud55c\ub2e4. \ub610\ud55c \ud234\ud0b7\uc740 Java\uc640 \uc644\uc804\ud788 \uc0c1\ud638 \uc6b4\uc6a9 \uac00\ub2a5\ud55c \uac04\uacb0\ud558\uace0 \uad00\uc6a9\uc801\uc778 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\ub294 \ub4f1 Kotlin\uc758 \ubaa8\ub4e0 \uc774\uc810\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. Android Studio\ub97c \uc0ac\uc6a9\ud558\uc5ec Jetpack Compose\ub85c \uc571\uc744 \uac1c\ubc1c\ud560 \ub54c \uc0c8 \ud504\ub85c\uc81d\ud2b8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/23971"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23971"}],"version-history":[{"count":3,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/23971\/revisions"}],"predecessor-version":[{"id":24033,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/23971\/revisions\/24033"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}