2015-07-09 3 views
5

Ho scelto Android 19 (perché è quello che il mio telefono è in esecuzione). Voglio aggiungere una notifica con i pulsanti; sembra che l'approccio corretto sia utilizzare appcompat-v7.app.NotificationCompat.Come posso scaricare una vecchia versione della libreria di supporto Android?

Tuttavia, quando aggiungo appcompat-v7 dalla versione 22.2 del repository di supporto Android (tramite una dipendenza build.gradle), include un file app/build/intermediates/exploded-aar/com.android.support/appcompat- v7/22.2.0/res/values-v21/values-v21.xml che non viene compilato perché presuppone che il target sia 21+.

Ho provato a cancellare quel file, ma viene rigenerato.

Non sembra essere un modo per escludere un file dalla build.

Quindi, ho bisogno di ottenere una versione precedente della libreria di supporto o del repository, che non include 21 cose.

Immagino di poter importare tutte le fonti direttamente (e tralasciare le cose v21), piuttosto che attraverso la dipendenza? Non sono chiaro da dove iniziare. Posso usare il gestore SDK per ottenere versioni precedenti dell'SDK, ma offre solo l'ultima versione della libreria di supporto.

+1

eh? scegli sempre la più recente API stabile con la più recente libreria di supporto con i più recenti strumenti di compilazione ... dovresti ottenere il waring di lint se stai usando roba da API> minSdk ... se non ne hai, allora dovrebbe funzionare su tutti i dispositivi con API lvl> = minSdk senza problemi – Selvin

+0

aggiungi la configurazione gradle – petey

+1

usa 'targetSdkVersion' e' compililedSdkVersion' = 21 per risolvere il tuo problema –

risposta

1

Nel file di build Gradle cambiare la dipendenza per essere la versione 19 (la versione della libreria dovrebbe corrispondere l'SDK si sta compilando con):

dependencies { 
    compile 'com.android.support:appcompat-v7:19.1.+' 
... 
} 

Edit: Se V19 del lib supporto doesn' t NotificationCompat, quindi non è possibile utilizzarlo a meno che non si compili con un SDK successivo. Non è possibile includere una libreria di supporto con una versione superiore rispetto all'SDK compilato - questo è il problema che si sta incontrando.

In questo caso il cambiamento:

android { 
    compileSdkVersion 22 
    ... 
} 

e lasciare la dipendenza impostato per la versione 22 del supporto appcompat lib

+0

c'è un piccolo problema ... v19.0. +/19.1. + Non contiene app.NotificationCompat classe – Selvin

+0

@Selvin Ahh se questo è il caso, quindi l'OP non può usare NotificationCompat se si targetizza l'SDK 19 - dovrebbe scegliere come target un SDK successivo in cui la lib corrispondente supporta NotificationCompat. Aggiornata la risposta. –

+0

Giusto. Il motivo per cui sto utilizzando la libreria di supporto è perché voglio accedere a una funzionalità introdotta nell'API 21, quindi ovviamente ho bisogno di indirizzare tale livello. –

2

di rispondere direttamente alla tua domanda è tutto ciò che una riga su Gradle:

compile 'com.android.support:appcompat-v7:22.2.0' 

Quest'ultima parte è la versione che stai ottenendo. 22.2.0 nell'esempio sopra.

e su questo link è possibile controllare i numeri di revisioni: https://developer.android.com/tools/support-library/index.html#revisions

ma avete un approccio fondamentalmente sbagliato al problema in questione. Non devi scegliere come target l'API per il dispositivo che hai con te. Puoi scegliere in modo facile e sicuro l'ultima API, utilizzare le ultime funzionalità AppCompat e correggere i bug.

Lint vi darà un avviso ogni volta che si tenta di utilizzare una funzione che non è dalla tua minimumApi, indipendentemente dal targetAPI

+4

Sbagliato. Devi scegliere come target API corretti se vuoi che la tua app rimanga in condizioni di lavoro. – f470071

+0

@Laser se leggi tutti i suoi commenti, vedrai che è solo un cattivo sviluppatore senza capire veramente cosa sta succedendo dietro le quinte e sta trollando così diffondendo FUD. Sì, ci sono delle differenze sull'API, ma la mia risposta è semplicemente compilare l'ultima API, non codificarla solo contro di essa. – Budius