Qual è la differenza tra la versione minima dell'SDK / la versione dell'SDK di destinazione e la compilazione della versione dell'SDK?


214

Quali sono le differenze tra "versione min sdk / versione sdk target" e "compilazione versione sdk"? So cosa significa min e target sdk, ma cosa significa compilare la versione sdk?

In Eclipse, ho min / max e target sdk, ma in Android Studio ci sono queste tre impostazioni.


Attualmente sto lavorando a un'app in cui ho usato targetdkversion come 12 e tutti i miei layout funzionano in modo anomalo, quindi lo cambio di nuovo a 23 e funziona come un incantesimo, quindi penso che la versione di targetdk debba essere sempre la stessa della versione compilata
Shahid Sarwar

Risposte:


232

La versione minima di sdk è la prima versione dell'SDK di Android su cui l'applicazione può essere eseguita. Di solito ciò è dovuto a un problema con le API precedenti, alla mancanza di funzionalità o ad altri problemi comportamentali.

La versione sdk di destinazione è la versione su cui è stata eseguita la destinazione dell'applicazione . Idealmente, ciò è dovuto a una sorta di condizioni di corsa ottimali. Se dovessi "creare la tua app per la versione 19", è qui che verrà specificato. Può essere eseguito su versioni precedenti o successive, ma questo è ciò a cui stavi mirando. Ciò serve principalmente a indicare quanto corrente è l'applicazione per l'uso sul mercato, ecc.

La versione compilata di sdk è la versione di Android utilizzata dall'IDE (o altri mezzi di compilazione suppongo) per creare la tua app quando pubblichi un .apkfile. Questo è utile per testare la tua applicazione in quanto è una necessità comune compilare la tua app mentre la sviluppi. Poiché questa sarà la versione da compilare in un APK, sarà naturalmente la versione della tua versione. Allo stesso modo, è consigliabile che questo corrisponda alla versione SDK di destinazione.


La mia versione compilata di sdk e la versione di sdk di destinazione sono uguali. Questo è 21. La mia app si arresta in modo anomalo quando la eseguo su dispositivi con un livello API inferiore. Sono nuovo su Android, come devo procedere ora?
prgmrDev,

2
@prgmrDev Se l'app si arresta in modo anomalo su versioni inferiori a 21, probabilmente dovresti impostare la versione minima dell'SDK su 21. Questo non risolverà effettivamente l'applicazione su target inferiori a 21, noterà solo che l'app non è supportata su versioni inferiori. Hai anche la possibilità di determinare cosa sta esattamente rompendo la tua applicazione (cosa è cambiato nella versione 21,) e aggiungere il supporto per prendersi cura di quella dipendenza, ma sospetto che sarà un sacco di lavoro e non nell'ambito di un principiante Android progetto.
Matt,

1
Cosa succede se imposto il mio minSdkVersion = 14; targetSdkVersion = 23; e compilare SDK su 19?
Thadeuszlay,

5
@thadeuszlay la tua domanda è irrilevante perché dovresti pensare un po 'che se hai come obiettivo l'esecuzione sulla versione 23, allora come è possibile compilarla con 19! Segui la formula minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad

@Matt può succedere che quando uso compileVersion 26 per esempio, uso accidentalmente una funzione o un'API java che non è supportata sulla versione 21, che è min sdk? scusa, non
sto

83

La formula è

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - è un marker che definisce una versione minima di Android su cui l'applicazione sarà in grado di installare. Inoltre è usato da Lint per impedire l'API di chiamata che non esiste. Inoltre ha un impatto sul tempo di costruzione. Quindi puoi usare i build build per sovrascrivere minSdkVersion al massimo durante lo sviluppo. Aiuterà a velocizzare la compilazione utilizzando tutti i miglioramenti che il team di Android ci offre. Ad esempio alcune funzionalità Java 8 sono disponibili solo dalla versione specifica di minSdkVersion.

targetSdkVersion : dice al sistema Android di attivare specifici cambiamenti di comportamento.

Per esempio:

  • A partire da Android 6.0 (livello API 23) Runtime Permissionssono stati introdotti. Se si imposta targetSdkVersionsu 22 o meno, l'applicazione non richiede all'utente alcuna autorizzazione in fase di esecuzione.

  • A partire da Android 8.0 (livello API 26), tutto notificationsdeve essere assegnato a un canale o non verrà visualizzato. Sui dispositivi con Android 7.1 (livello API 25 e inferiore), gli utenti possono gestire le notifiche solo per app (in effetti ogni app ha un solo canale su Android 7.1 e versioni precedenti).

  • A partire dal 9 Android (livello di API 28), Web-based data directories separated by process. Se targetSdkVersionè 28+ e ne crei diversi WebViewin diversi processi, otterraijava.lang.RuntimeException

compileSdkVersion - in realtà è la versione della piattaforma SDK e dice a Gradle quale SDK Android usa per compilare. Quando si desidera utilizzare nuove funzionalità o .javafile di debug da Android SDK, è necessario occuparsi di compileSdkVersion. Un altro esempio è l'utilizzo di AndroidX che impone l'uso compileSdkVersion- livello 28. compileSdkVersion non è incluso nel tuo APK : è puramente utilizzato a compile time. La modifica di compileSdkVersion non modifica il comportamento in fase di esecuzione. Può generare ad esempio nuovi avvisi / errori del compilatore. Pertanto si consiglia vivamente di compilare sempre con l'ultimo SDK. Otterrai tutti i vantaggi dei nuovi controlli di compilazione sul codice esistente, eviterai le nuove API deprecate e sarai pronto per usare le nuove API. Un altro fatto ècompileSdkVersion >= Support Library version

Puoi leggere di più qui . Inoltre, ti consiglio di dare un'occhiata all'esempio della migrazione ad Android 8.0.


9
La migliore risposta qui perché in realtà spiega la differenza pratica tra targetSdkVersion e compileSdkVersion
Dean Wild

@ yoAlex5 Grazie per la risposta. Vedo che molti casi targetSdkVersion e compileSdkVersion sono uguali. Perché Android ha creato due come separati non può essere sufficiente per gestire o c'è qualche motivo specifico dietro a due campi separati?
Manju,

@Manju è possibile trovare ulteriori nel SO filo stackoverflow.com/questions/26694108/...
yoAlex5

@ yoAlex5 cosa intendi con "Sistema Android per attivare specifici cambiamenti di comportamento", puoi spiegarlo?
k_kumar,

Le "modifiche di comportamento specifiche" di @atishr sono elencate nel blocco "Ad esempio"
yoAlex5

74

La versione minima di sdk è la versione minima del sistema operativo Android richiesta per eseguire l'applicazione.

La versione sdk di destinazione è la versione di Android su cui è stata creata l'app per l'esecuzione.

La versione di compilazione sdk è la versione di Android utilizzata dagli strumenti di compilazione per compilare e compilare l'applicazione al fine di rilasciare, eseguire o eseguire il debug.

Di solito la versione compilata di sdk e la versione sdk di destinazione sono uguali.


23
E quando non sono gli stessi pro / contro?
powder366,

4

compileSdkVersion : compileSdkVersion è la versione dell'API su cui viene compilata l'app. Ciò significa che puoi utilizzare le funzionalità dell'API Android incluse in quella versione dell'API (oltre a tutte le versioni precedenti, ovviamente). Se si tenta di utilizzare le funzionalità API 16 ma si imposta compileSdkVersion su 15, verrà visualizzato un errore di compilazione. Se imposti compileSdkVersion su 16, puoi comunque eseguire l'app su un dispositivo API 15.

minSdkVersion : la versione minima di sdk è la versione minima del sistema operativo Android richiesta per eseguire l'applicazione.

targetSdkVersion : la versione sdk di destinazione è la versione su cui è prevista l'esecuzione della tua app.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.