Product Flavor
productFlavors {
dev {
applicationId "com.example.ngan.bottombarsample.dev"
}
prod {
applicationId "com.example.ngan.bottombarsample"
}
}
| ``` | |
| # Built application files | |
| *.apk | |
| *.ap_ | |
| # Files for the Dalvik VM | |
| *.dex | |
| # Java class files | |
| *.class | |
| # Generated files | |
| bin/ | |
| gen/ | |
| out/ | |
| # Gradle files | |
| .gradle/ | |
| build/ | |
| # Local configuration file (sdk path, etc) | |
| local.properties | |
| # Proguard folder generated by Eclipse | |
| proguard/ | |
| # Log Files | |
| *.log | |
| # Android Studio Navigation editor temp files | |
| .navigation/ | |
| # Android Studio captures folder | |
| captures/ | |
| # Intellij | |
| *.iml | |
| # Keystore files | |
| *.jks | |
| ``` |
| Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm | |
| Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 | |
| ``` | |
| # User-specific stuff: | |
| .idea/workspace.xml | |
| .idea/tasks.xml | |
| .idea/dictionaries | |
| .idea/vcs.xml | |
| .idea/jsLibraryMappings.xml | |
| # Sensitive or high-churn files: | |
| .idea/dataSources.ids | |
| .idea/dataSources.xml | |
| .idea/dataSources.local.xml | |
| .idea/sqlDataSources.xml | |
| .idea/dynamic.xml | |
| .idea/uiDesigner.xml | |
| # Gradle: | |
| .idea/gradle.xml | |
| .idea/libraries | |
| # Mongo Explorer plugin: | |
| .idea/mongoSettings.xml | |
| ## File-based project format: | |
| *.iws | |
| ## Plugin-specific files: | |
| # IntelliJ | |
| /out/ | |
| # mpeltonen/sbt-idea plugin | |
| .idea_modules/ | |
| # JIRA plugin | |
| atlassian-ide-plugin.xml | |
| # Crashlytics plugin (for Android Studio and IntelliJ) | |
| com_crashlytics_export_strings.xml | |
| crashlytics.properties | |
| crashlytics-build.properties | |
| fabric.properties | |
| ``` |
Product Flavor
productFlavors {
dev {
applicationId "com.example.ngan.bottombarsample.dev"
}
prod {
applicationId "com.example.ngan.bottombarsample"
}
}
| # Retrofit 2.0 Notes | |
| ### Dependency | |
| ``` | |
| compile 'com.squareup.retrofit2:retrofit:2.0.2' | |
| compile 'com.squareup.retrofit2:converter-gson:2.0.0' | |
| ``` | |
| ### Create service generator | |
| ``` | |
| public class ServiceGenerator { | |
| private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); | |
| private static Retrofit.Builder builder = | |
| new Retrofit.Builder() | |
| .baseUrl(BuildConfig.HOST) | |
| .addConverterFactory(GsonConverterFactory.create()); | |
| public static <S> S createService(Class<S> serviceClass) { | |
| Retrofit retrofit = builder.client(httpClient.build()).build(); | |
| return retrofit.create(serviceClass); | |
| } | |
| } | |
| ``` | |
| ### Create Model | |
| ``` | |
| public class Person { | |
| @SerializedName("id") | |
| public int id; | |
| @SerializedName("name") | |
| public String name; | |
| } | |
| ``` | |
| ### Create interface for API services | |
| ``` | |
| public interface ApiService { | |
| @GET("/path") | |
| Call<List<Person>> getPersonList(); | |
| } | |
| ``` | |
| ### Using the API service | |
| ``` | |
| apiService = ServiceGenerator.createService(ApiService.class); | |
| Call<List<Person>> call = apiService.getPersonList(); | |
| call.enqueue(new Callback<List<Person>>() { | |
| @Override | |
| public void onResponse(Call<List<Person>> call, Response<List<Person>> response) { | |
| if (response.isSuccessful()) { | |
| // tasks available | |
| } else { | |
| // error response, no access to resource? | |
| } | |
| } | |
| @Override | |
| public void onFailure(Call<List<Person>> call, Throwable t) { | |
| // something went completely south (like no internet connection) | |
| Log.d("Error", t.getMessage()); | |
| } | |
| }); | |
| ``` |