Android 16å®å šè§£èª¬ïŒæ°APIããã¹ã¯ãããã¢ãŒãã颿¥å¯ŸçãŸã§
Android 16ïŒAPI 36ïŒã®æ°æ©èœã培åºè§£èª¬ãEdge-to-edge匷å¶é©çšããã¹ã¯ãããã¢ãŒããProgressStyleéç¥ãäºæž¬åããã¯ããã²ãŒã·ã§ã³ãªã©ã2026幎ã®Androidéçºè 颿¥ã§å¿ é ã®ãããã¯ãç¶²çŸ ããŸãã

2026幎ã«ãªãªãŒã¹äºå®ã®Android 16ã¯ãAndroidãã©ãããã©ãŒã ã«ãããéèŠãªãã€ã«ã¹ããŒã³ãšãªããŸããæ°ããSDKãªãªãŒã¹ã¢ãã«ããã¹ã¯ãããã¢ãŒã察å¿ãEdge-to-edgeã®åŒ·å¶é©çšãªã©ãéçºè ãç¿åŸãã¹ãå€ãã®å€æŽãå«ãŸããŠããŸããæ¬èšäºã§ã¯ãAndroid 16ã®äž»èŠãªæ°æ©èœãšAPI倿Žã«ã€ããŠè©³ãã解説ããæè¡é¢æ¥ã§åãããå¯èœæ§ã®é«ããããã¯ãç¶²çŸ ããŸãã
Android 16ã®é¢æ¥ã§ã¯ãEdge-to-edgeã®åŒ·å¶é©çšãé©å¿åã¬ã€ã¢ãŠãããã¹ã¯ãããã¢ãŒã察å¿ãæ°ããProgressStyleéç¥ããããŠäºæž¬åããã¯ããã²ãŒã·ã§ã³ã«ã€ããŠã®çè§£ãæ±ããããŸããåæ©èœã®å®è£ æ¹æ³ãšããªããããã®å€æŽãå°å ¥ããããã説æã§ããããã«ããŸãããã
SDKãªãªãŒã¹ã¢ãã«ã®å·æ°
Android 16ã§ã¯ãåŸæ¥ã®ãªãªãŒã¹ãµã€ã¯ã«ãå€§å¹ ã«å€æŽãããŸããGoogleã¯ãã¡ãžã£ãŒã»ãã€ããŒãæ¹åŒãæ¡çšãã幎éãéããŠããé »ç¹ãªã¢ããããŒããæäŸããäœå¶ã«ç§»è¡ããŸããã
ã¡ãžã£ãŒãªãªãŒã¹ïŒQ2äºå®ïŒã§ã¯ãæ°ããAPIã¬ãã«ã®å°å ¥ãåäœå€æŽãæ°æ©èœãå«ãŸããŸããäžæ¹ããã€ããŒãªãªãŒã¹ïŒQ4äºå®ïŒã§ã¯ãAPIã®å¢åæŽæ°ããã°ä¿®æ£ãäžå¿ãšãªããŸãããã®å€æŽã«ãããéçºè ã¯ããè¿ éã«æ°æ©èœãžã¢ã¯ã»ã¹ã§ããã»ãã¥ãªãã£ããããæ©æã«é©çšãããŸãã
颿¥ã§ã¯ããã®ãªãªãŒã¹ã¢ãã«ã®å€æŽãã¢ããªéçºã«ã©ã®ãããªåœ±é¿ãäžããããtargetSdkVersionã®æŽæ°æŠç¥ãã©ã®ããã«èšç»ãã¹ããã«ã€ããŠè³ªåãããå¯èœæ§ããããŸããã¡ãžã£ãŒãªãªãŒã¹ã§ã¯12ã¶æä»¥å ã«targetSdkVersionãæŽæ°ããå¿ èŠããããGoogle Playã®èŠä»¶ãžã®å¯Ÿå¿ãéèŠãšãªããŸãã
Edge-to-edgeã®åŒ·å¶é©çš
Android 16ãã¿ãŒã²ãããšããã¢ããªã§ã¯ãEdge-to-edge衚瀺ãããã©ã«ãã§æå¹åããããªããã¢ãŠãã¯äžå¯èœãšãªããŸããããã¯ãAPI 35ã§å°å ¥ãããEdge-to-edgeæ©èœã®é²å圢ã§ããããã¹ãŠã®ã¢ããªã§ã·ãŒã ã¬ã¹ãªå šç»é¢äœéšãæäŸããããšãç®çãšããŠããŸãã
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// enableEdgeToEdge() is now the default on API 36+
// No opt-out available
enableEdgeToEdge()
setContent {
Scaffold(
modifier = Modifier.fillMaxSize()
) { innerPadding ->
// innerPadding accounts for system bars
MainContent(
modifier = Modifier.padding(innerPadding)
)
}
}
}
}ãã®å€æŽã«å¯Ÿå¿ããããã«ã¯ãWindowInsetsãé©åã«åŠçããå¿
èŠããããŸããScaffoldã³ã³ããŒãã³ãã®innerPaddingã䜿çšããããšã§ãã·ã¹ãã ããŒïŒã¹ããŒã¿ã¹ããŒãšããã²ãŒã·ã§ã³ããŒïŒã®é åãèæ
®ããã¬ã€ã¢ãŠããå®çŸã§ããŸãã
æ¢åã¢ããªã®ç§»è¡ã§ã¯ã3ãã¿ã³ããã²ãŒã·ã§ã³äœ¿çšæã®ããã²ãŒã·ã§ã³ããŒèæ¯è²ãéæã«ãªãç¹ããžã§ã¹ãã£ãŒããã²ãŒã·ã§ã³æã®ã·ã¹ãã ããŒãåžžã«éæãšãªãç¹ã«æ³šæãå¿
èŠã§ãããŸããandroid:windowLayoutInDisplayCutoutMode屿§ã¯LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYSãããã©ã«ããšãªãããã£ã¹ãã¬ã€ã«ããã¢ãŠãé åãžã®å¯Ÿå¿ãæ±ããããŸãã
é©å¿åã¢ããªãšå€§ç»é¢å¯Ÿå¿
Android 16ã§ã¯ã倧ç»é¢ããã€ã¹ãžã®å¯Ÿå¿ãããã«åŒ·åãããŸããç»é¢ãµã€ãºã600dp以äžã®ããã€ã¹ã§ã¯ãæ¹åãç»é¢ãµã€ãºã®å¶éãç¡èŠãããã¢ããªã¯ããã€ã¹ã®åãã«é¢ä¿ãªãã¬ã¿ãŒããã¯ã¹è¡šç€ºãªãã§ãã«ãŠã£ã³ããŠã§å®è¡ãããŸãã
// Responsive layout using WindowSizeClass
@Composable
fun AdaptiveLayout() {
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
when {
windowSizeClass.windowWidthSizeClass ==
WindowWidthSizeClass.EXPANDED -> {
// Two-pane layout for tablets/desktop
TwoPaneLayout()
}
windowSizeClass.windowWidthSizeClass ==
WindowWidthSizeClass.MEDIUM -> {
// Adapted layout for foldables
MediumLayout()
}
else -> {
// Phone layout
CompactLayout()
}
}
}WindowSizeClassãæŽ»çšããããšã§ãç»é¢ãµã€ãºã«å¿ããæé©ãªã¬ã€ã¢ãŠããæäŸã§ããŸããEXPANDEDã¯ã©ã¹ïŒ840dp以äžïŒã§ã¯ã¿ãã¬ããããã¹ã¯ãããåãã®2ãã€ã³ã¬ã€ã¢ãŠããMEDIUMã¯ã©ã¹ïŒ600dpã840dpïŒã§ã¯æãããã¿ããã€ã¹åãã®é©å¿åã¬ã€ã¢ãŠããCOMPACTã¯ã©ã¹ïŒ600dpæªæºïŒã§ã¯ã¹ããŒããã©ã³åãã®ã·ã³ã°ã«ãã€ã³ã¬ã€ã¢ãŠããå®è£
ããŸãã
ãã®å€æŽã«ãããresizeableActivity="false"ãç¹å®ã®åãå¶éïŒscreenOrientationïŒãèšå®ããŠããŠãã倧ç»é¢ããã€ã¹ã§ã¯ç¡èŠãããŸããéçºè
ã¯ãããããç»é¢ãµã€ãºãšã¢ã¹ãã¯ãæ¯ã«å¯Ÿå¿ã§ããã¬ã¹ãã³ã·ããªUIãèšèšããå¿
èŠããããŸãã
ãã¹ã¯ãããã¢ãŒã察å¿
Android 16ã§ã¯ããã¹ã¯ããããŠã£ã³ããŠç°å¢ã®ãµããŒãã匷åãããŸããOEMã¡ãŒã«ãŒããã¹ã¯ãããã¢ãŒããæå¹ã«ããããã€ã¹ã§ã¯ãã¢ããªãããªãŒãã©ãŒã ãŠã£ã³ããŠã§åäœãããã«ããŠã£ã³ããŠç°å¢ã§ã®äœ¿çšãæ³å®ãããŸãã
fun launchOnExternalDisplay(context: Context) {
val displayManager = context.getSystemService(
Context.DISPLAY_SERVICE
) as DisplayManager
// Find external displays
val externalDisplays = displayManager.displays.filter {
it.displayId != Display.DEFAULT_DISPLAY
}
if (externalDisplays.isNotEmpty()) {
val options = ActivityOptions.makeBasic().apply {
launchDisplayId = externalDisplays.first().displayId
}
context.startActivity(
Intent(context, DesktopActivity::class.java),
options.toBundle()
)
}
}å€éšãã£ã¹ãã¬ã€ãžã®Activityèµ·åã«ã¯ãDisplayManagerã䜿çšããŠå©çšå¯èœãªãã£ã¹ãã¬ã€ãæ€åºããActivityOptions.setLaunchDisplayId()ã§å¯Ÿè±¡ãã£ã¹ãã¬ã€ãæå®ããŸãããã¹ã¯ãããã¢ãŒãã§ã¯ãããŒããŒãã·ã§ãŒãã«ãã察å¿ãããŠã¹ãããŒç¶æ
ã®åŠçããŠã£ã³ããŠãªãµã€ãºãžã®é©åãªå¯Ÿå¿ãæ±ããããŸãã
ã¢ããªã®äºææ§ã確ä¿ãããããèšå®ã¢ããªãŸãã¯adbã³ãã³ãïŒadb shell am compat enable ENABLE_DESKTOP_WINDOWING_MODE <package>ïŒã§ãã¹ã¯ããããŠã£ã³ããŠã¢ãŒããæå¹ã«ããŠãã¹ãããããšãæšå¥šãããŸãã
Androidã®é¢æ¥å¯Ÿçã¯ã§ããŠããŸããïŒ
ã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã¿ãŒãflashcardsãæè¡ãã¹ãã§ç·Žç¿ããŸãããã
ProgressStyleéç¥ã®å°å ¥
Android 16ã§ã¯ãæ°ããNotification.ProgressStyleã远å ããããã«ãã»ã°ã¡ã³ãã®é²æç¶æ³ãèŠèŠçã«è¡šçŸã§ããããã«ãªããŸãããé
é远跡ãã©ã€ãã·ã§ã¢ãªã³ã°ãªã©ãè€æ°ã®ã¹ããããæã€ããã»ã¹ã®ç¶æ
è¡šç€ºã«æé©ã§ãã
fun buildDeliveryNotification(
context: Context,
orderId: String,
progress: Float, // 0.0 to 1.0
currentStep: String
): Notification {
val style = Notification.ProgressStyle()
.setStyledByProgress(true)
.setProgress(progress)
.setProgressTrackerIcon(
Icon.createWithResource(context, R.drawable.ic_delivery_truck)
)
.addProgressSegment(
Notification.ProgressStyle.Segment(0.33f)
.setColor(context, R.color.segment_preparing)
)
.addProgressSegment(
Notification.ProgressStyle.Segment(0.33f)
.setColor(context, R.color.segment_in_transit)
)
.addProgressSegment(
Notification.ProgressStyle.Segment(0.34f)
.setColor(context, R.color.segment_delivered)
)
.addProgressPoint(
Notification.ProgressStyle.Point(0.0f)
.setLabel("Order placed")
)
.addProgressPoint(
Notification.ProgressStyle.Point(0.33f)
.setLabel("Preparing")
)
.addProgressPoint(
Notification.ProgressStyle.Point(0.66f)
.setLabel("In transit")
)
.addProgressPoint(
Notification.ProgressStyle.Point(1.0f)
.setLabel("Delivered")
)
return Notification.Builder(context, DELIVERY_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Order #$orderId")
.setContentText(currentStep)
.setStyle(style)
.setOngoing(true)
.build()
}ProgressStyleã§ã¯ãSegmentã䜿çšããŠé²æããŒãè€æ°ã®åºéã«åå²ããååºéã«ç°ãªãè²ãèšå®ã§ããŸããPointã远å ããããšã§ãç¹å®ã®é²æäœçœ®ã«ã©ãã«ã衚瀺ãããŠãŒã¶ãŒã«çŸåšã®ç¶æ
ãæç¢ºã«äŒããããŸããsetStyledByProgress(true)ãèšå®ãããšã鲿å€ã«åºã¥ããŠã»ã°ã¡ã³ãã®è²ãèªåçã«æŽæ°ãããŸãã
äºæž¬åããã¯ããã²ãŒã·ã§ã³
Android 16ã§ã¯ãäºæž¬åããã¯ããã²ãŒã·ã§ã³ïŒPredictive BackïŒãå®å
šã«æå¹åãããŸããAPI 36ãã¿ãŒã²ãããšããã¢ããªã§ã¯ãandroid:enableOnBackInvokedCallback屿§ãèªåçã«trueã«èšå®ãããæ°ããããã¯ããã²ãŒã·ã§ã³ã·ã¹ãã ãžã®ç§»è¡ãå¿
é ãšãªããŸãã
class DetailActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= 36) {
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher
.PRIORITY_SYSTEM_NAVIGATION_OBSERVER
) {
// Observe back navigation without intercepting
// Log analytics or trigger save-draft logic
analyticsTracker.logBackNavigation(
screen = "detail"
)
}
}
}
}OnBackInvokedCallbackã䜿çšããããšã§ãããã¯ããã²ãŒã·ã§ã³ãã€ã³ã¿ãŒã»ããããã«ç£èŠã§ããŸããPRIORITY_SYSTEM_NAVIGATION_OBSERVERãæå®ãããšãå®éã®ããã²ãŒã·ã§ã³åŠçã«ã¯åœ±é¿ãäžããã«ãã¢ããªãã£ã¯ã¹ã®èšé²ãäžæžãä¿åãªã©ã®ããžãã¯ãå®è¡ã§ããŸãã
åŸæ¥ã®onBackPressed()ã¡ãœããã¯éæšå¥šãšãªããæ°ããã³ãŒã«ããã¯ããŒã¹ã®ã·ã¹ãã ã«ç§»è¡ããå¿
èŠããããŸãããã®å€æŽã«ãããã·ã¹ãã ã¯æ»ãæäœã®çµæãäºåã«äºæž¬ããã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ãæäŸã§ããããã«ãªããŸãã
éç¥ã¯ãŒã«ããŠã³ãšã°ã«ãŒãå
ãŠãŒã¶ãŒäœéšã®åäžãç®çãšããŠãAndroid 16ã§ã¯éç¥ã®ã¯ãŒã«ããŠã³å¹æãå°å ¥ãããŸããã¢ããªãçæéã«å€§éã®éç¥ãéä¿¡ãããšãã·ã¹ãã ã¯èªåçã«éç¥é³ãšãã€ãã¬ãŒã·ã§ã³ãæå¶ããèŠèŠçã«ãéç¥ã®éèŠåºŠãäžããŠè¡šç€ºããŸãã
ãã®æ©èœã¯ãã©ã¢ã°ã©ãŠã³ããµãŒãã¹éç¥ãã¡ãã£ã¢ã»ãã·ã§ã³éç¥ãç¹å®ã®DNDïŒãããã¿ã¢ãŒãïŒé€å€èšå®ã®ããéç¥ã«ã¯é©çšãããŸãããéçºè ã¯ãéç¥ã®éä¿¡é »åºŠãé©åã«ç®¡çããéèŠãªæ å ±ã®ã¿ããŠãŒã¶ãŒã«éç¥ããèšèšãå¿ãããå¿ èŠããããŸãã
ãŸããè€æ°ã®é¢é£ããéç¥ã¯ã°ã«ãŒãåããŠéä¿¡ããããšãæšå¥šãããŸããNotificationCompat.Builderã®setGroup()ã¡ãœããã䜿çšãããµããªãŒéç¥ãšçµã¿åãããããšã§ããŠãŒã¶ãŒã®éç¥ã»ã³ã¿ãŒãæŽçãããç¶æ
ã«ä¿ãŠãŸãã
Health Connectã®FHIR察å¿ãšRangingManager
Android 16ã§ã¯ãHealth Connectã«å»çèšé²ã®FHIRïŒFast Healthcare Interoperability ResourcesïŒå¯Ÿå¿ã远å ãããŸããå»çæ©é¢ããã®ããŒã¿ãFHIRãã©ãŒãããã§èªã¿æžãã§ããããã«ãªãããã«ã¹ã±ã¢ã¢ããªã®å¯èœæ§ã倧ããåºãããŸãããã ãããã®æ©èœãžã®ã¢ã¯ã»ã¹ã«ã¯ç¹å¥ãªæš©éãå¿ èŠã§ããããã¹ãŠã®ã¢ããªã§å©çšã§ããããã§ã¯ãããŸããã
ãŸããè¶
åºåž¯åç¡ç·ïŒUWBïŒãWi-FiãBluetoothãçµ±åããæ°ããRangingManager APIãå°å
¥ãããŸãããã®APIã«ãããå©çšå¯èœãªæè¡ãåçã«éžæããŠæ£ç¢ºãªè·é¢æž¬å®ãå®è¡ã§ããããã€ã¹éã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããã±ãŒã·ã§ã³ããŒã¹ã®æ©èœãå®è£
ã§ããŸãã
颿¥ã§åãããAndroid 16ã®è³ªåãšåç
以äžã¯ãAndroid 16ã«é¢ããæè¡é¢æ¥ã§é »åºãã質åãšæš¡ç¯åçã§ãã
Q1: Android 16ã§Edge-to-edgeã匷å¶é©çšãããçç±ãšå¯Ÿå¿æ¹æ³ã説æããŠãã ããã
Edge-to-edgeã®åŒ·å¶é©çšã¯ããã¹ãŠã®Androidã¢ããªã§äžè²«ããæ²¡å
¥æã®ããäœéšãæäŸããããã«å°å
¥ãããŸãããAPI 36ãã¿ãŒã²ãããšããã¢ããªã§ã¯ãã·ã¹ãã ããŒã®åŸãã«ã³ã³ãã³ããæç»ããããšãããã©ã«ããšãªãããªããã¢ãŠãã¯ã§ããŸãããå¯Ÿå¿æ¹æ³ãšããŠã¯ãScaffoldã³ã³ããŒãã³ãã®innerPaddingã䜿çšããŠã·ã¹ãã ããŒé åãèæ
®ããã¬ã€ã¢ãŠããå®è£
ããWindowInsets APIãæŽ»çšããŠã³ã³ãã³ãã®é
眮ã調æŽããŸãã
Q2: WindowSizeClassã䜿çšããé©å¿åã¬ã€ã¢ãŠãã®å®è£ æ¹æ³ã説æããŠãã ããã
WindowSizeClassã¯ãããã€ã¹ã®ç»é¢ãµã€ãºãCOMPACTãMEDIUMãEXPANDEDã®3ã€ã®ã«ããŽãªã«åé¡ããŸããJetpack Composeã§ã¯ãcurrentWindowAdaptiveInfo().windowSizeClassã䜿çšããŠçŸåšã®ãŠã£ã³ããŠãµã€ãºã¯ã©ã¹ãååŸããwhenåŒã§æ¡ä»¶åå²ããŠããããã«é©ããã¬ã€ã¢ãŠãã衚瀺ããŸãããã®å®è£
ã«ãããåäžã®ã³ãŒãããŒã¹ã§ãã¹ãŠã®ãã©ãŒã ãã¡ã¯ã¿ãŒã«å¯Ÿå¿ã§ããŸãã
Q3: äºæž¬åããã¯ããã²ãŒã·ã§ã³ã®ä»çµã¿ãšç§»è¡æ¹æ³ã説æããŠãã ããã
äºæž¬åããã¯ããã²ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãããã¯ãžã§ã¹ãã£ãŒãéå§ããéã«ã次ã®ç»é¢ã®ãã¬ãã¥ãŒã衚瀺ããæ©èœã§ããAPI 36ã§ã¯ãandroid:enableOnBackInvokedCallbackãèªåçã«æå¹åãããåŸæ¥ã®onBackPressed()ã¯éæšå¥šãšãªããŸããç§»è¡ããã«ã¯ãOnBackInvokedDispatcherã«OnBackInvokedCallbackãç»é²ããããã¯æäœãã³ãŒã«ããã¯ããŒã¹ã§åŠçããŸãã
Q4: ProgressStyleéç¥ã®äœ¿çšçšéãšå®è£ ã®ãã€ã³ãã説æããŠãã ããã
ProgressStyleã¯ãé
é远跡ãã©ã€ãã·ã§ã¢ããã¡ã€ã«ããŠã³ããŒããªã©ããã«ãã¹ãããã®ããã»ã¹ãèŠèŠçã«è¡šçŸããéç¥ã¹ã¿ã€ã«ã§ããå®è£
ã§ã¯ãSegmentã§é²æããŒãè€æ°åºéã«åå²ããååºéã«è²ãèšå®ããŸããPointã§äž»èŠãªãã€ã«ã¹ããŒã³ã«ã©ãã«ã远å ããsetStyledByProgress(true)ã§é²æã«å¿ããèªåçãªã¹ã¿ã€ã«æŽæ°ãæå¹ã«ããŸãã
Q5: Android 16ã®ãªãªãŒã¹ã¢ãã«å€æŽãã¢ããªéçºã«äžãã圱é¿ã説æããŠãã ããã
Android 16ããæ¡çšãããã¡ãžã£ãŒã»ãã€ããŒãªãªãŒã¹ã¢ãã«ã§ã¯ãQ2ã«APIã¬ãã«æŽæ°ãå«ãã¡ãžã£ãŒãªãªãŒã¹ãQ4ã«å¢åæŽæ°ã®ãã€ããŒãªãªãŒã¹ãè¡ãããŸããããã«ãããæ°æ©èœãžã®ã¢ã¯ã»ã¹ãè¿ éåããã»ãã¥ãªãã£ä¿®æ£ãæ©æã«é©çšãããŸããGoogle Playã®èŠä»¶ã§ã¯ãã¡ãžã£ãŒãªãªãŒã¹ãã12ã¶æä»¥å ã«targetSdkVersionãæŽæ°ããå¿ èŠããããããç¶ç¶çãªãã¹ããšç§»è¡äœæ¥ã®èšç»ãéèŠã§ãã
ä»ããç·Žç¿ãå§ããŸãããïŒ
颿¥ã·ãã¥ã¬ãŒã¿ãŒãšæè¡ãã¹ãã§ç¥èããã¹ãããŸãããã
ãŸãšã
Android 16ã¯ãéçºè ã«ãšã£ãŠå€ãã®éèŠãªå€æŽãããããã¡ãžã£ãŒã¢ããããŒãã§ãã
- SDKãªãªãŒã¹ã¢ãã«ïŒã¡ãžã£ãŒã»ãã€ããŒæ¹åŒãžã®ç§»è¡ã«ããã幎éãéããŠããé »ç¹ãªã¢ããããŒããæäŸããã
- Edge-to-edge匷å¶é©çšïŒAPI 36以éãå šç»é¢è¡šç€ºãããã©ã«ããšãªãããªããã¢ãŠãäžå¯
- é©å¿åã¬ã€ã¢ãŠãïŒå€§ç»é¢ããã€ã¹ã§ã®æ¹åå¶éç¡èŠã
WindowSizeClassãæŽ»çšããã¬ã¹ãã³ã·ãUIèšèšãå¿ é - ãã¹ã¯ãããã¢ãŒãïŒããªãŒãã©ãŒã ãŠã£ã³ããŠç°å¢ãžã®å¯Ÿå¿ãå€éšãã£ã¹ãã¬ã€ãµããŒãã®åŒ·å
- ProgressStyleéç¥ïŒãã«ãã»ã°ã¡ã³ãé²æè¡šç€ºã«ããæ¹åããããŠãŒã¶ãŒäœéš
- äºæž¬åããã¯ããã²ãŒã·ã§ã³ïŒã³ãŒã«ããã¯ããŒã¹ã®ããã¯åŠçãžã®å®å šç§»è¡
- éç¥ã¯ãŒã«ããŠã³ïŒé床ãªéç¥éä¿¡ã®èªåæå¶ã«ãããŠãŒã¶ãŒäœéšåäž
- Health Connectã®FHIR察å¿ïŒå»çããŒã¿ã®çžäºéçšæ§åäž
- RangingManager APIïŒUWBãWi-FiãBluetoothãçµ±åããè·é¢æž¬å®æ©èœ
ãããã®å€æŽã«æ©æã«å¯Ÿå¿ãã倧ç»é¢ããã€ã¹ããã¹ã¯ãããã¢ãŒãã§ã®ãã¹ããååã«è¡ãããšã§ãAndroid 16ãªãªãŒã¹æã«æé©ãªãŠãŒã¶ãŒäœéšãæäŸã§ããŸãã颿¥å¯ŸçãšããŠã¯ãåæ©èœã®æè¡çãªå®è£ æ¹æ³ã ãã§ãªãããªããããã®å€æŽãå°å ¥ãããããšããèæ¯ãçè§£ããŠããããšãéèŠã§ãã
ä»ããç·Žç¿ãå§ããŸãããïŒ
颿¥ã·ãã¥ã¬ãŒã¿ãŒãšæè¡ãã¹ãã§ç¥èããã¹ãããŸãããã
ã¿ã°
å ±æ
é¢é£èšäº

AndroidäŸåæ§æ³šå ¥ïŒHilt vs Koin å®å šã¬ã€ããšé¢æ¥è³ªåé 2026
HiltãšKoinã®éããã³ãŒãäŸã»ããã©ãŒãã³ã¹ãã³ãããŒã¯ã»é¢æ¥é »åºè³ªåã§åŸ¹åºæ¯èŒãHilt 2.57ãKoin 4.2察å¿ã®2026å¹Žææ°ã¬ã€ãã

Kotlin 2.3 Android颿¥å¯ŸçïŒååããŒã¹ã®åå²ä»£å ¥ãKMPãé »åºè³ªåã培åºè§£èª¬ã2026幎çã
2026幎ã®Androidéçºè 颿¥ã§åãããKotlin 2.3ã®æ°æ©èœãç¶²çŸ çã«è§£èª¬ãååããŒã¹ã®åå²ä»£å ¥ãKotlin Multiplatformãã³ã³ããã¹ããã©ã¡ãŒã¿ãFlowãšã³ã«ãŒãã³ã®ã³ãŒãäŸä»ãã

Jetpack Compose: é«åºŠãªã¢ãã¡ãŒã·ã§ã³ã段éçã«
Compose ã®é«åºŠãªã¢ãã¡ãŒã·ã§ã³ãå®å šè§£èª¬:é·ç§»ãAnimatedVisibilityãAnimatableããžã§ã¹ãã£ãŒãæ»ãã㪠Android ã€ã³ã¿ãŒãã§ã€ã¹ã®ããã®ããã©ãŒãã³ã¹ã