Porting an Android application

Updating the Android system
We were contracted to join our customer's development team to help port an existing suite of Android applications from a system using Android 6 to a new SoC running Android 11.
Our initial tasks involved updating the various Open Source libraries the customer was using as a part of their native application, including the GStreamer Cerbero build and Qt.
Some of the update process wasn't entirely troublefree: in the case of the Qt libraries we ended up debugging a tricky C++ exception unwinding issue exposed by updates to the Android C++ libraries in combination with link ordering in the build process.
Reworking framework integration
As the project progressed we moved from systems-level porting activities to focus on the Android Java framework.
In particular, the framework classes dealing with GPS had changed a lot between Android 6 and 11, meaning we had to rework the application's integration around these classes.
We worked on the application itself, both in the Java code and in C++ native code, and on the HAL, to integrate the required functionality before testing and verifying on both Android 6 and Android 11 to ensure the shared codebase continued to work well in both environments.
Troubleshooting
Alongside our porting work we also debugged a wide range of issues arising from the update to the new Android release. These included kernel-level issues, low level toolchain/build issues, and troubleshooting both native C++ and Java framework-level code.