Android Corner
تغییرات این نسخه هیجانانگیزه. کلا تغییرات KMP برای من خیلی جذابه(:
کامپوز برای دسکتاپ stableه، برای iOS تو حالت alpha و برای وب هم تو حالت experimental قرار داره.
این نسخه براساس Jetpack Compose 1.5 هستش که تمرکزاش روی performanceه. همچنین تو این نسخه، از نسخه 1.1 Material Design 3 میتونید استفاده کنید که یهسری امکانات جدید داره.
از حالا به بعد دیگه نیاز ندارین برای همه پلتفرمها کدهای جداگانه بنویسین برای ساخت Dialog و Popup DropdownMenu و AlertDialog. با داشتن یکدیگر تیکه کد برای مثلا AlertDialog، تو همه پلتفرمها ازش استفاده کنید:
Composable fun CommonDialog() { var isDialogOpen by remember { mutableStateOf(false) } Button( = { isDialogOpen = true }) { Text("Open") } if (isDialogOpen) { AlertDialog( onDismissRequest = { }, confirmButton = { Button( = { isDialogOpen = false }) { Text("OK") } }, title = { Text("Alert Dialog") }, text = { Text("Lore ipsum") }, ) } }
از طریق windowInset هم میتونین محتواتون رو با system ui یکی کنید یه همچین چیزی:
1- پیمایش یا اسکرولکردن طبیعی: تو این نسخه اسکرولکردن توی iOS مثل اسکرولکردن بومی خود iOS شده. مثلا:
@Composable fun NaturalScrolling() { val items = (1..30).map { "Item $it" } LazyColumn { items(items) { Text( text = it, fontSize = 30.sp, modifier = Modifier.padding(start = 20.dp) ) } } }
اینجوری میشه، مثل اپلیکیشنهای native:
2- پشتیبانی از Dynamic Type: این ویژگی Dynamic Type تو iOS به کاربر امکان میده تا فونت سایز دلخواهاش رو تنظیم کنه. کاربر میتونه تو setting و اون text size گوشی رو حالت دلخواه از max تا min تنظیم کنن.
@Composable fun DynamicType() { Text("This is some sample text", fontSize = 30.sp) }
اینجوری:
پشتیبانی از high-refresh rate display: توی ورژنهای قبلی ماکزیمم فریمریت 60 FPS بوده که منجر به کُند و لَگی بودن ui (تو دستگاههای با صفحه 120Hz) میشد. ولی تو این نسخه فریمریت تا 120 فریم در ثانیه پشتیبانی میشه.
3- سادهشدن مدیریت resource ها: دیگه لازم نیست asset های پوشه resource توی iOS رو توی یه bundle کپی کنید.
4- و یهسری بهبودیهایی توی TextField و صفحه کلید داشتیم.
1- پایدارشدن فریمورک تست برای تست کردن ui بدون محدودیت:
@Composable fun App() { var searchText by remember { mutableStateOf("cats") } val searchHistory = remember { mutableStateListOf<String>() } Column(modifier = Modifier.padding(30.dp)) { TextField( modifier = Modifier.testTag("searchText"), value = searchText, onValueChange = { searchText = it } ) Button( modifier = Modifier.testTag("search"), = { searchHistory.add("You searched for: $searchText") } ) { Text("Search") } LazyColumn { items(searchHistory) { Text( text = it, fontSize = 20.sp, modifier = Modifier.padding(start = 10.dp).testTag("attempt") ) } } } }
نتیجه این کد، این میشه:
خب بیاین با JUnit تستاش کنیم:
class SearchAppTest { @get:Rule val compose = createComposeRule() @Test fun `Should display search attempts`() { compose.setContent { App() } val testSearches = listOf("cats", "dogs", "fish", "birds") for (text in testSearches) { compose.onNodeWithTag("searchText").performTextReplacement(text) compose.onNodeWithTag("search").performClick() } val lastAttempt = compose .onAllNodesWithTag("attempt") .assertCountEquals(testSearches.size) .onLast() val expectedText = "You searched for: ${testSearches.last()}" lastAttempt.assert(hasText(expectedText)) } }
2- این نسخه، پشتیبانیِ آزمایشی رو برای بهبود رندرکردن پنلهای کامپوز توی کامپوننتهای Swing رو هم ارائه میده. این مانع از مشکلات رندر انتقالی(transition) هنگام نمایش، پنهان یا تغییر اندازه پنلها می شود.
fun main() { System.setProperty("compose.swing.render.on.graphics", "true") SwingUtilities.invokeLater { val composePanel = ComposePanel().apply { setContent { Box(modifier = Modifier.background(Color.Black).fillMaxSize()) } } val popup = object : JComponent() { ... } val rightPanel = JLayeredPane().apply { add(composePanel) add(popup) ... } val leftPanel = JPanel().apply { background = CYAN } val splitter = JSplitPane(..., leftPanel,rightPanel) JFrame().apply { add(splitter) setSize(600, 600) isVisible = true } } }
گوگل لوگوی جدیدی رو برای برند اندروید معرفی کرده و میگه که از این به بعد قراره همه جا ببینیدش:
بروزرسانی های سیستم گوگلپلی برای android runtime، یه سری بهبودی هایی رو به همراه داشته البته برای اندروید 12 به بالا و گفتهکه android go هم بزودی از این آپدیت بهرهمند میشه:
1- پیشرفتهای عملکرد: این بروزرسانیها شامل بهینهسازی در زمان اجرا و کامپایلر هستش که باعث بهبود زمان startup برنامه، سرعت اجرای برنامه و استفاده از حافظه می شود.
2- رفع مشکلات امنیتی: همچنین ماژولار بودن ART اجازه میده تا اصلاحات امنیتی به سرعت در دستگاه های اندرویدی قراربگیرن که درنتیجه باعث میشه آسیب پذیری ها را pacth کنند.
3- سازگاری سریعتر با ویژگیهای جدید جاوا: این بروزرسانی سرعت پشتیبانی از نسخههای جدیدتر Java / OpenJDK رو به دستگاه های Android فراهم میکنه و به ما این امکان رو میده تا از جدیدترین ویژگی های زبان استفاده کنیم.
برای خوندن جزییات مقاله.
آخرین نسخه از Dagger and Hilt — v2.48 شامل نسخه alpha از KSP processor هست. الان دیگه با خیال راحت میتونید از kapt به ksp مهاجرت کنید.
یهسری تغییرات هم داشته که اینجا میتونین ببینین.
برای استفاده از ksp این رو دنبال کنید.
برای مهاجرتتون این مقاله رو بخونید.
اینا رو هم بخونین ضرری نداره:
1. بخش article های این لینک رو هم ببینید جالبه.
2. این لینک.
کانال:Android Corner / ایمیل: cornerdroid@gmail.com