HENNGE@360|AnDev Conference

Charles Bond
henngeblog
Published in
6 min readAug 9, 2021
Photo by Mark Boss on Unsplash

On July 23rd, 2021 (JST) I attended the 5th annual conference. Given the extreme time zone difference and length of the conference, I was only able to attend a four-hour stretch of the talks given on the first day of the conference (July 22nd US Mountain Time). The conference began with a 30-minute opening remarks segment which began with a 10-minute countdown to the conference's start. During the opening remarks, thanks were given to all the folks who made the conference possible including staff and the speakers who joined the event. This was the second online-only 360|AnDev and as such made a number of improvements from last year’s event. This year’s event used a custom Zoom web portal to connect as well as a slack server set aside for the purpose of chat-based Q/A and other communication needs. The remainder of the conference was broken up into 30-minute talks interspersed with 20-minute networking sessions.

The First Talk.

The first talk of the day was “How to Build Awesome Android Libraries” by Marton Braun. Marton spent the talk giving tips on how to make Android Libraries better. The overall direction of the talk was on the benefits of reducing the complexity of every aspect of the library as much as possible to improve usability and maintainability. Reducing exposed public API lessens the headaches associated with updates and changes as there are fewer calls to worry about breaking. Reducing the libraries your library depends on reduces the risk of resources conflicting when your end-user includes multiple libraries themselves. Reducing or eliminating “on start” executions to the library helps end user’s apps start up faster. Likewise, running less in the background reduces the overall memory needs of client apps. Most of the rest of the talk focused on the makeup of AAR library files, as well as tips for reducing conflicts with other libraries with prefixed resources, private resources, and setting the minimum API level as low as you can afford. The last bit of the talk covered correct Maven hosting for your library and publishing, documentation, and testing tips.

Immediately following the first talk was an open networking session where attendees were free to talk to each other. Overall these talks were challenged by connection issues and by over half of the attendees staying silent. Some folks did talk about a limited amount of subjects, so there was a productive discussion in the end. The most common topic was the recent release of Jetpack Compose. There was a mix of excitement and concern about the major differences between the old Android UI and the new paradigm.

The Second Talk.

The second talk of the day was “Demystifying Locale on Android” by Julien Salvi. In this talk, Julien went into great detail about how IETF tags work, how language support works at its base on Android, and how this translates into current support on the platform. First Julien broke down the components of the IETF language tag:

language-extlang-script-region-variant-extension-privateuse

This allows language specification on Android to go down to a very specific level, not only covering language, region, subregion, sub-language, written script but also break down on specific private usages. Most Android apps will never get to this level of specificity, but it’s useful to know about this if it becomes necessary for your particular project. Julien also covered an important implementation detail on when language requirements do not match device settings. On older Android versions, when a language on the device could not exactly match the IETF tags available in the app, it would always fall back to the default language. In versions later than Android 7, however, a mismatched language will re-attempt to match a language based on the root tag (Language) before failing to the default language. Further development tips included: restricting supported languages in Gradle, noting the difference between app locale and device locale, and taking care that web views do not unintentionally reset the app locale.

The Third Talk.

The third talk “Fix App Crashes and Slow Response Times with Firebase” by Rosário P. Fernandes gave a quick overview of all of the testing and debugging features Firebase provides. As Rosário is a Google Dev Expert for Firebase, much of the talk focused on what firebase can do and how to integrate these features into one’s app. Crashlytics was introduced as a solution to catching crash reports and custom logs sent from the app. Firebase Test Lab was discussed as a way to access a vast library of Android test devices without having to purchase and execute on individual devices. Test lab works using unit tests, UI tests, and random robot tests. The next Firebase Performance Test was introduced as a way to track memory usage and HTTP call speed of apps and record for later review to help find performance issues at run time. Finally, App Distribution was introduced as a way to distribute specific Android builds to users without uploading to Google Play directly.

The Fourth Talk.

The fourth talk was a pre-recorded presentation from the Google engineers who worked on the Jetpack Compose framework: Preethi Srinivas, Alan Viverette, Adam Powell, and Meital Tagor Sbero. This session was a discussion on how to design APIs with developers in mind and covered the concept of the Cognitive Dimensions Framework and its use for adjusting APIs to meet the actual needs of end-users. The modified version of the Cognitive Dimensions Framework used Diary Study, Usability Study, Cognitive Walkthrough, and Code Review to identify problems in the API and gradually migrate to better design choices. For the purpose of the talk, the speakers focused on the Button control for the new API and how their discovery process found that simplified versions of their API actually caused more problems than they solved. In the end, they settled on a single Button API that takes an object with all available options rather than having multiple simplified button interfaces as it confused developers who kept trying to use the simplified interface with features only offered by the main API interface.

The Fifth Talk.

The fifth talk (and the last one I attended for the conference) was a deep dive on networking for Android given by Dinorah Tovar Duarte. In this talk, Dinorah started by covering some of the basics of networking on Android and how libraries like OkHTTP make network development much better. Concepts covered include concurrency, clients, connections (wifi/mobile) HTTP versions, network requests, caching, and HTTP security. A significant amount of the talk focused specifically on security concerns related to HTTPs, encryption, and certificates. The takeaway is to not assume your connection is secure just because you are using HTTPs alone and to keep both TLS and the version of HTTP being used in your implementation.

Conclusion.

Overall there were a lot of interesting speakers at the day’s talks and it was a privilege to have the opportunity to hear everyone share their knowledge about Android concepts that are important to them. There were many messages to take away from today’s conference. Designing libraries should favor simplicity. Locale on Android is complex and supports many options; be careful of the pitfalls of version and unsupported languages. Firebase has lots of tools to help developers and may be worth considering if you are not currently making use of all of the options. When designing new APIs it’s important to consider developers as your customer and construct APIs for simplicity rather than immediate ease of use. Android networking has lots of options and support, but be careful when it comes to security and certifications. There was a lot of information shared at this year's talks and it appears the community of 360|AnDev will continue to grow in the future.

--

--

Charles Bond
henngeblog

A Software developer from the Pacific Northwest region of the US who has been working in the Android space since 2010. Joined HENNGE in May 2020.