Droidcon Vietnam 2017

Daniel Weibel
Created 15 Apr 2017
Last updated 16 Apr 2017

Droidcon Vietnam took place on 15 and 16 April 2017 in Ho Chi Minh City.

Here is a short summary of all the presentations of the conference.

It includes a ranking of the presentations of each day with respect to how relevant I found it myself (most relevant is 1).

List of Presentations

  1. List of Presentations
  2. Espresso: Beyond the Basics
    1. Content
    2. Order
  3. Exploring Data Binding
    1. Content
    2. Order
  4. Reverse Engineering Apps
    1. Content
    2. Order
  5. Android Performance
    1. Content
    2. Order
  6. J2ObjC
    1. Content
    2. Order
  7. Kotlin
    1. Content
    2. Order
  8. Design of Fabulous
    1. Content
    2. Order
  9. React Native
    1. Content
    2. Order
  10. Reactive Programming on Android
    1. Content
    2. Order
  11. How To Make High-Quality Android Apps
    1. Content
    2. Order
  12. ConstraintLayout
    1. Content
    2. Order
  13. Nearby API
    1. Order
  14. Android Reverse Engineering
    1. Content
    2. Order
  15. F-Droid
  16. Custom Lint Rules for Android
  17. Conclusions
    1. Important and Urgent to Learn
    2. Important but Not Urgent to Learn
    3. Interesting But Not So Important

Espresso: Beyond the Basics

  • Speaker: Iñaki Villar
  • Date: 15 April, morning




Exploring Data Binding

  • Speaker: Zarah Dominguez
  • Date: 15 April, morning


  • Good overview of data binding
  • TODO: explore it more, especially anonymous method calls in XML and @BindingAdapter
  • Issue to add data binding to an XML file automatically in Android Studio:



Reverse Engineering Apps

  • Speaker: Jesse Sum
  • Date: 15 April, morning


  • Very interesting
  • Decompiling an APK in two ways:
    1. dex2jar and JD-GUI
      • View decompiled Java files (cannot edit and recompile)
    2. Apktool
      • Decompile code to smali, edit, and recompile to an APK
  • Obfuscating code with ProGuard replaces identifiers with short strings, so it’s harder to make sense of the decompiled code (but not impossible)
  • See Reverse Engineering talk on 16 April, afternoon



Android Performance

  • Speaker: Enrique Lopez
  • Date: 15 April, afternoon


  • Various techniques to make an app more performant
    • SysTrace
    • Traceview
    • DDBMS
    • Don’t use enums (use @IntDef instead)
    • WeakReference (to prevent memory leaks)
    • etc.




  • Speaker: Charlie Collins
  • Date: 15 April, afternoon


  • Write parts of code once and use them on both Android and iOS (and even Web)
  • Most suitable to be shared like this are the Entities (see Android Clean Architecture)
  • Organising code for reuse leads to a cleaner architecture
  • Presentation of the J2ObjC tool
  • Did not attend the entire talk




  • Speaker: Kai Koenig
  • Date: 15 April, afternoon




Design of Fabulous

  • Speaker: Taylor Ling
  • Date: 15 April, afternoon


  • Development story of the Fabulous app
  • Interesting form a product management perspective
  • Learned the term of MVP: minimum viable product



React Native

  • Speaker: Henry Tao
  • Date: 15 April, afternoon


  • Presentation of ReactNative
  • Did not attend the entire talk




Next day

Reactive Programming on Android

  • Speaker: Soham Mondal
  • Date: 16 April, morning


  • Good introduction to reactive programming
  • Three elements:
    1. Data source (emitting items)
    2. Observer (consuming items)
    3. Composition (compute a function on emitted items and emit a new resulting item)
  • The data source is implemented as an Observable<T>
    • Sub-types of Observables:
      • Single<T>: emits a single item and completes
      • Completable<T>: does not emit any item, just completes
      • Maybe<T>: emits zero or one item and completes
  • The observer is implemented as an Observer or Subscriber
  • The compositions are implemented as functions on items in a functional programming style (output of function depends only on input values)
    • Examples: map, zip
  • An Observer or Subscriber has to override the following methods:
    • onSubscribe
    • onNext
    • onComplete
    • onError
  • Slides: <



How To Make High-Quality Android Apps

  • Speaker: Hai Nguyen
  • Date: 16 April, morning


  • Software architecture and project managemnt that facilitate developing complex apps
    • Testing
    • Architecture
    • Static code analysis
    • Code review
    • Continuous integration
    • Engineering culture
  • Automated testing tools:
    • Appium
    • Calabash
    • MonkeyTalk
    • Robotium
    • Selendroid
  • S.O.L.I.D (object-oriented design)
  • Architecture patterns:
    • Redux (Reactive Programming)
    • Riblets (Facebook)
    • MVP (suited for Android)
      • The only component having Android-related code is the View
      • View only displays (dumb)
      • All the logic in Presenter
      • Models are just POJOs
      • Presenter and Model are generic
    • MVVM (suited for iOS, but not so much for Android)
  • Static code analysis tools:
    • SonarCube
    • PMD
    • Findbugs
  • Code review
    • Check code style: checkstyle
  • Continuous integration (CI)
    • Whenever a push to the VCS repository is made, the entire project is built, all the tests are run, and the code is reviewed (static code analysis, code review, code style)
    • Complete builds, tests, and reviews also happen every night and provide a report in the morning
    • Tools (some are paid):
      • Jenkins
      • TeamCity
      • Travis CI
      • Go CD
      • Bamboo
      • Circle CI
      • Codeship




  • Speaker: Cao Duy Vu
  • Date: 16 April, morning


  • Interesting introduction to ConstraintLayout
  • Each view has a horizontal and vertical constraint which can be relative to any other view
  • Allows to flatten view hierarchy (for example horizontal chains without nested LinearLayouts)
  • Allows positionings which are not easily possible without ConstraintLayout
  • Performance slightly worse than without ConstraintLayout and Android Studio GUI Layout Designer integration is buggy
  • Likely to be improved in the future, as it was introduced just in Google I/O 2016



Nearby API

  • Speaker: Chad Schultz
  • Date: 16 April, afternoon

  • Demonstration of the Google Nearby API
  • How it works: broadcast messages through some nearby communication medium (WiFi, Bluetooth) and other user in the range can receive them
  • Not many apps use it, so could be interesting to build an app using it
  • Limitations:
    • Can only receive messages if the app is running and in the foreground
    • Can only receive messages of the same app
    • Requires Internet connection
    • Broadcasting a message may take several seconds, not suited for instant messaging
    • No security built in (messages are not encrypted)
  • Other similar APIs:
    • Nearby Connections API
      • Works over WiFi router, no Internet connection needed
      • Seems to not work and not being maintained
    • WiFi Aware
      • Direct connection between WiFi interfaces of devices, no WiFi router needed
      • Standard devised by WiFi Alliance
      • New in Android O
    • AudioBytes
      • Transmission by near-ultrasound audio
      • Currently can transmit at most 10 bytes
      • Set Strategy DISTANCE_TYPE_EARSHOT



Android Reverse Engineering

  • Speaker: Huynh Quang
  • Date: 16 April, afternoon


  • Same topic as the Reverse Engineering talk from 15 April, morning (Apktool/smali approach)
  • Explanation of smali code
  • Supporting tools for editing/understanding smali code:
  • Xposed modules




  • Speaker: Peter Seerwylo
  • Date: 16 April, afternoon

Not attended

Custom Lint Rules for Android

  • Speaker: Hieu Hua
  • Date: 16 April, afternoon

Not attended


End of event


Topics presented in the conference, which are…

Important and Urgent to Learn

  • Data Binding: explore in more depth
  • Architecture: learn how to apply these patterns
    • MVP
    • MVVC
    • S.O.L.I.D
    • Clean
  • Static code analysis
  • Espresso
  • Manual and automated testing in general
  • ConstraintLayout: learn how to use it
  • Reactive Programming
  • Use a testing farm, like the one of Firebase or Amazon

Important but Not Urgent to Learn

Interesting But Not So Important

  • Reverse engineering apps
  • Nearby API and similar APIs
  • Kotlin