Environmental variables, API key and secret, BuildConfig and Android Studio

You wanna create an Android app that uses Twittet APIs, so yo need an API key and an API secrets only you and your apps know. Because you need these values inside you app, it’s easy and quick to write them down directly in your source code. But when you commit this code to GitHub (or any other public repo), practically you’re telling your secret keys to entire world. Seems uncommon? Unfortunately, not so much! Same for Dropbox SDK.

One simple way to avoid this bad practice is to store your values inside an environmental variable, so only your machine knows it, then read this values in some way and inject them in your code at build time.
Let’s see how to do that using Android Studio, Gradle, and BuildConfig.

First, we need to create these environmental vars. In Linux and Mac, create or edit the file ~/.gradle/gradle.properties (pay attention to the actual Gradle User Home directory position) and add some values:

#define your secret values
TwitterConsumerKeyProp=xxxxxx66666666634333333ddddddTwitterConsumerSecretProp=3nkl3sds3skmslSDF394asdk39dmasd

Second, in your module’s build.gradle file, add these lines

apply plugin: 'com.android.application'
 
//Add these lines
def TWITTER_CONSUMER_KEY = '"' + TwitterConsumerKeyProp + '"' ?: '"Define Twitter Consumer key"';def TWITTER_CONSUMER_SECRET = '"' + TwitterConsumerSecretProp + '"' ?: '"Define Twitter Consumer secret"';
 
android.buildTypes.each { type ->
    type.buildConfigField 'String', 'TWITTER_CONSUMER_KEY', TWITTER_CONSUMER_KEY    type.buildConfigField 'String', 'TWITTER_CONSUMER_SECRET', TWITTER_CONSUMER_SECRET
}

Please note the “TwitterConsumerKeyProp” and “TwitterConsumerSecretProp” have to be the same in both Gradle settings file and Gradle build file.
Finally, to use these values in your code, filled at runtime by Gradle in the build script for you, simply use:

ConfigurationBuilder cb = new ConfigurationBuilder()
    .setDebugEnabled(BuildConfig.DEBUG)
    .setApplicationOnlyAuthEnabled(true)
    .setOAuthConsumerKey(BuildConfig.TWITTER_CONSUMER_KEY)    .setOAuthConsumerSecret(BuildConfig.TWITTER_CONSUMER_SECRET);

That’s all, then it’s up to you how to create more elaborated configurations. For example, you can have different values based on different android.buildTypes types, or the gradle settings file in a common network folder used by the entire team or…

Fastboot mode for Android Wear devices (G Watch, Gear Live, SmartWatch 3)

Putting Android devices in Recovery mode / Fastboot, when you don’t have access to adb, is an art. And Android Wear, where you have only one button (the power button), adds even more entropy to the whole process.

So let’s gather the different procedures for the different watches.

LG G Watch

  • Find the reset button: it is on the back of the device, near the pins to charge it.
  • Press the button using a paperclip, a SIM ejector or your fantasy
  • Wait for LG logo to appears on screen
  • While the logo is showing, swipe from the top left-hand corner to the the bottom right-hand corner in one, diagonal swipe.
  • From the Fastboot menu, you can launch the Recovery Mode
  • Video

 

LG G Watch R

  • Turn off the watch and then turn it on normally
  • Wait for LG logo to appears on screen
  • While the logo is showing, swipe from the top left-hand corner to the the bottom right-hand corner in one, diagonal swipe, pressing and holding the power button
  • Alternatively, if the swipe doesn’t work, instead of swiping start tapping the screen with two fingers, one on the top left (10) and one on the bottom right (4), pressing and holding the power button
  • From the Fastboot menu, you can launch the Recovery Mode
  • Video

 

Samsumg Gear Live

  • Turn off the watch and then turn it on normally
  • Wait for Samsung logo to appears on screen
  • While the logo is showing, swipe from the top left-hand corner to the the bottom right-hand corner in one, diagonal swipe, pressing and holding the power button
  • The bootloader appears
  • Select the Fastboot or Recovery mode swiping downward, and swipe to the right to confirm the selection.

 

Sony SmartWatch 3

  • Detach any USB cable connected to the watch
  • Turn it off holding the power button and keep holding the button until the watch vibrates three times and then switches it off
  • Press the power button and keep holding. A blue screen that prompts to insert an USB cable will display
  • Double tap the power button
  • A black menu will display, with on-screen instructions
  • Move to Fastboot or Recovery Mode pressing the power button, once a time
  • Select Fastboot (or Recovery) by double pressing the power button

 

For extreme modding, there is also a third mode available, the Download mode.

Intervista per la Droidcon Torino

Dato che non sono stati i primi a farmi queste domande, riporto un pezzo di intervista fatta per la Droidcon di Torino, il 6 e 7 Febbraio 2014. Magari sono riuscito a spiegare meglio il mio attuale lavoro e perche’ mi appassiona.

Ciao Alfredo, raccontaci qualcosa di te: dalla tua esperienza accademica a quella lavorativa.
Lo confesso, non sono un ingegnere. Ho iniziato a nutrire la mia passione per l’informatica dalla quarta elementare, quando i miei mi regalarono un computer, un glorioso Intel 8080. Finite le superiori, sono subito andato a lavorare come sviluppatore, laureandomi nel frattempo in Scienze della Comunicazione perché pensavo, e penso ancora, che la consapevolezza delle nostre abilità sociali e comunicative sia indispensabile nel bagaglio delle conoscenze che ognuno dovrebbe avere. In Google, poi, ho trovato il connubio ideale tra queste mie due inclinazioni. Tra le due, però, vince ancora la programmazione.

Siamo molto curiosi di sapere di cosa ti occupi in questo momento in Google: puoi parlarci brevemente delle tue mansioni?
Sono nel team Developer Relation, e il mio compito è rendere quanto più divertente possibile la vita degli sviluppatori italiani che usano le tecnologie dev di Google. Seguo le community sul territorio, organizzo eventi, faccio formazione nelle università, mi tengo aggiornato sul mondo delle startup nel nostro paese e cerco di far capire ai miei colleghi in America che anche l’Italia vale la loro considerazione e perché.

Com’è lavorare direttamente per il colosso di Mountain View? Data la tua vasta esperienza lavorativa, trovi ci siano differenze di mentalità rispetto alle aziende Italiane?
E’ bello sicuramente, ma impegnativo. Tutti sanno quanto Google tenga alla qualità del posto di lavoro dei propri dipendenti e questo, assieme a dei buoni colleghi e alla possibilità di lavorare su ciò di cui sono appassionato, non condiziona con inutili pesantezze la mia giornata, ma anzi! Di differenze ce ne sono, ma niente che non si possa importare e adattare al proprio contesto. Occorre però essere disposti a mettersi un po’ in gioco: tutta l’azienda, non solo una sua parte.

Che consiglio puoi dare a chi spera un giorno di poter entrare in una grande azienda all’avanguardia come Google che non segue l’innovazione, ma la crea?
Penso che in Google non si assumano persone per far fare loro qualcosa, ma piuttosto per farli continuare in quello che stanno già facendo con successo. Quindi mi sento di consigliare di credere nelle proprie passioni, quelle vere che costruiscono qualcosa d’innovativo, in qualunque campo. Di non pensare a cosa ci ferma, ma focalizzarsi al cosa invece ci aiuta ad andare nella direzione in cui ci vediamo proiettati e felici. Di essere il cambiamento che si vorrebbe vedere intorno a se’. Prima o poi, una Google arriva. E se non arriva, se ne può sempre creare una.

Date di compleanno da Facebook nei contatti di Android

Compleanni nei contatti AndroidUna delle funzioni piu’ utili del telefono? Ricordarmi le dati di compleanno dei miei contatti. Una delle funzioni piu’ utili dei social network? Gli utenti stessi mettono le propria data di nascita nel loro profilo. Nonostante i contatti di Android abbiano un campo apposito per memorizzare la data di nascita (Add another field -> Events -> Birthday, di sicuro da Android 4.0, non so se anche versioni precedenti), la stessa applicazione dei contatti non ha funzioni di importazione automatica di queste informazioni da altre fonti.

Perche’ mettere le date di nascita nei contatti? Per tenere le informazioni aggregate (considero la rubrica il mio punto di contatto sociale primario) e perche’ Google Calendar, automaticamente, puo’ creare degli appuntamenti da queste date, che mi tornano comodi come promemoria.

EboBirthday: Crea un proprio database di compleanni, attingendo dai contatti del telefono, da Facebook, da un CSV ed altre fonti. La cosa estremamente comoda e’ che aggiorna anche i contatti della rubrica di Android con le date dei compleanni presi da Facebook, se i due contatti hanno lo stesso nome. Ha un widget con i prossimi compleanni, puo’ creare notifiche, non richiede la sottoscrizione a nessun servizio e non lascia background task attivi in memoria. Prevede dei workaround per funzionare anche con versioni molto datate di Android e puo’ creare dei reminder nel calendario dell’utente con dei giorni di anticipo configurabili a piacere rispetto al compleanno. La sincronia va lanciata manualmente, l’interfaccia non ha un’interfaccia aggiornatissima e non sincronizza le foto dei contatti Facebook con quelli Android. Link al Play Store.

UberSync for Facebook: Oltre ad aggiungere la data del compleanno dei contatti Facebook nella rubrica Android (basandosi sull’omonimia degli stessi o inserendo il Facebook ID nelle note di un contatto Android), questa applicazione sincronizza anche le foto dei contatti e gli status. Gestendo le funzioni di sincronia tramite l’Account Manager di Android, non ci sono servizi che rimangono attivi in background, nonostante la sincronia sia gestita in automatico dal sistema. Link al Play Store e codice sorgente dell’app.

Personalmente preferisco EboBirthday dato che ha un widget e le notifiche che mi fanno molto comodo per ricordarmi di fare gli auguri.