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
- List of Presentations
- Espresso: Beyond the Basics
- Exploring Data Binding
- Reverse Engineering Apps
- Android Performance
- J2ObjC
- Kotlin
- Design of Fabulous
- React Native
- Reactive Programming on Android
- How To Make High-Quality Android Apps
- ConstraintLayout
- Nearby API
- Android Reverse Engineering
- F-Droid
- Custom Lint Rules for Android
- Conclusions
Espresso: Beyond the Basics
- Speaker: Iñaki Villar
- Date: 15 April, morning
Content
- Architecture and usage of Espresso
- Talk did not cover basic usage, but only advanced topics
- Used for UI tests within an app
- Part of the Android Testing Support Library
- Android testing farms
- TestDroid
- Genymotion
- Amazon
- Firebase
Order
7/8
Exploring Data Binding
- Speaker: Zarah Dominguez
- Date: 15 April, morning
Content
- 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: https://issuetracker.google.com/issues/37136823
Order
3/8
Reverse Engineering Apps
- Speaker: Jesse Sum
- Date: 15 April, morning
Content
- Very interesting
- Decompiling an APK in two ways:
- 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
Order
1/8
Android Performance
- Speaker: Enrique Lopez
- Date: 15 April, afternoon
Content
- Various techniques to make an app more performant
- SysTrace
- Traceview
- DDBMS
- Don’t use enums (use
@IntDef
instead) WeakReference
(to prevent memory leaks)- etc.
Order
6/8
J2ObjC
- Speaker: Charlie Collins
- Date: 15 April, afternoon
Content
- 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
Order
5/8
Kotlin
- Speaker: Kai Koenig
- Date: 15 April, afternoon
Content
- Introduction to Kotlin (v1.1)
- Slideshare: https://www.slideshare.net/AgentK
Order
4/8
Design of Fabulous
- Speaker: Taylor Ling
- Date: 15 April, afternoon
Content
- Development story of the Fabulous app
- Interesting form a product management perspective
- Learned the term of MVP: minimum viable product
Order
2/8
React Native
- Speaker: Henry Tao
- Date: 15 April, afternoon
Content
- Presentation of ReactNative
- Did not attend the entire talk
Order
8/8
Next day
Reactive Programming on Android
- Speaker: Soham Mondal
- Date: 16 April, morning
Content
- Good introduction to reactive programming
- Three elements:
- Data source (emitting items)
- Observer (consuming items)
- 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
Observable
s:Single<T>
: emits a single item and completesCompletable<T>
: does not emit any item, just completesMaybe<T>
: emits zero or one item and completes
- Sub-types of
- The observer is implemented as an
Observer
orSubscriber
- The compositions are implemented as functions on items in a functional programming style (output of function depends only on input values)
- Examples:
map
,zip
- Examples:
- An
Observer
orSubscriber
has to override the following methods:onSubscribe
onNext
onComplete
onError
- Slides: <http://bit.ly/introduction_reactive_android)
Order
3/5
How To Make High-Quality Android Apps
- Speaker: Hai Nguyen
- Date: 16 April, morning
Content
- 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
Order
2/5
ConstraintLayout
- Speaker: Cao Duy Vu
- Date: 16 April, morning
Content
- 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
Order
5/5
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
- Nearby Connections API
Order
4/5
Android Reverse Engineering
- Speaker: Huynh Quang
- Date: 16 April, afternoon
Content
- 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
- RootCloak - hide to an app that the current user is root (Xposed module)
- YouTube Background Playback - enable running YouTube video in backgrond
- YouTube AdAway - remove ads from YouTube app
Order
1/5
F-Droid
- 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
Conclusions
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
- Techniques to improve performance of apps (Android Performance)
- Continous integration
Interesting But Not So Important
- Reverse engineering apps
- Nearby API and similar APIs
- Kotlin