2018๋
5์ 8์ผ์ ๊ตฌ๊ธ์ด ๋ฐํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ ๋ชจ์์ง
Jetpack์ด ๋์ค๊ธฐ ์ Support library๊ฐ ์์์ง๋ง ๊ฐ์ ํด์ ๋ค์ ๋์จ ๊ฒ์ด Jetpack
์ฐธ๊ณ ํ ๋น๊ทผ๋ง์ผ ๊ธฐ์ ๋ธ๋ก๊ทธ
com.android.support:support-v4
com.android.support:support-v13
support-v4๋ฅผ ๋ณด๊ณ "๋ฒ์ 4"๋ผ๊ณ ์ฐฉ๊ฐํ ์ ์์ง๋ง ์ฌ์ค์ API ๋ ๋ฒจ 4 ์ด์์ด๋ผ๋ ์๋ฏธ์ด๋ค.
๋๊ฐ์ด support-v13๋ API ๋ ๋ฒจ 13 ์ด์์ ์ง์ํ๋ค๋ ์๋ฏธ์ด๋ค.
ํ์ง๋ง ์๊ฐ์ด ์ง๋๋ฉด ์ง์์ ์ค๋จํ๋ ๊ฒฝ์ฐ๋ ์๊ธฐ๊ธฐ ๋๋ฌธ์ API ๋ ๋ฒจ์ ์๋ฏธํ๋ ๋ค์ด๋ฐ์ ๊ท์น์ฑ์ ์์คํ๋ค.
6.5 ๋ฒ์ ๋ถํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ธฐ๋ฅ ๋ณ๋ก ๋ชจ๋ํ๋์์ง๋ง ๊ทธ ์ด์ ์๋ 3๋ง ๊ฐ์ ๊ฐ๊น์ด ํจ์๋ฅผ ์ ๊ณตํ๋ ๋จ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ค.
๊ทธ๋์ ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ๋ฉ์๋๊ฐ ๋ง์ผ๋ฉด '64K reference limit'์ด๋ผ๋ ์๋ฌ๋ฅผ ๋ง๋๊ฒ ๋๋ค.
์ฌ์ง์ถ์ฒ
ART ๋ฐํ์ ๋ฐ ๋ฉํฐ๋ฑ์ค ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ค๋ฉด์ ์ด ๋ฌธ์ ๋ ๊ธฐ์ ์ ์ผ๋ก ์์ ํ ํด๊ฒฐ๋์ง๋ง, support-v4๋ ์ด๋ณด๋ค 2๋ ๋ค์ธ 24.2.0 ๋ฒ์ ์ด ์ถ์๋๊ธฐ ์ ๊น์ง ๋จ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๊ณต๋๋ค.
์์๋ก
support-core-ui์๋ ViewPager๋ฟ๋ง ์๋๋ผ DrawerLayout, CursorAdapter, SwipeRefreshLayout, SlidingPaneLayout ๋ฑ์ด ํฌํจ๋์ด ์์ด ์ด๋ฐ ๊ตฌ์กฐ๋ก ์ธํด ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋ ์์ ฏ ๊พธ๋ฌ๋ฏธ๋ค์ Gradle ๋น๋ ์์คํ
์ผ๋ก ๋ด๋ ค๋ฐ๊ณ , APK์ ํฌํจํด์ผํด ๋นํจ์จ์ ์ด์๋ค.
์ํฌํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจํค์ง ๋ณ๋ก ์์กด์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ ํ์ ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฐ๊ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ค ๋ค์ด๊ทธ๋ ์ด๋ ํด์ผ ํ๋ค.
์ด๊ฑด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๋ ์ ์ฅ์์๋ ๊ฝค๋ ์ฑ๊ฐ์๊ณ ๋์์ ์ํฌํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ๊ทธ๋ ์ด๋๊ฐ ๋ถ๋ด์ค๋ฌ์ด ์ด์ ์ด๊ธฐ๋ ํ๋ค.
https://developer.android.com/jetpack/androidx/explorer?case=popular
์์ธํ ์ค๋ช
๊ณผ ๋ชฉ๋ก์ ์ ๋งํฌ์ ๋ค์ด๊ฐ์ ํ์ธํ์
๊ฐ๋ฐ์๊ฐ ๋จ๊ณ๋ณ๋ก ์ํํด์ผ ํ ์์ ์ ๋ช ํํ ์ง์
// MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 1. TextView๋ฅผ ๋ช
์์ ์ผ๋ก ์ฐธ์กฐํฉ๋๋ค.
val textView: TextView = findViewById(R.id.textView)
val button: Button = findViewById(R.id.button)
// 2. ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ ์ํฉ๋๋ค.
button.setOnClickListener {
// 3. TextView์ ํ
์คํธ๋ฅผ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ณ๊ฒฝํฉ๋๋ค.
textView.text = "Button Clicked"
}
}
}
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ช ์ํ๋ ๋ฐฉ์์ ๋๋ค. UI ์ ๋ฐ์ดํธ ๋ฑ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ช ๋ น์ด๋ก ์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
์ํ๋ฅผ ์ ์ธํ๊ณ , ๊ทธ ์ํ์ ๋ฐ๋ผ UI๊ฐ ์๋์ผ๋ก ๊ฐฑ์
@Composable
fun MyComposable() {
// 1. ์ํ๋ฅผ ์ ์ธํฉ๋๋ค.
var text by remember { mutableStateOf("Hello, World!") }
// 2. ์ํ์ ๋ฐ๋ผ UI๊ฐ ์๋์ผ๋ก ๊ฐฑ์ ๋๋๋ก ์ปดํฌ์ ๋ธ์ ์ ์ํฉ๋๋ค.
Column {
// 3. Text ์ปดํฌ์ ๋ธ์ ์ํ ๊ฐ์ ๋ฐ๋ผ UI๋ฅผ ๋ ๋๋งํฉ๋๋ค.
Text(text = text)
// 4. ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ํ๋ฅผ ์
๋ฐ์ดํธํ๊ณ , UI๋ ์๋์ผ๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
Button(onClick = { text = "Button Clicked" }) {
Text("Click Me")
}
}
}
@Preview
@Composable
fun PreviewMyComposable() {
MyComposable()
}
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ด ๋ฌด์์ ํด์ผ ํ๋์ง๋ฅผ ์ ์ธํ๋ ๋ฐฉ์์ ๋๋ค. ์ํ๊ฐ ๋ณํ๋ฉด UI๊ฐ ์๋์ผ๋ก ์ฌ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๋ฐ์๋ "๋ฌด์์ ๋ณด์ฌ์ค์ผ ํ๋์ง"๋ง ์ ๊ฒฝ ์๋๋ค.
๐ ๋ช ๋ นํ UI๋ ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ง์ ์ ์ดํด์ผ ํ์ง๋ง ์ ์ธํ UI์์๋ ์ํ๋ง ๊ด๋ฆฌํ๋ฉด ๊ทธ ์ํ์ ๋ง๊ฒ UI๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค.
Jetpack์ ์ถ๊ฐ๋ ์๋ก์ด ๋๊ตฌ ํคํธ