[GSoC 2020] Community Bonding Period - Android SDK Tools in Debian
This mail is an account of the community bonding period spent during the month of May 2020 for the
Android SDK Tools in Debian Project for Google Summer of Code 2020.
the Community bonding period ended on 31st May 2020, and the coding period officially began yesterday, i.e 1st June 2020. But the we (Me, Manas Kashyap (https://manas-kashyap.github.io/) and Samyak Jain (https://samyak-jn.tk/)) had already started working on the project since 2nd week of June.
Coding period is all about knowing your project, the organization, fellow students and mentors. We had our first meet over Jitsi a couple of days after the the selected students were announced. We introduced ourselves and chalked out a brief plan for the project. We decided to start working early on the project because we already know the packaging workflow of Debian and the project is also quite huge. The project is divided into 3 parts :
* Android SDK
Kotlin part mainly includes packaging Koltin for debian and uploading it to archives. Major work on this was already done last year by Saif Abdul Cassim during GSoC 2019. Details about his work can be found on his blog (https://java-team.pages.debian.net/gsoc-kotlin-blog/).
The things that blocked kotlin’s upload were:
Among these, everything except kotlin-bootstrap needed minor updates or changes. Kotlin bootstrap is a bootstrap package that’s needed only once for building Kotlin for the first time. We students divided the work among ourselves. Intellij-community-idea was assigned to me. It needed only minor edits to copyrights file and small tests to make sure the package builds clean. An ITP bug was filed before for the package and it as uploaded by Andrej Shadura (https://salsa.debian.org/andrewsh).
Next, I worked on android-platform-libcore. Updated it to latest version available from upstream i.e: android-10.0.0+r36 tag. We have decided as of now to update all the Android SDK tools to the 10.0.0+r36 tag.
Here are the changes that I have made:
* Update new upstream version 10.0.0+r36
* Use debhelper-compat (=12) .
* Bump Standards policy compliance version to 4.5.0.
* Update source and target compatibility to 1.8 in debian/build.gradle. This was needed to make sure the updated package builds correctly.
* Add patches to remove the following annotations from json/. These annotations are not required for us as we are only building json and not the whole libcore package.
* Unsupported Appusage
* CorePlatform API
The merge request for the same can be found here (https://salsa.debian.org/android-tools-team/android-platform-libcore/-/merge_requests/3/diffs).
Another small task that I accomplished during the community bonding period is checking the checking the vavr dependency for javaslang. (which again is a dependency of Kotlin) The issue can be found here (https://salsa.debian.org/android-tools-team/admin/-/issues/8).
Now comes the second part of the project, Updating Gradle to latest version. This is a bit tricky because latest Gradle depends heavily on Kotlin and Kotlin itself depends heavily on Gradle. While I was working on libcore and intellij-community-idea, Samyak Jain worked on completing Kotlin part. We have managed to build Kotlin locally but it is a bit tricky to upload because of the kotlin-bootstrap dependency. I have used the prepared kotlin binary for the timebeing and started working on Updating Gradle to latest version which is 6.4.1. We currently have 4.4.1 in debian archives.
Latest Gradle depends heavily on Kotlin and hence all the build files that were originally in groovy are now build.gradle.kts . After updating to 6.4.1 using git build package, all the patches needed to be modified so as to follow the logic conversion from groovy to kotlin. Some patches like asm7 patch, CVE fixes, etc were dropped because they are already included upstream. Some patches had changes specific to groovy and were no longer required. They have been removed. The remaining patches have been edited to follow groovy to kotlin conversions. This required quite a lot of digging into older commits to understand the patches and a lot of reading was also needed to understand and convert patches to kotlin.
As of now, all the patches have been fixed and the package builds correctly using source (i.e a debuild -S completes successfully) with some minor lintian warnings. I have uploaded all the work done so far on salsa (https://salsa.debian.org/theloudspeaker-guest/gradle).
The binary build fails as the rules file needs some work. There are a few sections that are not required like simlinks to build Gradle 4.4.1 from Gradle 3 and the manual created in pom format, etc. I have patched out them locally but the basic build tasks which was “assemble” in gradle 4.4.1 has been changed to “init” in latest version. I have tried using init task but the build still fails due to some other errors. I am currently trying to debug and fix them. Will include details in the first week’s report.
Coming to the 3rd part ot the project, Android SDK tools, we can start majorly working on it once we have Kotlin and Gradle in archives. There are some parts which can be updated without them and are being seen by Manas Kashyap.
Now that the technical details are sorted, I would like to list the things I have learnt during this period:
* Working of .gradle files and their interlinking in gradle projects.
* Gradle tasks, builds, and build workflow of gradle projects.
* Patches and their working in build environment. Quilt rejects, patch headers.
* Effective use of Git Rebase, Lintian warnings and their meanings, etc.
While working, we have developed good team spirit among us students and we try to help each other whenever anyone of us gets stuck in a task somewhere. And I guess that’s the biggest take away from the community bonding period. It will help us work better together during the upcoming months and beyond.
The journey so far has been very intriguing and full of learning experiences. Very excited for the upcoming weeks. Thanks for reading. Stay safe. See you in the next one!
A blog post regarding community period can also be found here (https://theloudspeaker.home.blog/2020/06/02/community-bonding/).