You are on page 1of 37

Android

Modular
Apps
@eduardomedina
ABOUT ME

Eduardo J. Medina Alfaro

Android Developer Senior at Belatrix


Android Developer at Mapsalud
Mobile Applications Instructor

Android Dev Perú, Kotlin User Group, GDG


Lima
WHAT IS
MODULAR APPLICATIONS ?
Features - Scalable - Changes -
Customizable
uhmmm...
Recipes App
Feature Module Components
User account User - Authentication
- Sign In
- Profile
- Favorites

Recipe preparation Recipes - Recipe


- Recipe detail

Search Recipes & Search - Search


Filters - Filters
- Categories

Chat Chat - Chat


WHAT ARCHITECTURE
TO USE ?
Layers - Clean - MVP - MVC- MVVM
Clean Architecture
Layers Patterns Components
Presentation - MVP - Presenter
- MVC - View
- MVVM - Model
- Android
Components

Domain - Interactors - Use Cases


- Callbacks - Entities

Datos - Repository - SharedPreferenc


- Mapper es
- DB
- REST
Recipes App
Feature Module Components
User account User - Authentication
- Sign In
- Profile
- Favorites

Recipe preparation Recipes - Recipe


- Recipe detail

Search Recipes & Search - Search


Filters - Filters
- Categories

Chat Chat - Chat


NAVIGATION
Intent - Activity - Fragments
NAVIGATION
public void sendMessage() {

Intent intent = new Intent(this, DisplayMessageActivity.class);


String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);

}
NAVIGATION
public void sendMessage() {

Intent intent = new Intent();


String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
intent.setClassName(this,
"com.emedinaa.meetup.DisplayMessageActivity")
startActivity(intent);
}
NAVIGATION
<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="ui.module.user.login">
com.emedinaa.peruvian_recipes.user.LogInActivity</string>

<string name="ui.module.recipe.main">
com.emedinaa.peruvian_recipes.recipe.RecipesMainActivity</string>

</resources>
MODULES
Android Module - Java Module - Libraries
GRADLE
Ext - Flavors - Build Types - Dependencies
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

androidTestCompile('com.android.support
.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support',
module: 'support-annotations'
})
compile
'com.android.support:appcompat-v7:25.1.
1'
testCompile 'junit:junit:4.12'

compile project(':domain')
compile project(':data')
compile project(':commons')
compile project(':module-user')
}
build.gradle
ext {

//sdk and tools


minSdkVersion = 14
targetSdkVersion = 23
compileSdkVersion = 23
buildToolsVersion = '23.0.3'

//dependencies versions
supportLibraryVersion = '23.4.0'
}
module / build.gradle
android {
compileSdkVersion rootProject.compileSdkVersion
buildToolsVersion rootProject.buildToolsVersion

defaultConfig {
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode 1
versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }

dependencies {

compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
compile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
compile "com.android.support:design:$rootProject.supportLibraryVersion"
compile "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
settings.gradle
include ':app', ':module-user'

include ':domain'

include ':data'

include ':common'

project(':domain').projectDir = new File(settingsDir, '../peruvian_recipes-core/domain')

project(':data').projectDir = new File(settingsDir, '../peruvian_recipes-core/data')

project(':commons').projectDir = new File(settingsDir,


'../peruvian_recipes-core/commons')
Folders
Recipes App Modules
Name Module Package
App peruvian_recipes-app com.emedinaa.peruvian_recipes

User module-user com.emedinaa.peruvian_recipes.user

Recipes module-recipe com.emedinaa.peruvian_recipes.recipe

Chat module-chat com.emedinaa.peruvian_recipes.chat

Core module-common com.emedinaa.peruvian_recipes.commo


n

Core module-data com.emedinaa.peruvian_recipes.data

Core module-domain com.emedinaa.peruvian_recipes.domain


SHOW ME THE CODE!
https://github.com/emedinaa/
android-modular-apps
username : admin@gmail.com
password: 123456
Task
- Use an Architecture
- Build the modules
- Define a Dependencies Rule
- Create a Navigation Manager
- Use Gradle
https://github.com/emedinaa/
android-modular-apps
username : admin@gmail.com
password: 123456
THANKS!
emedinaa.github.io
@eduardomedina
https://www.meetup.com/es-ES/Peru-Kotlin-User-
Group/

You might also like