Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vários Sabores, um App. Saiba o que são Flavors e como usar

Vários Sabores, um App. Saiba o que são Flavors e como usar

Flavors é um mecanismo do Android que te permitirá desenvolver varias versões do mesmo app em um só projeto.

Emanuelle_M

March 24, 2017
Tweet

More Decks by Emanuelle_M

Other Decks in Programming

Transcript

  1. Emanuelle Menali Formada em Sistemas de Informação Desenvolvedora Android Frequentadora

    assídua de meetups Fã de Hora de Aventura, Star Wars e Rock Intolerante à lactose :( 2
  2. Agenda ➔ Sobre Flavors ➔ Criando Flavors ➔ Diretório de

    cada Flavor ➔ Dependências ➔ Assinatura de APK ➔ Controle o que você edita ➔ Mesma base ➔ Um outro caso ➔ Produtos diferentes ➔ Flavors! ➔ Conclusão ➔ Referencias 3
  3. Sobre Flavors Product Flavors é uma configuração do arquivo build.gradle.

    Permite que sejam criadas mais de um aplicativo a partir de uma estrutura comum. Em caso de necessidade de criação de projetos que possuem classes, métodos, layouts e até imagem semelhantes, com Product Flavors é possível tudo isso. 4
  4. Criando Flavors No código productFlavors { free { applicationId "com.udacity.gradle.builditbigger.free"

    versionName "1.0-free" targetSdkVersion 24 } paid { applicationId "com.udacity.gradle.builditbigger.paid" versionName "1.0-paid" } 5 Pelo Assistente
  5. Dependências As dependências podem ser declaradas para cada Flavor ou

    para todos os Flavors. Para que o Gradle reconheça que a dependência será para todos, só é necessário deixar como o padrão, apenas “compile”. dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:25.1.1' compile 'com.google.code.findbugs:jsr305:2.0.1' O padrão para definir em qual Flavor a dependência será utilizada é <nomedoflavor>+<Compile>. Assim na hora do build do app, o Gradle irá compreender que a dependência só servirá pra o Flavor referenciado. freeCompile 'com.google.android.gms:play-services- ads:10.2.0' compile project(path: ':backend', configuration: 'android-endpoints') }//fecha dependencies 9
  6. Assinatura de APK Criamos antes de tudo, as chaves de

    APK. Pode ser uma para todos os Flavors ou uma por Flavor. Isso varia de projeto para projeto. 11
  7. Assinatura de APK Assim definimos uma chave geral para todos!!!

    signingConfigs { configA { keyAlias 'chavegeral2' keyPassword '123456' storeFile file('C:/Users/emanu/Desktop/ androidmeetup.jks') storePassword '123456' } } 12
  8. Assinatura de APK Assim definimos chaves diferentes para cada Flavor.

    signingConfigs { configA { keyAlias 'chavegeral2' keyPassword '123456' storeFile file('C:/Users/emanu/Desktop/androidmeetup.jks') storePassword '123456' } configB { keyAlias 'chavegerald' keyPassword '123456' storeFile file('C:/Users/emanu/Desktop/projetofinalpaid.jks') storePassword '123456' } 13
  9. Assinatura de APK A configuração da assinatura de APK para

    cada Flavor pode ser inserida diretamente pelo build.gradle ou pelo assistente do Android Studio. As duas formas funcionaram de forma igual. productFlavors { free { applicationId "com.udacity.gradle.builditbigger.free" versionName "1.0-free" targetSdkVersion 24 signingConfig signingConfigs.config } paid { applicationId "com.udacity.gradle.builditbigger.paid" versionName "1.0-paid“ signingConfig signingConfigs.configB } 14
  10. Controle o que você edita a) Selecione a forma de

    exibição de arquivos para “Project” e então edite o arquivo direto na pasta relativa ao Flavor desejado b) Altera - se o Flavor na aba Build Variants do Android Studio, muda-se a visualização dos arquivos de “Project para Android,e então pode-se visualizar a estrutura do projeto separada no Flavor selecionado e main. 16 Existem duas formas de editar os arquivos do flavor desejado.
  11. Mesma base Os Flavors Free e Paid, nesse caso, usam

    a mesma base, a classe EndpointAsyncTask.java que está na base do projeto. Cada um tem uma implementação diferente das classes que estão dentro de seus respectivos diretórios. 18
  12. Um outro cenário 19 Essa é uma outra forma de

    definir o que será compilado no aplicativo. Além dos Flavors compartilharem as classes da raiz do projeto, na classe MainActivity o que será renderizado na tela entrará em um if validando o Flavor selecionado. public class MainActivity extends AppCompatActivity { ... Button button = (Button) findViewById(R.id.button_joke); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (BuildConfig.FLAVOR.equals("paid")) { //se o flavor for o paid tellJoke(view); //só executará o método solicitado } else //caso seja qualquer outro flavor if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); //mostrará na tela o mIntersticial tellJoke(view); //e depois o método tellJoke() } } }); }
  13. Conclusão - Flavors te ajudam a economizar código e tempo,

    uma vez que você pode criar várias versões do mesmo aplicativo com o mesmo projeto. - Caso você tenha criado cópias do mesmo projeto para desenvolver versões diferentes, com Flavors você pode uni-los e configurar cada particularidade no build.gradle. - A longo prazo, facilita a manutenção desses aplicativos, uma vez que não será mais necessário alterar em dois ou mais lugares em caso de upgrade ou manutenção do projeto. 22