{"id":2347,"date":"2024-07-12T21:24:22","date_gmt":"2024-07-12T12:24:22","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=2347"},"modified":"2024-07-12T21:24:47","modified_gmt":"2024-07-12T12:24:47","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%eb%b9%8c%eb%93%9c-%ea%b5%ac%ec%84%b1%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2024\/07\/12\/2347\/","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc \ube4c\ub4dc \uad6c\uc131\ud558\uae30 #1"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">JDK<\/h3>\n\n\n\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\ub97c \uc0ac\uc6a9\ud574 \ube4c\ub4dc\ud558\uba74, \uc790\uccb4\uc801\uc73c\ub85c \uc124\uc815\ub41c JDK\ub97c \uc0ac\uc6a9\ud55c\ub2e4. sudio.jdk \ub514\ub809\ud1a0\ub9ac\uac00 \uc788\uc74c. \ub610\ub294, JetBrains Runtime(JBR)\uc774\ub77c\uace0 JDK\ud655\uc7a5\ubc84\uc804\uc744 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\ub791 \ud568\uaed8 \ubc30\ud3ec\ud558\uac8c \ub418\ub294\ub370, \uc774\ub97c \uc0ac\uc6a9\ud558\uace0 \uc774 \ubc29\ubc95\uc774 \uad8c\uc7a5\ub41c\ub2e4.<\/p>\n\n\n\n<p>\ucee4\ub9e8\ub4dc \ub77c\uc778\uc73c\ub85c \ube4c\ub4dc\ud558\uac8c \ub418\uba74, JAVA_HOME\uc744 \ucc3e\uace0 \uc5c6\uc73c\uba74 PATH\uc5d0 \uc788\ub294 java\ub97c \uc2e4\ud589\ud558\uac8c \ub418\ub294\ub370, \uc774 \uacbd\uc6b0 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\uc640 JDK\uac00 \uc548\ub9de\uac8c \ub41c\ub2e4. \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4\uba74, \ub450 \ubc84\uc804\uc744 \ub9de\ucdb0\uc918\uc57c \ud568.<\/p>\n\n\n\n<p>\ube4c\ub4dc \ud560 \ub54c \ucc98\uc74c\uc5d0\ub294 Gradle \ub370\ubaac\uc774 \uc2e4\ud589\ub41c\ub2e4. \ube4c\ub4dc\uac00 \uc644\ub8cc\ub418\ub3c4 \uc774 \ub370\ubaac\uc740 \uc0ac\ub77c\uc9c0\uc9c0 \uc54a\uc73c\uba70 \uc124\uc815\ub41c JDK\ubc84\uc804\uacfc Gradle \ubc84\uc804\uc744 \uc720\uc9c0\ud574\uc11c \ubc18\ubcf5\ub41c \ube4c\ub4dc\ub97c \ube60\ub974\uac8c \uc2e4\ud589\ud574\uc90c. \ub9cc\uc57d\uc5d0 \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ub97c \ube4c\ub4dc\ud558\uac8c \ub418\uba74, \ubc84\uc804\uc774 \ub2e4\ub978\uacbd\uc6b0 \uc0c8\ub85c\uc6b4 \ub370\ubaac\ub4e4\uc774 \uc2e4\ud589\ub41c\ub2e4.<\/p>\n\n\n\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624 \uc0c1\uc5d0\uc11c jdk \uc124\uc815\uc740 File&gt;Settings&gt;Build, Execution, Deployment&gt;Build Tools&gt;Gradle\uc5d0\uc11c \uc124\uc815 \uac00\ub2a5.<\/p>\n\n\n\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c JDK\uc758 \ubaa8\ub4e0 API\ub97c \uc0ac\uc6a9\ud558\uc9c4 \ubabb\ud55c\ub2e4. build.gradle.kts\ub0b4\uc5d0 compileSdk \uc18d\uc131\uc774 \uc5b4\ub5a4 Android SDK \ubc84\uc804\uc744 \uc0ac\uc6a9\ud560\uc9c0 \ub098\ud0c0\ub0c4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"android {\n    ...\n    compileSdk = 33\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">android<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    compileSdk <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">33<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub9cc\uc57d, compileSdk\uc5d0\uc11c \uac00\ub2a5\ud55c API\uc9c0\ub9cc minSdk\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0\uc5d0\ub294 <a href=\"https:\/\/developer.android.com\/studio\/write\/java8-support\">desugaring<\/a>\uc774\ub77c\ub294 \uacfc\uc815\uc744 \uac70\uccd0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc790\uc138\ud788 \ud30c\ubcf8 \ub0b4\uc6a9\uc740 \uc544\ub2c8\uc9c0\ub9cc, \ub300\ucda9 \uc0c8\ub85c\uc6b4 API\ub97c \ubc14\uc774\ud2b8\ucf54\ub4dc\ub85c \ubcc0\ud658\ud574\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud558\uac8c \ub9cc\ub4e4\uc5b4 \uc8fc\ub294 \uae30\ub2a5\uc778 \uac83 \uac19\ub2e4.<\/p>\n\n\n\n<p>sourceCompatibility \uc18d\uc131\uc740 \ucef4\ud30c\uc77c \uacfc\uc815\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud55c \uc790\ubc14 \uc18c\uc2a4 feature\uc758 \ubc84\uc804\uc744 \ud45c\uc2dc\ud55c\ub2e4. \uc774\ub294 \uc790\ubc14\uc18c\uc2a4\uc5d0\ub9cc \uc601\ud5a5\uc744 \uc900\ub2e4. \ucf54\ud2c0\ub9b0\uacfc \uc790\ubc14\uc758 \ucef4\ud30c\uc77c \ub54c \uc0ac\uc6a9\ud560 \uc790\ubc14\uc758 \ubc14\uc774\ub108\ub9ac feature\ub294 targetCompatibility\uc640 jvmTarget\uc18d\uc131\uc73c\ub85c \uc815\ud574\uc900\ub2e4. targetCompatibility\ub294 \ub514\ud3f4\ud2b8\ub85c sourceCompatibility\uc640 \uac19\uc740 \uac12\uc744 \uac16\ub294\ub2e4. \uba85\uc2dc\ud574 \uc8fc\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc774\ubcf4\ub2e4 \uac19\uac70\ub098 \ud070 \uac12\uc774\uc5b4\uc57c \ud55c\ub2e4. jvmTarget\uc740 \ub514\ud3f4\ud2b8\ub85c \ud234\uccb4\uc778 \ubc84\uc804\uc774\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"android {\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_1_8\n        targetCompatibility = JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = &quot;1.8&quot;\n    }\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">android<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">compileOptions<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        sourceCompatibility <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> JavaVersion.VERSION_1_8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        targetCompatibility <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> JavaVersion.VERSION_1_8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">kotlinOptions<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        jvmTarget <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.8&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configure app module<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">application ID<\/h4>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"android {\n    defaultConfig {\n        applicationId = &quot;com.example.myapp\n\n&quot;\n        minSdk = 15\n        targetSdk = 24\n        versionCode = 1\n        versionName = &quot;1.0&quot;\n    }\n    ...\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">android<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">defaultConfig<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        applicationId <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;com.example.myapp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        minSdk <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">15<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        targetSdk <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        versionCode <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        versionName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>application ID\ub294 \ubc14\ub85c package name\uacfc \ubb36\uc5ec \uc788\uc73c\uba70, \uc571 \ub0b4\uc5d0\uc11c\ub294 Context.getPackageName()\uc73c\ub85c application ID\ub97c \uc5bb\uc5b4\uc62c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>instrumentation test\ub97c \uc704\ud55c application ID\ub294 \uc790\ub3d9\uc73c\ub85c \ub4a4\uc5d0 .test\uac00 \ubd99\ub294\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">namespace<\/h4>\n\n\n\n<p>\ubaa8\ub4e0 \uc548\ub4dc\ub85c\uc774\ub4dc \ubaa8\ub4c8\uc740 namespace\ub97c \uac16\ub294\ub2e4. \uc774\ub294 \uc0dd\uc131\ub418\ub294 \ub9ac\uc18c\uc2a4 \ud074\ub798\uc2a4 R\uacfc BuildConfig \ud074\ub798\uc2a4\uc5d0 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"android {\n    namespace = &quot;com.example.myapp\n\n&quot;\n    ...\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">android<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    namespace <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;com.example.myapp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Dependencies<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Version Catalogs<\/h4>\n\n\n\n<p>version catalog\ub97c \uc774\uc6a9\ud558\ub294\uac78 \uad8c\uc7a5\ud558\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\ub2e4. version catalog\ub294 gradle \ud3f4\ub354 \ubc0f\uc5d0 libs.versions.toml\ud30c\uc77c\ub85c \uc791\uc131\ub428. [versions] \ud56d\ubaa9\uc5d0 \ubc84\uc804 gradle \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \ucc38\uc870 \ud560 \uc218 \uc788\ub294 alias\ub4e4\uc744 \uc815\uc758\ud558\uace0, [libraries]\ud56d\ubaa9\uc5d0\ub294 \ub85c\uceec \ub610\ub294 \uc6d0\uaca9 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4, [plugin]\ud56d\ubaa9\uc5d0\ub294 \ud50c\ub7ec\uadf8\uc778\uc5d0 \ub300\ud55c alias\ub97c \uc815\uc758\ud55c\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\uc5d0\uc11c \uc0c8\ub85c \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131\uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 toml\ud30c\uc77c\uc774 \uc0dd\uc131\ub428.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[versions]\nagp = &quot;8.4.1&quot;\nkotlin = &quot;1.9.0&quot;\ncoreKtx = &quot;1.13.1&quot;\njunit = &quot;4.13.2&quot;\njunitVersion = &quot;1.1.5&quot;\nespressoCore = &quot;3.5.1&quot;\nappcompat = &quot;1.7.0&quot;\nmaterial = &quot;1.12.0&quot;\nactivity = &quot;1.9.0&quot;\nconstraintlayout = &quot;2.1.4&quot;\n\n[libraries]\nandroidx-core-ktx = { group = &quot;androidx.core&quot;, name = &quot;core-ktx&quot;, version.ref = &quot;coreKtx&quot; }\njunit = { group = &quot;junit&quot;, name = &quot;junit&quot;, version.ref = &quot;junit&quot; }\nandroidx-junit = { group = &quot;androidx.test.ext&quot;, name = &quot;junit&quot;, version.ref = &quot;junitVersion&quot; }\nandroidx-espresso-core = { group = &quot;androidx.test.espresso&quot;, name = &quot;espresso-core&quot;, version.ref = &quot;espressoCore&quot; }\nandroidx-appcompat = { group = &quot;androidx.appcompat&quot;, name = &quot;appcompat&quot;, version.ref = &quot;appcompat&quot; }\nmaterial = { group = &quot;com.google.android.material&quot;, name = &quot;material&quot;, version.ref = &quot;material&quot; }\nandroidx-activity = { group = &quot;androidx.activity&quot;, name = &quot;activity&quot;, version.ref = &quot;activity&quot; }\nandroidx-constraintlayout = { group = &quot;androidx.constraintlayout&quot;, name = &quot;constraintlayout&quot;, version.ref = &quot;constraintlayout&quot; }\n\n[plugins]\nandroid-application = { id = &quot;com.android.application&quot;, version.ref = &quot;agp&quot; }\njetbrains-kotlin-android = { id = &quot;org.jetbrains.kotlin.android&quot;, version.ref = &quot;kotlin&quot; }\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[versions]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">agp <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;8.4.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">kotlin <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.9.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">coreKtx <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.13.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">junit <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;4.13.2&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">junitVersion <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.1.5&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">espressoCore <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;3.5.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">appcompat <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.7.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">material <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.12.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">activity <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.9.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">constraintlayout <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;2.1.4&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[libraries]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">core<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">ktx <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.core&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;core-ktx&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;coreKtx&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">junit <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;junit&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;junit&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;junit&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">junit <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.test.ext&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;junit&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;junitVersion&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">espresso<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">core <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.test.espresso&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;espresso-core&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;espressoCore&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">appcompat <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.appcompat&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;appcompat&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;appcompat&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">material <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;com.google.android.material&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;material&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;material&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">activity <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.activity&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;activity&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;activity&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">constraintlayout <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.constraintlayout&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;constraintlayout&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;constraintlayout&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[plugins]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">android<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">application <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;com.android.application&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;agp&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">jetbrains<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">kotlin<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">android <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;org.jetbrains.kotlin.android&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;kotlin&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc774\ub807\uac8c \uc791\uc131\ub41c version catalog\ub97c build.gradle.kts\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"plugins {\n  alias(libs.plugins.androidApplication)\n}\n\ndependencies {\n  implementation(libs.androidx.benchmark.macro)\n  implementation(libs.my.library)\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">plugins<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">alias<\/span><span style=\"color: #ADBAC7\">(libs.plugins.androidApplication)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">implementation<\/span><span style=\"color: #ADBAC7\">(libs.androidx.benchmark.macro)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">implementation<\/span><span style=\"color: #ADBAC7\">(libs.my.library)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>plugin\uc758 \uacbd\uc6b0, libs.plugins\uac00 \uc55e\uc5d0 \ubd99\uc740\uac78 \ubcfc \uc218 \uc788\uace0, dependencies\uc758 \uacbd\uc6b0 libs\uac00 \ubd99\uc5b4\uc788\ub2e4. \uc774\ub294 libs\uac00 \ud604\uc7ac \uce74\ud0c8\ub85c\uadf8 \uc774\ub984\uc774\uba70, \uadf8 \ub4a4\uc5d0 plugins\uac00 \ubd99\uc5b4 [plugins]\ud56d\ubaa9\uc744 \ucc38\uc870\ud558\uace0 \uc788\ub294 \uac83\uc774\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c [versions]\uc744 \ucc38\uc870\ud558\uace0 \uc2f6\ub2e4\uba74 alias\uc55e\uc5d0 libs.versions\ub97c \uc811\ubbf8\uc5b4\ub85c \ubd99\uc774\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">dependencies block<\/h4>\n\n\n\n<p>build.gradle.kts\uc758 dependencies \ube14\ub7ed\uc5d0\uc11c\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131\uc744 \uc120\uc5b8\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p><strong>implementation <\/strong>: \uac00\uc7a5 \uc775\uc219\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131\uc744 \uae30\uc220\ud558\ub294 configuration\uc774\ub2e4. \uc774\ub294 \ud574\ub2f9 \ubaa8\ub4c8\uc5d0\ub9cc \uc758\uc874\uc131\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4\ub294 \uc758\ubbf8\ub85c, \uba40\ud2f0 \ubaa8\ub4c8 \uc571\uc5d0\uc11c \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ubcc0\uacbd\ub418\uc5b4\ub3c4 \uc758\uc874\uc131\uc744 \uac00\uc9c4 \ubaa8\ub4c8\ub4e4\ub9cc \uc7ac\ucef4\ud30c\uc77c\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<p><strong>api <\/strong>: implementation\uacfc \ub2ec\ub9ac \ub2e4\ub978 \ubaa8\ub4c8\uae4c\uc9c0 \uc758\uc874\uc131\uc744 \uac00\uc9c4\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac \ubcc0\uacbd\uc2dc, \ubaa8\ub4e0 \ubaa8\ub4c8\uc774 \ucef4\ud30c\uc77c \ub418\uae30 \ub54c\ubb38\uc5d0 \uc0ac\uc6a9\uc5d0 \uc8fc\uc758. \uadf8\ub0e5 implementation \uc368\ub77c.<\/p>\n\n\n\n<p><strong>compileOnly <\/strong>: implementaion\uacfc api\uac00 \ucef4\ud30c\uc77c\uc774\ub098 \uc544\uc6c3\ud48b \ubaa8\ub450\uc5d0 \uc801\uc6a9\ub41c\ub2e4\uba74, \uc774\uac74 compile\uc2dc\uc5d0\ub9cc \uc801\uc6a9\ub41c\ub2e4. \uc608\ub97c\ub4e4\uc5b4, \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \ucf54\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 annotation\uac19\uc740 \uacbd\uc6b0 \uc774\ub97c \uc0ac\uc6a9\ud558\uba74\ub41c\ub2e4.<\/p>\n\n\n\n<p><strong>runtimeOnly <\/strong>: compileOnly\uc640 \ubc18\ub300\ub85c build output\uc5d0\ub9cc \uc801\uc6a9\ub41c\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\ub294 \uac70\uc758 \uc548\ubcf4\uc774\uace0 \uc11c\ubc84 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uacbd\uc6b0 \uc0ac\uc6a9\ub418\uae30\ub3c4 \ud55c\ub2e4\uace0.<\/p>\n\n\n\n<p><strong>ksp, kapt, annotationProcessor<\/strong> : annotation\ub4e4\uacfc \ub2e4\ub978 \uc2ec\ubcfc\ub4e4\uc744 \ucef4\ud30c\uc77c \uc804\uc5d0 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c configuration\ub4e4\uc774\ub2e4. ksp\ub294 Kotlin Symbol Processor\uc774\uba70, \ucf54\ud2c0\ub9b0 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uc2e4\ud589\ub41c\ub2e4. kapt\/apt\ub294 \ucf54\ud2c0\ub9b0\uc774\ub098 \uc790\ubc14 \ucef4\ud30c\uc77c \uc774\uc804\uc5d0 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucc98\ub9ac\ud558\ub294 \ubcc4\ub3c4\uc758 \ud234\uc774\ub2e4. \ucf54\ud2c0\ub9b0\uc774 \ubc1c\uc804\ud558\uba74\uc11c ksp\uac00 \uad6c\ud604\ub41c \uac83\uc73c\ub85c ksp \uc0ac\uc6a9\uc774 \uad8c\uc7a5\ub418\uace0 \uc788\uc73c\uba70, \uae30\uc874 <a href=\"https:\/\/developer.android.com\/build\/migrate-to-ksp\">kapt\ub3c4 ksp\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158<\/a> \ud558\ub3c4\ub85d \uad8c\uc7a5\ub41c\ub2e4. \uc774\uacbd\uc6b0, ksp \uad6c\ud604\uc774 \uc548\ub418\uc5b4 \uc788\ub294 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ubd88\uac00\ub2a5 \ud558\uae30\ub3c4 \ud558\ub2e4.<\/p>\n\n\n\n<p><strong>lintChecks <\/strong>: \uc74c&#8230; \ub9b0\ud2b8 \uad00\ub828\uac19\uc740\ub370 \uc798 \uc774\ud574\uac00 \uc548\ub418\ub124.<\/p>\n\n\n\n<p><strong>lintPublish <\/strong>: lintChecks \uc774\ud6c4\uc5d0 \ub098\uc628\uac70\uac19\ub2e4. \uac19\uc740 \uae30\ub2a5\uc778\uac70 \uac19\uc740\ub370, \uc774\uac78\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \ud544\uc694\ud558\ub2e4\uace0 \ud568.<\/p>\n\n\n\n<p>\ud2b9\uc815\ud55c build variant\uc5d0 \ub300\ud574\uc11c\ub9cc dependency\ub97c \uc801\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0, \ud574\ub2f9 build variant\ub97c Implementation\uc55e\uc5d0 \uc811\ub450\uc5b4\ub85c \ubd99\uc5ec\uc900\ub2e4. \ubb34\ub8cc\ubc84\uc804\uc778 &#8220;free&#8221;\ub97c \ube4c\ub4dc\ud55c\ub2e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc4f8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"dependencies {\n    freeImplementation(&quot;com.google.firebase:firebase-ads:21.5.1&quot;)\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">freeImplementation<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;com.google.firebase:firebase-ads:21.5.1&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>product flavor\uc640 build type\uc744 \uc11e\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Initializes a placeholder for the freeDebugImplementation dependency configuration.\nval freeDebugImplementation by configurations.creating\n\ndependencies {\n    freeDebugImplementation(project(&quot;:free-support&quot;))\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">\/\/ Initializes a placeholder for the freeDebugImplementation dependency configuration.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> freeDebugImplementation <\/span><span style=\"color: #F47067\">by<\/span><span style=\"color: #ADBAC7\"> configurations.creating<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">freeDebugImplementation<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">project<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;:free-support&quot;<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ud14c\uc2a4\ud2b8\uc758 \uacbd\uc6b0 \ub2e4\uc74c\ucc98\ub7fc \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"dependencies {\n    \/\/ Adds a remote binary dependency only for local tests.\n    testImplementation(&quot;junit:junit:4.12&quot;)\n\n    \/\/ Adds a remote binary dependency only for the instrumented test APK.\n    androidTestImplementation(&quot;androidx.test.espresso:espresso-core:3.5.1&quot;)\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ Adds a remote binary dependency only for local tests.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">testImplementation<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;junit:junit:4.12&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ Adds a remote binary dependency only for the instrumented test APK.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">androidTestImplementation<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;androidx.test.espresso:espresso-core:3.5.1&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">BOM<\/h4>\n\n\n\n<p>compose \uc0ac\uc6a9\uc2dc BOM\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubc84\uc804\uc744 \uc77c\uad00\ub418\uac8c \uc720\uc9c0\ud560 \uc218 \uc788\ub2e4. <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/bom\">version catalog \uc0ac\uc6a9\uc2dc\uc5d0\ub3c4 BOM \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud558\ub2e4<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[libraries]\nandroidx-compose-bom = { group = &quot;androidx.compose&quot;, name = &quot;compose-bom&quot;, version.ref = &quot;androidxComposeBom&quot; }\nandroidx-compose-foundation = { group = &quot;androidx.compose.foundation&quot;, name = &quot;foundation&quot; }\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[libraries]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">compose<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">bom <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.compose&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;compose-bom&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidxComposeBom&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">androidx<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">compose<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">foundation <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;androidx.compose.foundation&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;foundation&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>build.gradle.kts\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd94\uac00\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"dependencies {\n    val composeBom = platform(libs.androidx.compose.bom) \n    implementation(composeBom) androidTestImplementation(composeBom) \n    \/\/ import Compose dependencies as usual \n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> composeBom <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">platform<\/span><span style=\"color: #ADBAC7\">(libs.androidx.compose.bom) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">implementation<\/span><span style=\"color: #ADBAC7\">(composeBom) <\/span><span style=\"color: #DCBDFB\">androidTestImplementation<\/span><span style=\"color: #ADBAC7\">(composeBom) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ import Compose dependencies as usual <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Multimodule Dependency<\/h4>\n\n\n\n<p>\uba40\ud2f0\ubaa8\ub4c8\uc5d0 \uacf5\ud1b5\uc73c\ub85c \uc801\uc6a9\ud558\uace0 \uc2f6\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ub8e8\ud2b8\uc5d0 \uc788\ub294 build.gradle.kts\ud30c\uc77c\uc5d0 \uc368\uc11c \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc608\ub97c \ub4e4\uc5b4, AGP\uac19\uc740\uacbd\uc6b0 \ub2e4\uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4. \ub8e8\ud2b8\uc5d0 \uc758\uc874\uc131\uc744 \uc4f0\ub294 \uacbd\uc6b0, &#8220;apply false&#8221;\ub97c \ub4a4\uc5d0 \ucd94\uac00\ud574\uc900\ub2e4. \uc774\ub294 AGP\ub97c gradle\uc5d0\uac8c \uc54c\ub824\uc8fc\uc9c0\ub9cc \ub8e8\ud2b8\ube4c\ub4dc\uc2dc \uc774\ub97c \uc0ac\uc6a9\ud558\uc9c0 \ub9d0\ub77c\ub294 \ud45c\uc2dc\uc774\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \ub8e8\ud2b8 \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\ub294 \uc774 \ud50c\ub7ec\uadf8\uc778 \uc678\uc5d0 \ube44\uc5b4\uc788\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"plugins {\n    alias(libs.plugins.android.application) apply false\n    alias(libs.plugins.jetbrains.kotlin.android) apply false\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">plugins<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">alias<\/span><span style=\"color: #ADBAC7\">(libs.plugins.android.application) apply <\/span><span style=\"color: #6CB6FF\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">alias<\/span><span style=\"color: #ADBAC7\">(libs.plugins.jetbrains.kotlin.android) apply <\/span><span style=\"color: #6CB6FF\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ucf54\ub4dc \ube14\ub7ed \uc800\uc7a5\uc5d0 \ubb38\uc81c\uac00 \uc788\uc5b4 \ub2e4\uc74c \ud3ec\uc2a4\ud305\uc73c\ub85c \ub118\uae40.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>JDK \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\ub97c \uc0ac\uc6a9\ud574 \ube4c\ub4dc\ud558\uba74, \uc790\uccb4\uc801\uc73c\ub85c \uc124\uc815\ub41c JDK\ub97c \uc0ac\uc6a9\ud55c\ub2e4. sudio.jdk \ub514\ub809\ud1a0\ub9ac\uac00 \uc788\uc74c. \ub610\ub294, JetBrains Runtime(JBR)\uc774\ub77c\uace0 JDK\ud655\uc7a5\ubc84\uc804\uc744 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\ub791 \ud568\uaed8 \ubc30\ud3ec\ud558\uac8c \ub418\ub294\ub370, \uc774\ub97c \uc0ac\uc6a9\ud558\uace0 \uc774 \ubc29\ubc95\uc774 \uad8c\uc7a5\ub41c\ub2e4. \ucee4\ub9e8\ub4dc \ub77c\uc778\uc73c\ub85c \ube4c\ub4dc\ud558\uac8c \ub418\uba74, JAVA_HOME\uc744 \ucc3e\uace0 \uc5c6\uc73c\uba74 PATH\uc5d0 \uc788\ub294 java\ub97c \uc2e4\ud589\ud558\uac8c \ub418\ub294\ub370, \uc774 \uacbd\uc6b0 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\uc640 JDK\uac00 \uc548\ub9de\uac8c \ub41c\ub2e4. \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4\uba74, \ub450 \ubc84\uc804\uc744 \ub9de\ucdb0\uc918\uc57c \ud568. \ube4c\ub4dc \ud560 \ub54c \ucc98\uc74c\uc5d0\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,34],"tags":[186,394,399,395,400,398,396,397,20],"class_list":["post-2347","post","type-post","status-publish","format-standard","hentry","category-etc","category-android","category-kotlin","tag-android-2","tag-build","tag-build-script","tag-build-gradle-kts","tag-repository","tag-398","tag-396","tag-397","tag-android"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=2347"}],"version-history":[{"count":39,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2347\/revisions"}],"predecessor-version":[{"id":2389,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2347\/revisions\/2389"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=2347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=2347"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=2347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}