cada Flavor ➔ Dependências ➔ Assinatura de APK ➔ Controle o que você edita ➔ Mesma base ➔ Um outro caso ➔ Produtos diferentes ➔ Flavors! ➔ Conclusão ➔ Referencias 3
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
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
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
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.
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
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() } } }); }
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