SlideShare a Scribd company logo
1 of 145
Download to read offline
Jalan Terbaik Menjadi Android Developer Expert
dengan Teknologi Google
Gilang Ramadhan
Gilang Ramadhan
(Associate Android Developer)
- D3 Politeknik Negeri Semarang (2014-2017)
- Android Freelancer (2015-2018)x
- Android Trainer - IMASTUDIO (Oct 2015-Des 2017)
- Android Developer Intern - GO-JEK (Feb 2018-May 2018)
- Academy Content Writer - Dicoding (Oct 2018-Now)
Kenapa Developer Memilih Android?
Android memanjakan penggunanya dengan fitur
yang sangat canggih dan tampilan yang indah.
Sistem Android dapat digunakan sebagai alat
multimedia seperti pemutar musik dan video. Ia juga
memiliki perangkat keras seperti accelerometer,
gyroscope dan sensor lainnya.
https://andi.link/hootsuite-we-are-social-indonesian-digital-report-2019/
https://andi.link/hootsuite-we-are-social-indonesian-digital-report-2019/
Pada tahun 2013, Android menjadi operation system (OS) terlaris pada tablet dan
smartphone. Dan tercatat pada bulan Maret 2019 store Android memiliki lebih dari 2.6
juta aplikasi.
(https://www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/)
Lalu
bagaimana
cara
memanfaatkan
semua itu?
Menjadi Android Developer?
https://www.codeplateau.com/blog/different-types-of-mobile-applications-native-hybrid-and-web-apps/
Application
https://www.codepolitan.com/apa-bedanya-aplikasi-native-hybrid-dan-web
https://teknojurnal.com/pilih-membuat-aplikasi-mobile-native-atau-hybrid/
Native Hybrid
Development Language Native Only Native and Web / Web Only
Device Access Complete Complete
Device Specific Features High Moderate
Speed Very Fast Medium
App Store Available Available
Approval Process Mandatory Low Overhead
Code Portability None High
Advanced Graphics High Moderate
UI / UX High Moderate
Access to Native APIs High Moderate
Development Cost Expensive Reasonable
Native vs Hybrid
Apache Cordova
Unity
Adobe FlashNetBeansXamarin Eclipse
Android Studio
IDE Platform
Programming Language
Android Studio
Android Studio provides
the fastest tools for
building apps on every
type of Android device.
Android Library
Jetpack?
Kiri, Kanan, L1, L2, R1, R2,
Atas, Bawah, Kiri, Kanan
Android Jetpack
Jetpack is a collection of Android software
components to make it easier for you to develop great
Android apps.
Advantages
Accelerate development
Eliminate boilerplate code
Build high quality, robust apps
Android Jetpack Components
Foundation Architecture UIBehavior
Android Jetpack Components
Foundation
Foundation - AppCompat
Before After
com.android.support:cardview-v7 androidx.cardview:cardview:1.0.0
com.android.support:appcompat-v7 androidx.appcompat:appcompat:1.0.0
com.android.support:recyclerview-v7 androidx.recyclerview:recyclerview:1.0.0
android.arch.persistence.room:common androidx.room:room-common:2.0.0-rc01
android.arch.core:common androidx.arch.core:core-common:2.0.0-rc01
android.arch.core:core androidx.arch.core:core:2.0.0-rc01
android.arch.paging:common androidx.paging:paging-common:2.0.0-rc01
.... ....
Degrade gracefully on older versions of Android
Foundation - Android KTX
Getting Started
dependencies {
implementation 'androidx.core:core-ktx:1.0.0'
}
Before
sharedPreferences.edit()
.putBoolean("key", value)
.apply()
After
sharedPreferences.edit {
putBoolean("key", value)
}
Write more concise, idiomatic Kotlin code
Kotlin
Concise
Drastically reduce the
amount of boilerplate code.
Safe
Avoid entire classes of errors
such as null pointer
exceptions.
Tool-friendly
Choose any Java IDE or
build from the command
line.
Interoperable
Leverage existing libraries
for the JVM, Android, and
the browser.
Kotlin/Native
reached beta
Coroutines
are now stable
Learning Kits
start easily
Multiplatform
code reuse
Kotlin 1.3 Released
Parts of
Anko Layouts: a fast and type-safe way to write dynamic Android
layouts.
Anko Commons: a lightweight library full of helpers for intents,
dialogs, logging and so on.
Anko SQLite: a query DSL and parser collection for Android SQLite.
Anko Coroutines: utilities based on the kotlinx.coroutines library.
Foundation - Auto
Components to help develop apps for Android Auto
Foundation - Benchmark
Quickly benchmark your Kotlin-based or Java-based code from within Android Studio
Add the library to your module’s build.gradle file:
project_root/module_dir/build.gradle
To disable debugging in the test manifest, update your <application> element to force-disable debugging
temporarily as follows:
project_root/module_dir/src/androidTest/AndroidManifest.xml
Foundation - Benchmark
Quickly benchmark your Kotlin-based or Java-based code from within Android Studio
To add your benchmark, add an instance of BenchmarkRule in a test file in the androidTest directory. For more
information on writing benchmarks, see Write a benchmark.
The following code snippet shows how to add a benchmark to a JUnit test:
Foundation - Multidex
Multidex Support prior to Android 5.0 (Api 21)
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
Provide support for apps with multiple DEX files
Enable multidex for apps
with over 64K methods
Foundation - Security
Read and write encrypted files and shared preferences by following security best practices.
● Strong security that balances great encryption and good performance.
● Maximum security.
The Security library uses a 2-part system for key management:
● A keyset that contains one or more keys to encrypt a file or shared preferences data. The keyset itself is
stored inSharedPreferences.
● A master key that encrypts all keysets. This key is stored using the Android keystore system.
New Feature New Bugs . . .
https://gph.is/2jt9RvW
Foundation - Test
An Android testing framework for unit and runtime UI tests
Foundation - Test
An Android testing framework for unit and runtime UI tests
Foundation - Test
An Android testing framework for unit and runtime UI tests
Foundation - Unit Test
Foundation - Instrumental Testing
Foundation - TV
Components to help develop apps for Android TV
Foundation - Wear OS by Google
Components to help develop apps for Wear
Android Jetpack Components
Architecture
Architecture Component
Architecture - ViewModel
Manage UI-related data in a lifecycle-conscious way
Architecture - LiveData
Ensures your UI matches your data state
No memory leaks
No crashes due to stopped activities
No more manual lifecycle handling
Always up to date data
Proper configuration changes
Sharing resources
Notify views when underlying database changes
Architecture - LiveData
public class NameViewModel extends ViewModel {
// Create a LiveData with a String
private MutableLiveData<String> currentName;
public MutableLiveData<String> getCurrentName() {
if (currentName == null) {
currentName = new MutableLiveData<String>();
}
return currentName;
}
// Rest of the ViewModel...
}
Notify views when underlying database changes
public class NameActivity extends AppCompatActivity {
private NameViewModel model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Other code to setup the activity...
// Get the ViewModel.
model = ViewModelProviders.of(this).get(NameViewModel.class);
// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
nameTextView.setText(newName);
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
model.getCurrentName().observe(this, nameObserver);
}
}
Architecture - Data Binding
Getting Started
android {
....
dataBinding {
enabled = true
}
}
Declaratively bind observable data to UI elements
Activity
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
Layout
<TextView
android:text="@{viewmodel.userName}" />
Architecture - Lifecycles
class MyLocationListener {
public MyLocationListener(Context context, Callback callback) {
// ...
}
void start() {
// connect to system location service
}
void stop() {
// disconnect from system location service
}
}
Manage your activity and fragment lifecycles
class MyActivity extends AppCompatActivity {
private MyLocationListener myLocationListener;
@Override
public void onCreate(...) {
myLocationListener = new MyLocationListener(this, (location) -> {
// update UI
});
}
@Override
public void onStart() {
super.onStart();
myLocationListener.start();
// manage other components that need to respond to the activity lifecycle
}
@Override
public void onStop() {
super.onStop();
myLocationListener.stop();
// manage other components that need to respond to the activity lifecycle
}
}
class MyActivity extends AppCompatActivity {
...
@Override
public void onStart() {
super.onStart();
Util.checkUserStatus(result -> {
// what if this callback is invoked AFTER activity is stopped?
if (result) {
myLocationListener.start();
}
});
}
...
}
Architecture - Lifecycles
Manage your activity and fragment lifecycles
Architecture - Lifecycles
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}
myLifecycleOwner.getLifecycle().addObserver(new MyObserver());
Manage your activity and fragment lifecycles
Architecture - Room
Fluent SQLite database access
Architecture - Room
Entity
@Entity
public class User {
@PrimaryKey
public int uid;
@ColumnInfo(name = "first_name")
public String firstName;
@ColumnInfo(name = "last_name")
public String lastName;
}
Architecture - Room
Dao
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1")
User findByName(String first, String last);
@Insert
void insertAll(User... users);
@Delete
void delete(User user);
}
Architecture - Room
Database
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
Create Database
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
Architecture - Paging
Gradually load information on demand from your data source
Architecture - Paging
Gradually load information on demand from your data source
PagedList
public class ConcertViewModel extends ViewModel {
private ConcertDao concertDao;
public final LiveData<PagedList<Concert>> concertList;
// Creates a PagedList object with 50 items per page.
public ConcertViewModel(ConcertDao concertDao) {
this.concertDao = concertDao;
concertList = new LivePagedListBuilder<>(
concertDao.concertsByDate(), 50).build();
}
}
Architecture - Paging
Gradually load information on demand from your data source
Data
@Dao
public interface ConcertDao {
// The Integer type parameter tells Room to use a
// PositionalDataSource object.
@Query("SELECT * FROM concerts ORDER BY date DESC")
DataSource.Factory<Integer, Concert> concertsByDate();
}
Architecture - Paging
Gradually load information on demand from your data source
UI
public class BookmarkPagedAdapter extends PagedListAdapter<DataModel, ViewHolder> {
...
}
Architecture - Navigation
● Handling Fragment transactions
● Handling Up and Back actions correctly by default
● Providing standardized resources for animations and transitions
● Treating deep linking as a first-class operation
● Including Navigation UI patterns, such as navigation drawers and bottom navigation, with minimal
additional work
● Providing type safety when passing information while navigating
● Visualizing and editing navigation graphs with Android Studio's Navigation Editor
Handle everything needed for in-app navigation
If you want to use the Navigation Architecture Component with Android Studio, you must use Android Studio 3.2 Canary 14 or higher.
Architecture - Navigation
Handle everything needed for in-app navigation
Architecture - WorkManager
Key features:
● Backwards compatible up to API 14
○ Uses JobScheduler on devices with API 23+
○ Uses a combination of BroadcastReceiver + AlarmManager on devices with API 14-22
● Add work constraints like network availability or charging status
● Schedule asynchronous one-off or periodic tasks
● Monitor and manage scheduled tasks
● Chain tasks together
● Guarantees task execution, even if the app or device restarts
Manage your Android background jobs
Architecture - WorkManager
public class UploadWorker extends Worker {
public UploadWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
// Do the work here--in this case, upload the images.
uploadImages()
// Indicate whether the task finished successfully with the Result
return Result.success()
}
}
Manage your Android background jobs
Architecture - WorkManager
OneTimeWorkRequest
OneTimeWorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class).build()
PeriodicWorkRequest
Constraints constraints = new Constraints.Builder().setRequiresCharging(true).build();
PeriodicWorkRequest saveRequest = new PeriodicWorkRequest.Builder(SaveImageFileWorker.class, 1,
TimeUnit.HOURS).setConstraints(constraints).build();
WorkManager.getInstance().enqueue(saveRequest);
Manage your Android background jobs
Architecture - WorkManager
Manage your Android background jobs
WorkContinuation chain1 = WorkManager.getInstance()
.beginWith(workA)
.then(workB);
WorkContinuation chain2 = WorkManager.getInstance()
.beginWith(workC)
.then(workD);
WorkContinuation chain3 = WorkContinuation
.combine(Arrays.asList(chain1, chain2))
.then(workE);
chain3.enqueue();
Android Jetpack Components
Behavior
Behavior - CameraX
Easily add camera capabilities to your apps
● Ease of use
○ Preview: get an image on the display
○ Image analysis: access a buffer seamlessly for use in your algorithms, such as to pass into MLKit
○ Image capture: save high-quality images
● Consistency across devices
● New camera experiences
Behavior - Download Manager
Schedule and manage large downloads
class DownloadManager.Query
This class may be used to filter download manager queries.
class DownloadManager.Request
This class contains all the information necessary to request a new download.
Behavior - Media & Playback
Backwards compatible APIs for media playback and routing (including Google Cast)
A multimedia application that plays audio or video usually has two parts:
● A player that takes digital media in and renders it as video and/or audio.
● A UI with transport controls to run the player and optionally display the player's state.
Behavior - Media & Playback
Backwards compatible APIs for media playback and routing (including Google Cast)
Behavior - Media & Playback
Video apps versus audio apps
Behavior - Notifications
Provides a backwards-compatible notification API with support for Wear and Auto
Status bar and notification drawer Heads-up notification
Behavior - Notifications
Provides a backwards-compatible notification API with support for Wear and Auto
Lock screen App icon badge Wear OS devices
Behavior - Notifications
Provides a backwards-compatible notification API with support for Wear and Auto
1. Small icon: This is required and set with setSmallIcon().
2. App name: This is provided by the system.
3. Time stamp: This is provided by the system but you can override with setWhen() or hide it with
setShowWhen(false).
4. Large icon: This is optional (usually used only for contact photos; do not use it for your app icon) and set
withsetLargeIcon().
5. Title: This is optional and set with setContentTitle().
6. Text: This is optional and set with setContentText().
Behavior - Permissions
Compatibility APIs for checking and requesting app permissions
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.snazzyapp">
<uses-permission android:name="android.permission.SEND_SMS"/>
<application ...>
...
</application>
</manifest>
Behavior - Preferences
Create interactive settings screens
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="notifications"
app:title="Enable message notifications"/>
<Preference
app:key="feedback"
app:title="Send feedback"
app:summary="Report technical issues or suggest new features"/>
</androidx.preference.PreferenceScreen>
Behavior - Sharing
Provides a share action suitable for an app’s action bar
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_share"
android:showAsAction="ifRoom"
android:title="Share"
android:actionProviderClass=
"android.widget.ShareActionProvider" />
...
</menu>
private ShareActionProvider shareActionProvider;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate menu resource file.
getMenuInflater().inflate(R.menu.share_menu, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.menu_item_share);
// Fetch and store ShareActionProvider
shareActionProvider = (ShareActionProvider) item.getActionProvider();
// Return true to display menu
return true;
}
// Call to update the share intent
private void setShareIntent(Intent shareIntent) {
if (shareActionProvider != null) {
shareActionProvider.setShareIntent(shareIntent);
}
}
Behavior - Slices
Create flexible UI elements that can display app data outside the app
Android’s new approach to remote content :
● Templated
● Interactive
● Updatable
● Backwards-compatible
dependencies {
// ...
implementation "androidx.slice:slice-builders:(latest version)"
// ...
}
Behavior - Slices
Templated
Dynamic and interactive content Enables rich and flexible layout
Behavior - Slices
Launching in search
Enhance predictions with rich app content
Accelerate navigation, task completion and discovery of app content.
App names
eg. [maps], [lyft], [airbnb]
General trems
eg. [get a ride], [trending videos]
Behavior - Slices
Example Use Case
Behavior - Slices
Example Use Case
adb install -r -t slice-viewer.apk
Enter slice-<your slice URI> in the URL field
Example: slice-content://com.example.your.sliceuri
Behavior - Slices
Slice Structure
Android Jetpack Components
UI
UI - Animations & Transitions
Move widgets and transition between screens
UI - Emoji
Enable an up-to-date emoji font on older platforms
UI - Emoji
How does EmojiCompat work?
dependencies {
...
implementation "androidx.emoji:emoji:1.0.0"
}
UI - Fragment
A basic unit of composable UI
UI - Layout
Lay out widgets using different algorithms
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
UI - Layout
LinearLayout AbsoluteLayout RelativeLayout GridLayout ScrollView
UI - Palette
Pull useful information out of color palettes
dependencies {
...
implementation 'androidx.palette:palette:1.0.0'
}
Lalu belajar apa lagi nih?
Material Design
Image Downloader
GlidePicasso
Android Networking
Fast Android NetworkingRetrofit
Volley AQuery
Dependency Injection
Dagger 2 Koin
Jadi apa sih itu Firebase?
Build better apps
Improve app quality
Grow your business
Integrations
Future of Firebase
Make smart,
data-driver decisions
Free to start. scale
with ease
Forget abaout
infrastructure
Get free support
Work across platform
Mobile machine
learning for all skill
levels
Production-ready
for common use
cases
On-device or in
the Cloud
Deploy custom
models
https://codelabs.developers.google.com/codelabs/mlkit-android
https://medium.com/tensorflow/recap-of-the-2019-tensorflow-dev-summit-1b5ede42da8d
Silakan coba codelabsnya.
https://www.tensorflow.org/lite/models/
Google releases source code for Google I/O 2019 for Android
https://android-developers.googleblog.com/2019/08/google-releases-source-code-for-google.html
Android Q out of the box
Gesture navigation
Gesture navigation navigating back
and to the home screen
Android Q out of the box
Dark Theme
Schedule UI in dark theme
Improved schedule screen
This year’s schedule UI jumping
to another conference day
Navigation Component
All transitions in the
navigation editor
Full Text Search with Room
Searching for a session and a speaker
Lots of improvements
Home UI and Codelabs UI
Skripsi
TA
Bimbingan
Tugas Besar
Deadline
Project
Doi ngambek
Rapat
Kerja
dicoding.id/junia
dicoding.id/rosy
dicoding.id/hastu
Sertifikat / Sertifikasi
Kebutuhan
Industri IT
Talenta
Digital
Lulusan universitas
Lulusan SMK
Otodidak
Kursus
Profesional
dll (re-skilling)
Training /
Matrikulasi
Sertifikasi
https://hacktoberfest.digitalocean.com/
https://www.dicoding.com/academies/116
Thank you
Gilang Ramadhan
+6281904996393
gilang@dicoding.com

More Related Content

What's hot

High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode VMware Tanzu
 
TechEvent Eclipse Microprofile
TechEvent Eclipse MicroprofileTechEvent Eclipse Microprofile
TechEvent Eclipse MicroprofileTrivadis
 
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...DicodingEvent
 
Tk2323 lecture 7 data storage
Tk2323 lecture 7   data storageTk2323 lecture 7   data storage
Tk2323 lecture 7 data storageMengChun Lam
 
Android overview
Android overviewAndroid overview
Android overviewHas Taiar
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFPierre-Yves Ricau
 
S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0Sun-Jin Jang
 
Spring Up Your Graph
Spring Up Your GraphSpring Up Your Graph
Spring Up Your GraphVMware Tanzu
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC frameworkMohit Gupta
 
Droidcon Berlin Barcamp 2016
Droidcon Berlin Barcamp 2016Droidcon Berlin Barcamp 2016
Droidcon Berlin Barcamp 2016Przemek Jakubczyk
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineIMC Institute
 
GOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in ChennaiGOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in Chennailakshmipriyaaka
 

What's hot (19)

High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode
 
TechEvent Eclipse Microprofile
TechEvent Eclipse MicroprofileTechEvent Eclipse Microprofile
TechEvent Eclipse Microprofile
 
Android - Api & Debugging in Android
Android - Api & Debugging in AndroidAndroid - Api & Debugging in Android
Android - Api & Debugging in Android
 
Exploring Maven SVN GIT
Exploring Maven SVN GITExploring Maven SVN GIT
Exploring Maven SVN GIT
 
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...
Dicoding Developer Coaching #26: Android | Menyimpan Database dengan Lebih Si...
 
Tk2323 lecture 7 data storage
Tk2323 lecture 7   data storageTk2323 lecture 7   data storage
Tk2323 lecture 7 data storage
 
Android development
Android developmentAndroid development
Android development
 
Android overview
Android overviewAndroid overview
Android overview
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
 
S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0S03 hybrid app_and_gae_datastore_v1.0
S03 hybrid app_and_gae_datastore_v1.0
 
Struts notes
Struts notesStruts notes
Struts notes
 
Spring Up Your Graph
Spring Up Your GraphSpring Up Your Graph
Spring Up Your Graph
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
 
Working with Servlets
Working with ServletsWorking with Servlets
Working with Servlets
 
Droidcon Berlin Barcamp 2016
Droidcon Berlin Barcamp 2016Droidcon Berlin Barcamp 2016
Droidcon Berlin Barcamp 2016
 
Struts notes
Struts notesStruts notes
Struts notes
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
 
GOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in ChennaiGOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in Chennai
 
Next stop: Spring 4
Next stop: Spring 4Next stop: Spring 4
Next stop: Spring 4
 

Similar to Stmik bandung

Building 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesBuilding 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesJakarta_EE
 
Innovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesInnovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesSolstice Mobile Argentina
 
Android presentation
Android presentationAndroid presentation
Android presentationImam Raza
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Nicolas HAAN
 
Android Development : (Android Studio, PHP, XML, MySQL)
Android Development : (Android Studio, PHP, XML, MySQL)Android Development : (Android Studio, PHP, XML, MySQL)
Android Development : (Android Studio, PHP, XML, MySQL)Kavya Barnadhya Hazarika
 
Live Coding 12 Factor App
Live Coding 12 Factor AppLive Coding 12 Factor App
Live Coding 12 Factor AppEmily Jiang
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAElynneblue
 
Intro To Android App Development
Intro To Android App DevelopmentIntro To Android App Development
Intro To Android App DevelopmentMike Kvintus
 
Mix Tech Ed Update No Video
Mix Tech Ed Update No VideoMix Tech Ed Update No Video
Mix Tech Ed Update No VideoAllyWick
 
Cara Tepat Menjadi iOS Developer Expert - Gilang Ramadhan
Cara Tepat Menjadi iOS Developer Expert - Gilang RamadhanCara Tepat Menjadi iOS Developer Expert - Gilang Ramadhan
Cara Tepat Menjadi iOS Developer Expert - Gilang RamadhanDicodingEvent
 
Implementation of sql server based on sqlite engine on
Implementation of sql server based on sqlite engine onImplementation of sql server based on sqlite engine on
Implementation of sql server based on sqlite engine oneSAT Publishing House
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkImam Raza
 
Simple stock market analysis
Simple stock market analysisSimple stock market analysis
Simple stock market analysislynneblue
 
Android app development SEO Expert Bangladesh LTD.pdf
Android app development  SEO Expert Bangladesh LTD.pdfAndroid app development  SEO Expert Bangladesh LTD.pdf
Android app development SEO Expert Bangladesh LTD.pdfTasnim Jahan
 
Android app development SEO Expert Bangladesh LTD.pdf
Android app development  SEO Expert Bangladesh LTD.pdfAndroid app development  SEO Expert Bangladesh LTD.pdf
Android app development SEO Expert Bangladesh LTD.pdfTasnim Jahan
 

Similar to Stmik bandung (20)

Android Anatomy
Android  AnatomyAndroid  Anatomy
Android Anatomy
 
Building 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesBuilding 12-factor Cloud Native Microservices
Building 12-factor Cloud Native Microservices
 
Innovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesInnovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best Practices
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
MumtazQAResume
MumtazQAResumeMumtazQAResume
MumtazQAResume
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
 
Android Development : (Android Studio, PHP, XML, MySQL)
Android Development : (Android Studio, PHP, XML, MySQL)Android Development : (Android Studio, PHP, XML, MySQL)
Android Development : (Android Studio, PHP, XML, MySQL)
 
Live Coding 12 Factor App
Live Coding 12 Factor AppLive Coding 12 Factor App
Live Coding 12 Factor App
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAE
 
Intro To Android App Development
Intro To Android App DevelopmentIntro To Android App Development
Intro To Android App Development
 
Mix Tech Ed Update No Video
Mix Tech Ed Update No VideoMix Tech Ed Update No Video
Mix Tech Ed Update No Video
 
Cara Tepat Menjadi iOS Developer Expert - Gilang Ramadhan
Cara Tepat Menjadi iOS Developer Expert - Gilang RamadhanCara Tepat Menjadi iOS Developer Expert - Gilang Ramadhan
Cara Tepat Menjadi iOS Developer Expert - Gilang Ramadhan
 
Implementation of sql server based on sqlite engine on
Implementation of sql server based on sqlite engine onImplementation of sql server based on sqlite engine on
Implementation of sql server based on sqlite engine on
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talk
 
Simple stock market analysis
Simple stock market analysisSimple stock market analysis
Simple stock market analysis
 
Unit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.pptUnit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.ppt
 
PPT Companion to Android
PPT Companion to AndroidPPT Companion to Android
PPT Companion to Android
 
Android app development SEO Expert Bangladesh LTD.pdf
Android app development  SEO Expert Bangladesh LTD.pdfAndroid app development  SEO Expert Bangladesh LTD.pdf
Android app development SEO Expert Bangladesh LTD.pdf
 
Android app development SEO Expert Bangladesh LTD.pdf
Android app development  SEO Expert Bangladesh LTD.pdfAndroid app development  SEO Expert Bangladesh LTD.pdf
Android app development SEO Expert Bangladesh LTD.pdf
 

Recently uploaded

办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一
办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一
办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一A SSS
 
Digital Marketing Training Institute in Mohali, India
Digital Marketing Training Institute in Mohali, IndiaDigital Marketing Training Institute in Mohali, India
Digital Marketing Training Institute in Mohali, IndiaDigital Discovery Institute
 
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一A SSS
 
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量sehgh15heh
 
LinkedIn for Your Job Search in April 2024
LinkedIn for Your Job Search in April 2024LinkedIn for Your Job Search in April 2024
LinkedIn for Your Job Search in April 2024Bruce Bennett
 
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档208367051
 
Black and White Minimalist Co Letter.pdf
Black and White Minimalist Co Letter.pdfBlack and White Minimalist Co Letter.pdf
Black and White Minimalist Co Letter.pdfpadillaangelina0023
 
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607dollysharma2066
 
Protection of Children in context of IHL and Counter Terrorism
Protection of Children in context of IHL and  Counter TerrorismProtection of Children in context of IHL and  Counter Terrorism
Protection of Children in context of IHL and Counter TerrorismNilendra Kumar
 
Introduction to Political Parties (1).ppt
Introduction to Political Parties (1).pptIntroduction to Political Parties (1).ppt
Introduction to Political Parties (1).pptSohamChavan9
 
Nathan_Baughman_Resume_copywriter_and_editor
Nathan_Baughman_Resume_copywriter_and_editorNathan_Baughman_Resume_copywriter_and_editor
Nathan_Baughman_Resume_copywriter_and_editorNathanBaughman3
 
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...nitagrag2
 
Back on Track: Navigating the Return to Work after Parental Leave
Back on Track: Navigating the Return to Work after Parental LeaveBack on Track: Navigating the Return to Work after Parental Leave
Back on Track: Navigating the Return to Work after Parental LeaveMarharyta Nedzelska
 
Introduction to phyton , important topic
Introduction to phyton , important topicIntroduction to phyton , important topic
Introduction to phyton , important topicakpgenious67
 
The Next Things To Immediately Do About Mating Press
The Next Things To Immediately Do About Mating PressThe Next Things To Immediately Do About Mating Press
The Next Things To Immediately Do About Mating Pressmatingpress170
 
Unlock Your Creative Potential: 7 Skills for Content Creator Evolution
Unlock Your Creative Potential: 7 Skills for Content Creator EvolutionUnlock Your Creative Potential: 7 Skills for Content Creator Evolution
Unlock Your Creative Potential: 7 Skills for Content Creator EvolutionRhazes Ghaisan
 
Human Rights are notes and helping material
Human Rights are notes and helping materialHuman Rights are notes and helping material
Human Rights are notes and helping materialnadeemcollege26
 
Application deck- Cyril Caudroy-2024.pdf
Application deck- Cyril Caudroy-2024.pdfApplication deck- Cyril Caudroy-2024.pdf
Application deck- Cyril Caudroy-2024.pdfCyril CAUDROY
 
定制英国克兰菲尔德大学毕业证成绩单原版一比一
定制英国克兰菲尔德大学毕业证成绩单原版一比一定制英国克兰菲尔德大学毕业证成绩单原版一比一
定制英国克兰菲尔德大学毕业证成绩单原版一比一z zzz
 
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一z xss
 

Recently uploaded (20)

办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一
办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一
办理学位证(UoM证书)北安普顿大学毕业证成绩单原版一比一
 
Digital Marketing Training Institute in Mohali, India
Digital Marketing Training Institute in Mohali, IndiaDigital Marketing Training Institute in Mohali, India
Digital Marketing Training Institute in Mohali, India
 
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一
办理学位证(Massey证书)新西兰梅西大学毕业证成绩单原版一比一
 
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量
原版定制copy澳洲查尔斯达尔文大学毕业证CDU毕业证成绩单留信学历认证保障质量
 
LinkedIn for Your Job Search in April 2024
LinkedIn for Your Job Search in April 2024LinkedIn for Your Job Search in April 2024
LinkedIn for Your Job Search in April 2024
 
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档
格里菲斯大学毕业证(Griffith毕业证)#文凭成绩单#真实留信学历认证永久存档
 
Black and White Minimalist Co Letter.pdf
Black and White Minimalist Co Letter.pdfBlack and White Minimalist Co Letter.pdf
Black and White Minimalist Co Letter.pdf
 
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607
Gurgaon Call Girls: Free Delivery 24x7 at Your Doorstep G.G.N = 8377087607
 
Protection of Children in context of IHL and Counter Terrorism
Protection of Children in context of IHL and  Counter TerrorismProtection of Children in context of IHL and  Counter Terrorism
Protection of Children in context of IHL and Counter Terrorism
 
Introduction to Political Parties (1).ppt
Introduction to Political Parties (1).pptIntroduction to Political Parties (1).ppt
Introduction to Political Parties (1).ppt
 
Nathan_Baughman_Resume_copywriter_and_editor
Nathan_Baughman_Resume_copywriter_and_editorNathan_Baughman_Resume_copywriter_and_editor
Nathan_Baughman_Resume_copywriter_and_editor
 
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...
Escorts Service Near Surya International Hotel, New Delhi |9873777170| Find H...
 
Back on Track: Navigating the Return to Work after Parental Leave
Back on Track: Navigating the Return to Work after Parental LeaveBack on Track: Navigating the Return to Work after Parental Leave
Back on Track: Navigating the Return to Work after Parental Leave
 
Introduction to phyton , important topic
Introduction to phyton , important topicIntroduction to phyton , important topic
Introduction to phyton , important topic
 
The Next Things To Immediately Do About Mating Press
The Next Things To Immediately Do About Mating PressThe Next Things To Immediately Do About Mating Press
The Next Things To Immediately Do About Mating Press
 
Unlock Your Creative Potential: 7 Skills for Content Creator Evolution
Unlock Your Creative Potential: 7 Skills for Content Creator EvolutionUnlock Your Creative Potential: 7 Skills for Content Creator Evolution
Unlock Your Creative Potential: 7 Skills for Content Creator Evolution
 
Human Rights are notes and helping material
Human Rights are notes and helping materialHuman Rights are notes and helping material
Human Rights are notes and helping material
 
Application deck- Cyril Caudroy-2024.pdf
Application deck- Cyril Caudroy-2024.pdfApplication deck- Cyril Caudroy-2024.pdf
Application deck- Cyril Caudroy-2024.pdf
 
定制英国克兰菲尔德大学毕业证成绩单原版一比一
定制英国克兰菲尔德大学毕业证成绩单原版一比一定制英国克兰菲尔德大学毕业证成绩单原版一比一
定制英国克兰菲尔德大学毕业证成绩单原版一比一
 
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一
定制(SCU毕业证书)南十字星大学毕业证成绩单原版一比一
 

Stmik bandung

  • 1. Jalan Terbaik Menjadi Android Developer Expert dengan Teknologi Google Gilang Ramadhan
  • 3. - D3 Politeknik Negeri Semarang (2014-2017) - Android Freelancer (2015-2018)x - Android Trainer - IMASTUDIO (Oct 2015-Des 2017) - Android Developer Intern - GO-JEK (Feb 2018-May 2018) - Academy Content Writer - Dicoding (Oct 2018-Now)
  • 4.
  • 5.
  • 6.
  • 7. Kenapa Developer Memilih Android? Android memanjakan penggunanya dengan fitur yang sangat canggih dan tampilan yang indah. Sistem Android dapat digunakan sebagai alat multimedia seperti pemutar musik dan video. Ia juga memiliki perangkat keras seperti accelerometer, gyroscope dan sensor lainnya.
  • 10. Pada tahun 2013, Android menjadi operation system (OS) terlaris pada tablet dan smartphone. Dan tercatat pada bulan Maret 2019 store Android memiliki lebih dari 2.6 juta aplikasi. (https://www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/)
  • 11.
  • 16. https://teknojurnal.com/pilih-membuat-aplikasi-mobile-native-atau-hybrid/ Native Hybrid Development Language Native Only Native and Web / Web Only Device Access Complete Complete Device Specific Features High Moderate Speed Very Fast Medium App Store Available Available Approval Process Mandatory Low Overhead Code Portability None High Advanced Graphics High Moderate UI / UX High Moderate Access to Native APIs High Moderate Development Cost Expensive Reasonable Native vs Hybrid
  • 17. Apache Cordova Unity Adobe FlashNetBeansXamarin Eclipse Android Studio IDE Platform
  • 19. Android Studio Android Studio provides the fastest tools for building apps on every type of Android device.
  • 21. Jetpack? Kiri, Kanan, L1, L2, R1, R2, Atas, Bawah, Kiri, Kanan
  • 22. Android Jetpack Jetpack is a collection of Android software components to make it easier for you to develop great Android apps.
  • 23. Advantages Accelerate development Eliminate boilerplate code Build high quality, robust apps
  • 24. Android Jetpack Components Foundation Architecture UIBehavior
  • 26. Foundation - AppCompat Before After com.android.support:cardview-v7 androidx.cardview:cardview:1.0.0 com.android.support:appcompat-v7 androidx.appcompat:appcompat:1.0.0 com.android.support:recyclerview-v7 androidx.recyclerview:recyclerview:1.0.0 android.arch.persistence.room:common androidx.room:room-common:2.0.0-rc01 android.arch.core:common androidx.arch.core:core-common:2.0.0-rc01 android.arch.core:core androidx.arch.core:core:2.0.0-rc01 android.arch.paging:common androidx.paging:paging-common:2.0.0-rc01 .... .... Degrade gracefully on older versions of Android
  • 27. Foundation - Android KTX Getting Started dependencies { implementation 'androidx.core:core-ktx:1.0.0' } Before sharedPreferences.edit() .putBoolean("key", value) .apply() After sharedPreferences.edit { putBoolean("key", value) } Write more concise, idiomatic Kotlin code
  • 28. Kotlin Concise Drastically reduce the amount of boilerplate code. Safe Avoid entire classes of errors such as null pointer exceptions. Tool-friendly Choose any Java IDE or build from the command line. Interoperable Leverage existing libraries for the JVM, Android, and the browser. Kotlin/Native reached beta Coroutines are now stable Learning Kits start easily Multiplatform code reuse Kotlin 1.3 Released
  • 29. Parts of Anko Layouts: a fast and type-safe way to write dynamic Android layouts. Anko Commons: a lightweight library full of helpers for intents, dialogs, logging and so on. Anko SQLite: a query DSL and parser collection for Android SQLite. Anko Coroutines: utilities based on the kotlinx.coroutines library.
  • 30. Foundation - Auto Components to help develop apps for Android Auto
  • 31. Foundation - Benchmark Quickly benchmark your Kotlin-based or Java-based code from within Android Studio Add the library to your module’s build.gradle file: project_root/module_dir/build.gradle To disable debugging in the test manifest, update your <application> element to force-disable debugging temporarily as follows: project_root/module_dir/src/androidTest/AndroidManifest.xml
  • 32. Foundation - Benchmark Quickly benchmark your Kotlin-based or Java-based code from within Android Studio To add your benchmark, add an instance of BenchmarkRule in a test file in the androidTest directory. For more information on writing benchmarks, see Write a benchmark. The following code snippet shows how to add a benchmark to a JUnit test:
  • 33. Foundation - Multidex Multidex Support prior to Android 5.0 (Api 21) android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 28 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.3' } Provide support for apps with multiple DEX files Enable multidex for apps with over 64K methods
  • 34. Foundation - Security Read and write encrypted files and shared preferences by following security best practices. ● Strong security that balances great encryption and good performance. ● Maximum security. The Security library uses a 2-part system for key management: ● A keyset that contains one or more keys to encrypt a file or shared preferences data. The keyset itself is stored inSharedPreferences. ● A master key that encrypts all keysets. This key is stored using the Android keystore system.
  • 35. New Feature New Bugs . . . https://gph.is/2jt9RvW Foundation - Test An Android testing framework for unit and runtime UI tests
  • 36. Foundation - Test An Android testing framework for unit and runtime UI tests
  • 37. Foundation - Test An Android testing framework for unit and runtime UI tests
  • 38.
  • 41.
  • 42. Foundation - TV Components to help develop apps for Android TV
  • 43. Foundation - Wear OS by Google Components to help develop apps for Wear
  • 46. Architecture - ViewModel Manage UI-related data in a lifecycle-conscious way
  • 47. Architecture - LiveData Ensures your UI matches your data state No memory leaks No crashes due to stopped activities No more manual lifecycle handling Always up to date data Proper configuration changes Sharing resources Notify views when underlying database changes
  • 48. Architecture - LiveData public class NameViewModel extends ViewModel { // Create a LiveData with a String private MutableLiveData<String> currentName; public MutableLiveData<String> getCurrentName() { if (currentName == null) { currentName = new MutableLiveData<String>(); } return currentName; } // Rest of the ViewModel... } Notify views when underlying database changes
  • 49. public class NameActivity extends AppCompatActivity { private NameViewModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Other code to setup the activity... // Get the ViewModel. model = ViewModelProviders.of(this).get(NameViewModel.class); // Create the observer which updates the UI. final Observer<String> nameObserver = new Observer<String>() { @Override public void onChanged(@Nullable final String newName) { // Update the UI, in this case, a TextView. nameTextView.setText(newName); } }; // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer. model.getCurrentName().observe(this, nameObserver); } }
  • 50. Architecture - Data Binding Getting Started android { .... dataBinding { enabled = true } } Declaratively bind observable data to UI elements Activity TextView textView = findViewById(R.id.sample_text); textView.setText(viewModel.getUserName()); Layout <TextView android:text="@{viewmodel.userName}" />
  • 51. Architecture - Lifecycles class MyLocationListener { public MyLocationListener(Context context, Callback callback) { // ... } void start() { // connect to system location service } void stop() { // disconnect from system location service } } Manage your activity and fragment lifecycles
  • 52. class MyActivity extends AppCompatActivity { private MyLocationListener myLocationListener; @Override public void onCreate(...) { myLocationListener = new MyLocationListener(this, (location) -> { // update UI }); } @Override public void onStart() { super.onStart(); myLocationListener.start(); // manage other components that need to respond to the activity lifecycle } @Override public void onStop() { super.onStop(); myLocationListener.stop(); // manage other components that need to respond to the activity lifecycle } }
  • 53. class MyActivity extends AppCompatActivity { ... @Override public void onStart() { super.onStart(); Util.checkUserStatus(result -> { // what if this callback is invoked AFTER activity is stopped? if (result) { myLocationListener.start(); } }); } ... }
  • 54. Architecture - Lifecycles Manage your activity and fragment lifecycles
  • 55. Architecture - Lifecycles public class MyObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void connectListener() { ... } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void disconnectListener() { ... } } myLifecycleOwner.getLifecycle().addObserver(new MyObserver()); Manage your activity and fragment lifecycles
  • 56. Architecture - Room Fluent SQLite database access
  • 57. Architecture - Room Entity @Entity public class User { @PrimaryKey public int uid; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name") public String lastName; }
  • 58. Architecture - Room Dao @Dao public interface UserDao { @Query("SELECT * FROM user") List<User> getAll(); @Query("SELECT * FROM user WHERE uid IN (:userIds)") List<User> loadAllByIds(int[] userIds); @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findByName(String first, String last); @Insert void insertAll(User... users); @Delete void delete(User user); }
  • 59. Architecture - Room Database @Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); } Create Database AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
  • 60. Architecture - Paging Gradually load information on demand from your data source
  • 61. Architecture - Paging Gradually load information on demand from your data source PagedList public class ConcertViewModel extends ViewModel { private ConcertDao concertDao; public final LiveData<PagedList<Concert>> concertList; // Creates a PagedList object with 50 items per page. public ConcertViewModel(ConcertDao concertDao) { this.concertDao = concertDao; concertList = new LivePagedListBuilder<>( concertDao.concertsByDate(), 50).build(); } }
  • 62. Architecture - Paging Gradually load information on demand from your data source Data @Dao public interface ConcertDao { // The Integer type parameter tells Room to use a // PositionalDataSource object. @Query("SELECT * FROM concerts ORDER BY date DESC") DataSource.Factory<Integer, Concert> concertsByDate(); }
  • 63. Architecture - Paging Gradually load information on demand from your data source UI public class BookmarkPagedAdapter extends PagedListAdapter<DataModel, ViewHolder> { ... }
  • 64. Architecture - Navigation ● Handling Fragment transactions ● Handling Up and Back actions correctly by default ● Providing standardized resources for animations and transitions ● Treating deep linking as a first-class operation ● Including Navigation UI patterns, such as navigation drawers and bottom navigation, with minimal additional work ● Providing type safety when passing information while navigating ● Visualizing and editing navigation graphs with Android Studio's Navigation Editor Handle everything needed for in-app navigation If you want to use the Navigation Architecture Component with Android Studio, you must use Android Studio 3.2 Canary 14 or higher.
  • 65. Architecture - Navigation Handle everything needed for in-app navigation
  • 66. Architecture - WorkManager Key features: ● Backwards compatible up to API 14 ○ Uses JobScheduler on devices with API 23+ ○ Uses a combination of BroadcastReceiver + AlarmManager on devices with API 14-22 ● Add work constraints like network availability or charging status ● Schedule asynchronous one-off or periodic tasks ● Monitor and manage scheduled tasks ● Chain tasks together ● Guarantees task execution, even if the app or device restarts Manage your Android background jobs
  • 67. Architecture - WorkManager public class UploadWorker extends Worker { public UploadWorker(@NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, upload the images. uploadImages() // Indicate whether the task finished successfully with the Result return Result.success() } } Manage your Android background jobs
  • 68. Architecture - WorkManager OneTimeWorkRequest OneTimeWorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class).build() PeriodicWorkRequest Constraints constraints = new Constraints.Builder().setRequiresCharging(true).build(); PeriodicWorkRequest saveRequest = new PeriodicWorkRequest.Builder(SaveImageFileWorker.class, 1, TimeUnit.HOURS).setConstraints(constraints).build(); WorkManager.getInstance().enqueue(saveRequest); Manage your Android background jobs
  • 69. Architecture - WorkManager Manage your Android background jobs WorkContinuation chain1 = WorkManager.getInstance() .beginWith(workA) .then(workB); WorkContinuation chain2 = WorkManager.getInstance() .beginWith(workC) .then(workD); WorkContinuation chain3 = WorkContinuation .combine(Arrays.asList(chain1, chain2)) .then(workE); chain3.enqueue();
  • 71. Behavior - CameraX Easily add camera capabilities to your apps ● Ease of use ○ Preview: get an image on the display ○ Image analysis: access a buffer seamlessly for use in your algorithms, such as to pass into MLKit ○ Image capture: save high-quality images ● Consistency across devices ● New camera experiences
  • 72. Behavior - Download Manager Schedule and manage large downloads class DownloadManager.Query This class may be used to filter download manager queries. class DownloadManager.Request This class contains all the information necessary to request a new download.
  • 73. Behavior - Media & Playback Backwards compatible APIs for media playback and routing (including Google Cast) A multimedia application that plays audio or video usually has two parts: ● A player that takes digital media in and renders it as video and/or audio. ● A UI with transport controls to run the player and optionally display the player's state.
  • 74. Behavior - Media & Playback Backwards compatible APIs for media playback and routing (including Google Cast)
  • 75. Behavior - Media & Playback Video apps versus audio apps
  • 76. Behavior - Notifications Provides a backwards-compatible notification API with support for Wear and Auto Status bar and notification drawer Heads-up notification
  • 77. Behavior - Notifications Provides a backwards-compatible notification API with support for Wear and Auto Lock screen App icon badge Wear OS devices
  • 78. Behavior - Notifications Provides a backwards-compatible notification API with support for Wear and Auto 1. Small icon: This is required and set with setSmallIcon(). 2. App name: This is provided by the system. 3. Time stamp: This is provided by the system but you can override with setWhen() or hide it with setShowWhen(false). 4. Large icon: This is optional (usually used only for contact photos; do not use it for your app icon) and set withsetLargeIcon(). 5. Title: This is optional and set with setContentTitle(). 6. Text: This is optional and set with setContentText().
  • 79. Behavior - Permissions Compatibility APIs for checking and requesting app permissions <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.snazzyapp"> <uses-permission android:name="android.permission.SEND_SMS"/> <application ...> ... </application> </manifest>
  • 80. Behavior - Preferences Create interactive settings screens <androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </androidx.preference.PreferenceScreen>
  • 81. Behavior - Sharing Provides a share action suitable for an app’s action bar <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="Share" android:actionProviderClass= "android.widget.ShareActionProvider" /> ... </menu>
  • 82. private ShareActionProvider shareActionProvider; ... @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate menu resource file. getMenuInflater().inflate(R.menu.share_menu, menu); // Locate MenuItem with ShareActionProvider MenuItem item = menu.findItem(R.id.menu_item_share); // Fetch and store ShareActionProvider shareActionProvider = (ShareActionProvider) item.getActionProvider(); // Return true to display menu return true; } // Call to update the share intent private void setShareIntent(Intent shareIntent) { if (shareActionProvider != null) { shareActionProvider.setShareIntent(shareIntent); } }
  • 83. Behavior - Slices Create flexible UI elements that can display app data outside the app Android’s new approach to remote content : ● Templated ● Interactive ● Updatable ● Backwards-compatible dependencies { // ... implementation "androidx.slice:slice-builders:(latest version)" // ... }
  • 84. Behavior - Slices Templated Dynamic and interactive content Enables rich and flexible layout
  • 85. Behavior - Slices Launching in search Enhance predictions with rich app content Accelerate navigation, task completion and discovery of app content. App names eg. [maps], [lyft], [airbnb] General trems eg. [get a ride], [trending videos]
  • 87. Behavior - Slices Example Use Case adb install -r -t slice-viewer.apk Enter slice-<your slice URI> in the URL field Example: slice-content://com.example.your.sliceuri
  • 90. UI - Animations & Transitions Move widgets and transition between screens
  • 91. UI - Emoji Enable an up-to-date emoji font on older platforms
  • 92. UI - Emoji How does EmojiCompat work? dependencies { ... implementation "androidx.emoji:emoji:1.0.0" }
  • 93. UI - Fragment A basic unit of composable UI
  • 94. UI - Layout Lay out widgets using different algorithms <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout>
  • 95. UI - Layout LinearLayout AbsoluteLayout RelativeLayout GridLayout ScrollView
  • 96. UI - Palette Pull useful information out of color palettes dependencies { ... implementation 'androidx.palette:palette:1.0.0' }
  • 97. Lalu belajar apa lagi nih?
  • 100. Android Networking Fast Android NetworkingRetrofit Volley AQuery
  • 102. Jadi apa sih itu Firebase?
  • 107. Future of Firebase Make smart, data-driver decisions Free to start. scale with ease Forget abaout infrastructure Get free support Work across platform
  • 108. Mobile machine learning for all skill levels
  • 112.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 121.
  • 122.
  • 123.
  • 125.
  • 126. Google releases source code for Google I/O 2019 for Android https://android-developers.googleblog.com/2019/08/google-releases-source-code-for-google.html
  • 127. Android Q out of the box Gesture navigation Gesture navigation navigating back and to the home screen
  • 128. Android Q out of the box Dark Theme Schedule UI in dark theme
  • 129. Improved schedule screen This year’s schedule UI jumping to another conference day
  • 130. Navigation Component All transitions in the navigation editor
  • 131. Full Text Search with Room Searching for a session and a speaker
  • 132. Lots of improvements Home UI and Codelabs UI
  • 134.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142. Sertifikat / Sertifikasi Kebutuhan Industri IT Talenta Digital Lulusan universitas Lulusan SMK Otodidak Kursus Profesional dll (re-skilling) Training / Matrikulasi Sertifikasi