Ürün Haberleri

Android 17'nin üçüncü beta sürümü

Okuma süresi: 5 dakika
Matthew McCullough'un profilini görüntüleme
Matthew McCullough Ürün Yönetimi Başkan Yardımcısı, Android Geliştirici

Android 17, Beta 3 ile bugün resmen platform kararlılığına ulaştı. Bu, API yüzeyinin kilitlendiği anlamına gelir. Son uyumluluk testini yapabilir ve Android 17'yi hedefleyen uygulamalarınızı Play Store'a gönderebilirsiniz. Ayrıca Beta 3, daha iyi, daha güvenli ve yüksek düzeyde entegre uygulamalar geliştirmenize yardımcı olacak bir dizi yeni özellik sunuyor.

Uygulamalarınızı, kitaplıklarınızı, araçlarınızı ve oyun motorlarınızı hazırlayın.

SDK, kitaplık, araç veya oyun motoru geliştiriyorsanız alt akış uygulamanızın ve oyun geliştiricilerinizin uyumluluk sorunları nedeniyle engellenmesini önlemek ve en yeni SDK özelliklerini hedeflemelerine olanak tanımak için gerekli güncellemeleri şimdi yapmanız daha da önemlidir. Lütfen alt geliştiricilerinize, Android 17'nin tam olarak desteklenmesi için güncelleme gerekip gerekmediğini bildirin.

large_Android17Timeline01.png

Test işlemi, Google Play veya başka yöntemler kullanarak üretim uygulamanızı ya da Android 17 Beta 3 çalıştıran bir cihaz veya emülatöre kitaplığınızı ya da motorunuzu kullanan bir test uygulamasını yüklemeyi içerir. Uygulamanızdaki tüm akışları inceleyin ve işlevsel veya kullanıcı arayüzü ile ilgili sorunları tespit edin. Testinizi odaklamak için davranış değişikliklerini inceleyin. Android'in her sürümünde gizliliği, güvenliği ve genel kullanıcı deneyimini iyileştiren platform değişiklikleri bulunur. Bu değişiklikler uygulamalarınızı etkileyebilir. Odaklanmanız gereken bazı değişiklikler:

  • Büyük ekranlarda yeniden boyutlandırılabilirlik: Android 17'yi hedeflediğinizde büyük ekranlarda yön, yeniden boyutlandırılabilirlik ve en-boy oranı kısıtlamalarını korumayı devre dışı bırakamazsınız.
  • Dinamik kod yükleme: Uygulamanız Android 17 veya sonraki sürümleri hedefliyorsa Android 14'te DEX ve JAR dosyaları için kullanıma sunulan daha güvenli dinamik kod yükleme (DCL) koruması artık yerel kitaplıkları da kapsıyor. System.load() kullanılarak yüklenen tüm yerel dosyalar salt okunur olarak işaretlenmelidir. Aksi takdirde sistem UnsatisfiedLinkError hatası verir.
  • CT'yi varsayılan olarak etkinleştir: Sertifika şeffaflığı (CT) varsayılan olarak etkindir. (Android 16'da CT kullanılabilir ancak uygulamaların bu özelliği etkinleştirmesi gerekir.)
  • Yerel ağ korumaları: Android 17 veya sonraki sürümleri hedefleyen uygulamaların yerel ağ erişimi varsayılan olarak engellenir. Mümkünse gizliliği koruyan seçicileri kullanmaya geçin ve geniş kapsamlı, kalıcı erişim için yeni ACCESS_LOCAL_NETWORK iznini kullanın.

Medya ve kamera geliştirmeleri

Fotoğraf Seçici'yi özelleştirme seçenekleri

Android artık fotoğraf seçicinin görsel sunumunu, uygulamanızın kullanıcı arayüzünü daha iyi tamamlayacak şekilde özelleştirmenize olanak tanıyor. Yeni PhotoPickerUiCustomizationParams API'den yararlanarak tablo görünümü en-boy oranını standart 1:1 kareden 9:16 dikey ekrana değiştirebilirsiniz. Bu esneklik, hem ACTION_PICK_IMAGES intent'i hem de yerleştirilmiş fotoğraf seçici için geçerlidir. Böylece, kullanıcılar medyayla etkileşimde bulunduğunda tutarlı bir estetik koruyabilirsiniz.

large_(Default)11aspectratio.png

Bu değişiklikler, gizliliği korumaya yönelik Android fotoğraf seçicinin uygulama deneyiminizle sorunsuz bir şekilde çalışmasına yardımcı olma çabalarımızın bir parçasıdır. En doğal deneyim için fotoğraf seçiciyi doğrudan uygulamanıza nasıl yerleştirebileceğiniz hakkında daha fazla bilgi edinin.

val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

RAW14 görüntü biçimi desteği: Android 17, yeni ImageFormat.RAW14 sabiti aracılığıyla üst düzey dijital fotoğrafçılık için fiili endüstri standardı olan RAW14 görüntü biçimi desteğini sunar. RAW14, her dört pikselin yedi bayta sığdırıldığı, yoğun şekilde paketlenmiş bir düzen kullanan, piksel başına 14 bitlik tek kanallı bir biçimdir.

Tedarikçi tarafından tanımlanan kamera uzantıları: Android 17, donanım iş ortaklarının özel kamera uzantısı modları tanımlayıp uygulayarak "Süper Çözünürlük" veya en yeni yapay zeka destekli geliştirmeler gibi en iyi ve en yeni kamera özelliklerine erişmenizi sağlayan tedarikçi tarafından tanımlanan uzantılar ekler. isExtensionSupported(int) API'sini kullanarak bu modları sorgulayabilirsiniz.

Kamera cihaz türü API'leri: Yeni Android 17 API'leri, bir kameranın yerleşik donanım mı, harici USB web kamerası mı yoksa sanal kamera mı olduğunu belirlemek için temel cihaz türünü sorgulamanıza olanak tanır.

Bluetooth LE Audio işitme cihazı desteği

Android artık Bluetooth Düşük Enerji (BLE) Audio işitme cihazları için özel bir cihaz kategorisi içeriyor. AudioDeviceInfo.TYPE_BLE_HEARING_AID sabiti eklendiğinden uygulamanız artık işitme cihazlarını normal kulaklıklardan ayırt edebilir.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

İşitme cihazları için ayrıntılı ses yönlendirme

Android 17, kullanıcıların belirli sistem seslerinin nerede çalınacağını bağımsız olarak yönetmesine olanak tanır. Bildirimleri, zil seslerini ve alarmları bağlı işitme cihazlarına veya cihazın yerleşik hoparlörüne yönlendirebilirler.

Genişletilmiş HE-AAC yazılım kodlayıcı

Android 17, sistem tarafından sağlanan Extended HE-AAC yazılım kodlayıcıyı kullanıma sunar. Bu kodlayıcı, birleştirilmiş konuşma ve ses kodlaması kullanarak hem düşük hem de yüksek bit hızlarını destekler. Bu kodlayıcıya c2.android.xheaac.encoder adını kullanarak MediaCodec API'si üzerinden veya audio/mp4a-latm MIME türü sorgulanarak erişilebilir.

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

Performans ve Pil İyileştirmeleri

Boşta kalma sırasında izin verilen alarmlar için dinleyici desteğiyle uyandırma kilitlerini azaltma

Android 17, AlarmManager.setExactAndAllowWhileIdle işlevinin yeni bir varyantını kullanıma sunuyor. Bu varyant, PendingIntent yerine OnAlarmListener kabul ediyor. Bu yeni geri çağırmaya dayalı mekanizma, şu anda soket bağlantılarını koruyan mesajlaşma uygulamaları gibi periyodik görevleri gerçekleştirmek için sürekli uyandırma kilitlerine dayanan uygulamalar için idealdir.

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

Gizlilik güncellemeleri

Sistem tarafından sağlanan konum düğmesi

localcafe.jpg

Android, Android Jetpack kitaplığı kullanarak doğrudan uygulamanızın düzenine yerleştirebileceğiniz, sistem tarafından oluşturulan bir konum düğmesi sunuyor. Kullanıcı bu sistem düğmesine dokunduğunda uygulamanıza yalnızca mevcut oturum için tam konum erişimi verilir. Bu özelliği uygulamak için USE_LOCATION_BUTTON iznini beyan etmeniz gerekir.

Dokunmatik ve fiziksel klavyeler için ayrı şifre görünürlüğü ayarları

Bu özellik, mevcut "Şifreleri göster" sistem ayarını iki ayrı kullanıcı tercihine böler: biri dokunmaya dayalı girişler, diğeri ise fiziksel (donanım) klavye girişleri için. Fiziksel klavyelerle girilen karakterler artık varsayılan olarak anında gizleniyor.

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

Güvenlik

Salt okunur dinamik kod yükleme zorunlu kılınır

Android, kod yerleştirme saldırılarına karşı güvenliği artırmak için artık dinamik olarak yüklenen yerel kitaplıkların salt okunur olmasını zorunlu kılıyor. Uygulamanız Android 17 veya sonraki bir sürümü hedefliyorsa System.load() kullanılarak yüklenen tüm yerel dosyalar önceden salt okunur olarak işaretlenmelidir.

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

Kuantum Sonrası Kriptografi (PQC) Karma APK İmzalama

Android, kuantum bilgisayarlardaki gelecekteki gelişmelere hazırlanmak için yeni v3.2 APK imza şeması aracılığıyla kuantum sonrası kriptografi (PQC) desteğini kullanıma sunuyor. Bu şema, klasik imza ile ML-DSA imzasını birleştiren karma bir yaklaşım kullanır.

Kullanıcı deneyimi ve sistem arayüzü

Harici ekranlarda widget'lar için daha iyi destek

Bu özellik, DP veya SP birimleri kullanılarak farklı piksel yoğunluklarına sahip bağlı veya harici ekranlarda gösterildiğinde uygulama widget'larının görsel tutarlılığını artırır.

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

Ana ekranda gizli uygulama etiketleri

Hiddenapplabelsonthehomescreen.png

Android artık ana ekran çalışma alanında uygulama adlarını (etiketlerini) gizlemek için kullanıcı ayarı sunuyor. Uygulama simgenizin belirgin ve tanınabilir olduğundan emin olun.

Masaüstünde Etkileşimli Pencere İçinde Pencere

Geleneksel pencere içinde pencere özelliğinden farklı olarak, bu sabitlenmiş pencereler masaüstü modunda diğer uygulama pencerelerinin her zaman üstünde kalırken etkileşimli olmaya devam eder.

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

Yeniden tasarlanan ekran kaydı araç çubuğu

large_Recording-redesign.png

Temel işlevler

VPN uygulaması hariç tutma ayarları

Yeni ACTION_VPN_APP_EXCLUSION_SETTINGS Intent'i kullanarak uygulamanız, kullanıcıların VPN tünelini atlayacak uygulamaları seçebileceği, sistem tarafından yönetilen bir Ayarlar ekranı başlatabilir.

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

OpenJDK 25 ve 21 API güncellemeleri

Bu güncelleme, OpenJDK 21 ve OpenJDK 25'teki kapsamlı özellikler ve iyileştirmelerle birlikte gelir. Bunlar arasında en yeni Unicode desteği ve TLS'deki adlandırılmış gruplar için gelişmiş SSL desteği yer alır.

Android 17'yi kullanmaya başlama

Desteklenen herhangi bir Pixel cihazı kaydedebilir veya Android Emulator ile 64 bit sistem görüntülerini kullanabilirsiniz.

  • Yeni SDK'ya göre derleme yapın ve sorunları geri bildirim sayfasında bildirin.
  • Mevcut uygulamanızın uyumluluğunu test edin ve uygulamanızın Android 17'deki değişikliklerden etkilenip etkilenmediğini öğrenin.

Eksiksiz bilgi için Android 17 geliştirici sitesini ziyaret edin.

Yazan:
Okumaya devam et