Novità sul prodotto

Terza beta di Android 17

Lettura di 5 minuti
Matthew McCullough
Vice President, Product Management, Android Developer

Android 17 ha raggiunto ufficialmente la stabilità della piattaforma oggi con la beta 3. Ciò significa che la superficie API è bloccata. Puoi eseguire i test di compatibilità finali e caricare le app che hanno come target Android 17 sul Play Store. Inoltre, la beta 3 introduce una serie di nuove funzionalità per aiutarti a creare applicazioni migliori, più sicure e altamente integrate.

Prepara le tue app, le tue librerie, i tuoi strumenti e i tuoi motori di gioco.

Se sviluppi un SDK, una libreria, uno strumento o un motore grafico, è ancora più importante preparare ora gli aggiornamenti necessari per evitare che gli sviluppatori di app e giochi downstream vengano bloccati da problemi di compatibilità e consentire loro di utilizzare le funzionalità più recenti dell'SDK. Comunica agli sviluppatori downstream se sono necessari aggiornamenti per supportare completamente Android 17.

large_Android17Timeline01.png

Il test prevede l'installazione dell'app di produzione o di un'app di test che utilizza la tua libreria o il tuo motore tramite Google Play o altri mezzi su un dispositivo o un emulatore con Android 17 Beta 3. Esamina tutti i flussi della tua app e cerca problemi funzionali o dell'interfaccia utente. Rivedi le modifiche al comportamento per concentrare i test. Ogni release di Android contiene modifiche alla piattaforma che migliorano la privacy, la sicurezza e l'esperienza utente complessiva. Queste modifiche possono influire sulle tue app. Ecco alcune modifiche su cui concentrarsi:

  • Ridimensionamento su schermi di grandi dimensioni:una volta scelto come target Android 17, non potrai più disattivare il mantenimento dei vincoli di orientamento, ridimensionamento e proporzioni su schermi di grandi dimensioni.
  • Caricamento dinamico del codice:se la tua app ha come target Android 17 o versioni successive, la protezione per il caricamento dinamico del codice (DCL) più sicuro introdotta in Android 14 per i file DEX e JAR ora si estende alle librerie native. Tutti i file nativi caricati utilizzando System.load() devono essere contrassegnati come di sola lettura. In caso contrario, il sistema genera UnsatisfiedLinkError.
  • Attiva CT per impostazione predefinita: Certificate Transparency (CT) è attivo per impostazione predefinita. Su Android 16, CT è disponibile, ma le app devono attivarlo.
  • Protezioni della rete locale: per impostazione predefinita, alle app che hanno come target Android 17 o versioni successive viene bloccato l'accesso alla rete locale. Passa all'utilizzo di selettori che preservano la privacy, se possibile, e utilizza il nuovo ACCESS_LOCAL_NETWORK per un accesso ampio e persistente.

Miglioramenti a contenuti multimediali e fotocamera

Opzioni di personalizzazione del selettore di foto

Android ora ti consente di personalizzare la presentazione visiva del selettore di foto per completare al meglio l'interfaccia utente della tua app. Sfruttando la nuova API PhotoPickerUiCustomizationParams, puoi modificare le proporzioni della visualizzazione a griglia dal quadrato standard 1:1 a una visualizzazione verticale 9:16. Questa flessibilità si estende sia all'intent ACTION_PICK_IMAGES sia al selettore di foto incorporato, consentendoti di mantenere un'estetica coerente quando gli utenti interagiscono con i contenuti multimediali.

large_(Default)11aspectratio.png

Tutto questo fa parte del nostro impegno per fare in modo che il selettore di foto Android che tutela la privacy si integri perfettamente con l'esperienza della tua app. Scopri di più su come incorporare il selettore di foto direttamente nella tua app per un'esperienza più nativa.

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)

Supporto del formato immagine RAW14 : Android 17 introduce il supporto del formato immagine RAW14, lo standard di settore de facto per la fotografia digitale di fascia alta, tramite la nuova costante ImageFormat.RAW14. RAW14 è un formato a canale singolo a 14 bit per pixel che utilizza un layout compatto in cui ogni quattro pixel consecutivi sono compressi in sette byte.

Estensioni della fotocamera definite dal fornitore:Android 17 aggiunge le estensioni definite dal fornitore per consentire ai partner hardware di definire e implementare modalità di estensione della fotocamera personalizzate per offrirti l'accesso alle funzionalità della fotocamera migliori e più recenti, come la "super risoluzione" o i miglioramenti all'avanguardia basati sull'AI. Puoi eseguire query per queste modalità utilizzando l'API isExtensionSupported(int).

API per il tipo di dispositivo della videocamera:le nuove API Android 17 ti consentono di eseguire query sul tipo di dispositivo sottostante per identificare se una videocamera è un hardware integrato, una webcam USB esterna o una videocamera virtuale.

Supporto per apparecchi acustici Bluetooth LE Audio

Android ora include una categoria di dispositivi specifica per gli apparecchi acustici Bluetooth Low Energy (BLE) Audio. Con l'aggiunta della costante AudioDeviceInfo.TYPE_BLE_HEARING_AID, la tua app ora può distinguere gli apparecchi acustici dalle cuffie normali.

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 }

Routing audio granulare per apparecchi acustici

Android 17 consente agli utenti di gestire in modo indipendente la riproduzione di suoni di sistema specifici. Possono scegliere di indirizzare notifiche, suonerie e sveglie agli apparecchi acustici connessi o all'altoparlante integrato del dispositivo.

Codificatore software HE-AAC esteso

Android 17 introduce un encoder software Extended HE-AAC fornito dal sistema. Questo codificatore supporta velocità in bit basse e alte utilizzando la codifica unificata di voce e audio. Puoi accedere a questo codificatore tramite l'API MediaCodec utilizzando il nome c2.android.xheaac.encoder o eseguendo una query per il tipo MIME audio/mp4a-latm.

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)

Miglioramenti delle prestazioni e della batteria

Ridurre i wakelock con il supporto dei listener per le sveglie consentite in modalità Doze

Android 17 introduce una nuova variante di AlarmManager.setExactAndAllowWhileIdle che accetta un OnAlarmListener anziché un PendingIntent. Questo nuovo meccanismo basato su callback è ideale per le app che attualmente si basano su wakelock continui per eseguire attività periodiche, come le app di messaggistica che mantengono le connessioni socket.

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

Aggiornamenti della privacy

Pulsante posizione fornito dal sistema

localcafe.jpg

Android sta introducendo un pulsante Posizione visualizzato dal sistema che potrai incorporare direttamente nel layout della tua app utilizzando una libreria Android Jetpack. Quando un utente tocca questo pulsante di sistema, alla tua app viene concesso l'accesso alla posizione esatta solo per la sessione corrente. Per implementare questa funzionalità, devi dichiarare l'autorizzazione USE_LOCATION_BUTTON.

Impostazioni di visibilità della password distinte per tastiere touch e fisiche

Questa funzionalità divide l'impostazione di sistema "Mostra password" esistente in due preferenze utente distinte: una per gli input basati sul tocco e un'altra per gli input da tastiera fisica (hardware). I caratteri inseriti tramite tastiere fisiche ora sono nascosti immediatamente per impostazione predefinita.

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

Sicurezza

Caricamento dinamico del codice di sola lettura forzato

Per migliorare la sicurezza contro gli attacchi di code injection, Android ora impone che le librerie native caricate dinamicamente siano di sola lettura. Se la tua app ha come target Android 17 o versioni successive, tutti i file nativi caricati utilizzando System.load() devono essere contrassegnati come di sola lettura in anticipo.

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)

Firma ibrida dell'APK con crittografia post-quantistica (PQC)

Per prepararsi ai futuri progressi nel quantum computing, Android sta introducendo il supporto della crittografia post-quantistica (PQC) tramite il nuovo schema di firma dell'APK v3.2. Questo schema utilizza un approccio ibrido, che combina una firma classica con una firma ML-DSA.

Esperienza utente e UI di sistema

Supporto migliore per i widget sui display esterni

Questa funzionalità migliora la coerenza visiva dei widget delle app quando vengono visualizzati su display esterni o connessi con densità di pixel diverse utilizzando unità DP o SP.

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
)

Etichette delle app nascoste nella schermata Home

Hiddenapplabelsonthehomescreen.png

Android ora offre un'impostazione utente per nascondere i nomi (le etichette) delle app nello spazio di lavoro della schermata Home. Assicurati che l'icona della tua app sia distinta e riconoscibile.

Picture in picture interattivo per computer

A differenza della tradizionale modalità Picture in picture, queste finestre bloccate rimangono interattive e sempre in primo piano rispetto alle altre finestre delle applicazioni in modalità desktop.

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) {}
}
)

Barra degli strumenti di registrazione dello schermo riprogettata

large_Recording-redesign.png

Funzionalità di base

Impostazioni di esclusione delle app VPN

Utilizzando il nuovo intent ACTION_VPN_APP_EXCLUSION_SETTINGS, la tua app può avviare una schermata Impostazioni gestita dal sistema in cui gli utenti possono selezionare le applicazioni per bypassare il tunnel VPN.

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

Aggiornamenti delle API OpenJDK 25 e 21

Questo aggiornamento include numerose funzionalità e perfezionamenti di OpenJDK 21 e OpenJDK 25, tra cui il supporto Unicode più recente e il supporto SSL avanzato per i gruppi denominati in TLS.

Iniziare a utilizzare Android 17

Puoi registrare qualsiasi dispositivo Pixel supportato o utilizzare le immagini di sistema a 64 bit con l'emulatore Android.

  • Compila in base al nuovo SDK e segnala i problemi nella pagina di feedback.
  • Testa la tua app attuale per verificarne la compatibilità e scoprire se è interessata dalle modifiche apportate ad Android 17.

Per informazioni complete, visita il sito per sviluppatori Android 17.

Scritto da:

Continua a leggere