Ürün Haberleri

Android 17'nin Üçüncü Beta Sürümü

Okuma süresi: 5 dakika
Matthew McCullough
Vice President, Product Management, Android Developer

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 düzey uygulama ve oyun geliştiricilerin 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 akış geliştiricilerinize Android 17'nin tam olarak desteklenmesi için güncelleme yapılması gerekip gerekmediğini bildirin.

large_Android17Timeline01.png

Test işlemi, Google Play'i veya başka bir yöntemi kullanarak üretim uygulamanızı ya da kitaplığınızı veya motorunuzu kullanan bir test uygulamasını Android 17 Beta 3 çalıştıran bir cihaza veya emülatöre yüklemeyi içerir. Uygulamanızdaki tüm akışları inceleyin ve işlevsel veya kullanıcı arayüzü sorunlarını 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. Dikkat etmeniz gereken bazı değişiklikler:

  • Büyük ekranlarda yeniden boyutlandırma: Android 17'yi hedeflediğinizde büyük ekranlarda yön, yeniden boyutlandırma 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ştirin: 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 uygulamalarda 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'ü kullanın.

Medya ve kamera geliştirmeleri

Fotoğraf seçici ö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şim kurarken tutarlı bir estetik koruyabilirsiniz.

large_(Default)11aspectratio.png

Bu değişiklikler, gizliliği korumaya yönelik Android fotoğraf seçicinin uygulama deneyiminize sorunsuz bir şekilde uyum sağlaması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 resim 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 resim biçimi desteğini sunar. RAW14, her dört pikselin yedi bayta sığdırıldığı, yoğun şekilde paketlenmiş bir düzen kullanan, tek kanallı ve piksel başına 14 bitlik bir formattır.

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 uygulamasına olanak tanıyan tedarikçi tarafından tanımlanan uzantılar ekler. Bu sayede, "Süper Çözünürlük" veya en yeni yapay zeka destekli geliştirmeler gibi en iyi ve en yeni kamera özelliklerine erişebilirsiniz. isExtensionSupported(int) API'sini kullanarak bu modlar için sorgu oluşturabilirsiniz.

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önlendirmeyi seçebilirler.

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şik 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 ü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ı sunar. Bu varyant, PendingIntent yerine OnAlarmListener kabul eder. 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 uyanık tutma 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ındı

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 bilişim alanındaki gelecekteki gelişmelere hazırlanmak için yeni v3.2 APK İmza Şeması aracılığıyla kuantum sonrası kriptografi (PQC) desteğini kullanıma sunuyor. Bu şema, klasik imza ile ML-DSA imzasını birleştiren hibrit bir yaklaşım kullanır.

Kullanıcı deneyimi ve sistem arayüzü

Harici ekranlardaki widget'lar için daha iyi destek

Bu özellik, DP veya SP birimleri kullanılarak farklı piksel yoğunluklarına sahip bağlı ya da harici ekranlarda gösterilen 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ı (etiketler) gizlemek için bir kullanıcı ayarı sunuyor. Uygulama simgenizin belirgin ve tanınabilir olduğundan emin olun.

Masaüstünde etkileşimli pencere iç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ı özellikleri ve iyileştirmeleri (ör. en yeni Unicode desteği ve TLS'de adlandırılmış gruplar için gelişmiş SSL desteği) sunar.

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 derleyin ve sorunları geri bildirim sayfasında bildirin.
  • Mevcut uygulamanızı uyumluluk açısından 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 edin