2016-02-26 23 views
6

Sto costruendo un'applicazione che utilizza una libreria Android come fonte primaria di codice. Quindi ho più app che usano quella libreria; queste app avranno lo stesso codice, ma diversi campi di configurazione, come gli endpoint e così via.Sovrascrivi libreria buildConfigFields nell'applicazione

Per fare questo, ho pensato che avrei potuto avere un buildConfigField nel fascicolo di mia biblioteca build.gradle, e poi ignorare che il valore in della mia app build.gradle utilizzando lo stesso nome, in questo modo:

build.gradle in libreria:

buildConfigField "String", "API_BASE_URL", "\"http://arandomapibaseurl.com\"" 

build.gradle in app:

buildConfigField "String", "API_BASE_URL", "\"http://myrealapi.com\"" 

Qualche idea su come realizzare questo?

Grazie!

+0

IIRC, hai due classi 'BuildConfig' separate, una per il pacchetto della tua libreria e una per il pacchetto della tua app. La tua libreria non sa nulla del 'BuildConfig' dell'app, e non sono a conoscenza di un modo in cui un'app sovrascrive' BuildConfig' dalla libreria. Potrebbe essere necessario esplorare altre opzioni (ad esempio, '' elementi manifest che puntano a risorse XML, configurazione ordinaria basata su Java, risorse sovrascritte). – CommonsWare

risposta

7

Purtroppo non è possibile eseguire l'override delle configurazioni di build. È possibile possibile sovrascrivere i valori di risorsa specificati con resValue. L'app può ignorare la libreria, non il contrario. Hai solo bisogno di un contesto per estrarli e puoi farlo all'avvio dell'app per inserirli in un oggetto java che puoi condividere come singleton o altro.

Ho usato molto questo trucco in passato per consentire alle app di accedere a una libreria e ignorarne le impostazioni predefinite. Puoi leggere su di esso here.

+0

Ho finito per seguire questo approccio. Ho appena creato un config.xml per app che sovrascrive le risorse di configurazione nella libreria. – Jorge

+0

Ottimo! Se ha funzionato per te, per favore upvote e accetta la risposta. –