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 inviare le app destinate ad Android 17 al Play Store. Inoltre, la beta 3 offre una serie di nuove funzionalità per aiutarti a creare applicazioni migliori, più sicure e altamente integrate.
Prepara app, librerie, strumenti e 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. Informa gli sviluppatori downstream se sono necessari aggiornamenti per supportare completamente Android 17.
I test prevedono l'installazione dell'app di produzione o di un'app di test che utilizza la libreria o il motore tramite Google Play o altri mezzi su un dispositivo o un emulatore che esegue Android 17 beta 3. Esamina tutti i flussi dell'app e cerca problemi funzionali o dell'interfaccia utente. Esamina 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 e queste modifiche possono influire sulle tue app. Ecco alcune modifiche su cui concentrarti:
- Ridimensionamento su schermi di grandi dimensioni: se utilizzi Android 17 come target, non puoi 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: la trasparenza dei certificati (CT) è attiva per impostazione predefinita. (Su Android 16, CT è disponibile, ma le app dovevano attivarlo.)
- Protezioni della rete locale: per impostazione predefinita, alle app destinate ad Android 17 o versioni successive viene bloccato l'accesso alla rete locale. Se possibile, passa all'utilizzo di selettori che tutelano la privacy e utilizza il nuovo ACCESS_LOCAL_NETWORK per un accesso ampio e persistente.
Miglioramenti di 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 PhotoPickerUiCustomizationParams API, 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.
Tutto questo fa parte del nostro impegno per fare in modo che il selettore di foto Android che tutela la privacy si adatti perfettamente all'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 per il formato immagine RAW14: Android 17 introduce il supporto per il formato immagine RAW14, lo standard di fatto del settore 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 vengono 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 fornirti l'accesso alle funzionalità della fotocamera migliori e più recenti, come "Super Resolution" o miglioramenti all'avanguardia basati sull'AI. Puoi eseguire query per queste modalità utilizzando l'API isExtensionSupported(int).
API del tipo di dispositivo della fotocamera: le nuove API di Android 17 ti consentono di eseguire query sul tipo di dispositivo sottostante per identificare se una fotocamera è hardware integrato, una webcam USB esterna o una fotocamera 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 collegati o all'altoparlante integrato del dispositivo.
Codificatore software HE-AAC esteso
Android 17 introduce un codificatore software HE-AAC esteso fornito dal sistema. Questo codificatore supporta velocità in bit sia basse che alte utilizzando la codifica unificata di audio e voce. 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
Riduci i wakelock con il supporto dei listener per le sveglie allow-while-idle
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, ad esempio 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 sulla privacy
Pulsante di posizione fornito dal sistema
Android sta introducendo un pulsante posizione sottoposto a rendering 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 discrete per tastiere touch e fisiche
Questa funzionalità suddivide l'impostazione di sistema esistente "Mostra password" in due preferenze utente distinte: una per gli input basati sul tocco e un'altra per gli input della tastiera fisica (hardware). Per impostazione predefinita, i caratteri inseriti tramite tastiere fisiche ora vengono nascosti immediatamente.
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 iniezione di codice, 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 dell'APK ibrida con crittografia post-quantistica (PQC)
Per prepararsi ai futuri progressi nel campo del calcolo quantistico, Android sta introducendo il supporto per la crittografia post-quantistica (PQC) tramite il nuovo schema di firma dell'APK v3.2. Questo schema utilizza un approccio ibrido, combinando 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 collegati con densità di pixel diverse utilizzando le 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
Android ora fornisce un'impostazione utente per nascondere i nomi delle app (etichette) nell'area di lavoro della schermata Home. Assicurati che l'icona dell'app sia distinta e riconoscibile.
Picture in picture interattivo per desktop
A differenza del Picture in picture tradizionale, queste finestre fisse 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
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 ignorare 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 funzionalità e perfezionamenti estesi di OpenJDK 21 e OpenJDK 25, tra cui il supporto Unicode più recente e il supporto SSL migliorato per i gruppi denominati in TLS.
Inizia a utilizzare Android 17
Puoi registrare qualsiasi dispositivo Pixel supportato o utilizzare le immagini di sistema a 64 bit con l'emulatore Android.
- Compila con il nuovo SDK e segnala i problemi nella pagina di feedback.
- Verifica la compatibilità dell'app attuale e scopri se è interessata dalle modifiche in Android 17.
Per informazioni complete, visita il sito per sviluppatori di Android 17.
Continua a leggere
-
Notizie sui prodotti
Oggi miglioriamo lo sviluppo Android con Gemma 4, il nostro modello aperto all'avanguardia più recente progettato con funzionalità di ragionamento complesso e chiamata di strumenti autonomi.
Matthew McCullough • 2 minuti di lettura
-
Notizie sui prodotti
Un pilastro dell'ecosistema Android è il nostro impegno condiviso per la fiducia degli utenti. Con l'evoluzione del panorama mobile, si è evoluto anche il nostro approccio alla protezione delle informazioni sensibili.
Robert Clifford • 3 minuti di lettura
-
Notizie sui prodotti
Vogliamo rendere più facile e veloce la creazione di app per Android di alta qualità e un modo per aiutarti a essere più produttivo è mettere l'AI a portata di mano.
Matthew McCullough • 2 minuti di lettura
Segui gli aggiornamenti
Ricevi ogni settimana nella tua casella di posta le ultime informazioni sullo sviluppo Android