productFlavors: Kotlin and Java Coexistence
In a recent upgrade of an Android project to port existing Java files to Kotlin, I decided not to take advantage of the “Convert Java to Kotlin” shortcut provided by Android Studio, instead I took the following route:
- Rename MyFile.java to MyFile.orig
- Create MyFile.kt and rewrite the original Java class in Kotlin
and to protect my time investment in the original project, these two steps are repeatedly applied in a separate git branch.
For the first few Java classes, the above recipe works well until at some point I realize that the original Java files are useless in the current branch and building a Java-based APK requires a
git-checkout to switch to the other branch.
But then ...
It dawned on me that Xavier Ducrohet mentioned
productFlavors in one of his presentations at Google IO 2013, and I think this Gradle feature is a best-fit to solve my problem, i.e. placing both Java and Kotlin files of the same class co-exist in one
The following screenshot shows my app’s build.gradle file:
Using these settings, I organize my files intro the following three subdirectories:
- src/main: Java/Kotlin files shared by all the four build variants
- src/kt: Kotlin files for building the ktDebug and ktRelease variants
- src/jv: Java files for building the jvDebug and jvRelease variants
Switching the Build Variant in Android Studio automatically updates the Android Project view and allows me to quickly edit either the Java or Kotlin version of the source files.
I found the following medium posts on using productFlavors, but could not find adequate details to solve my problem.
Recently, I experienced product flavors in Android development and it is fantastics feature. I want to give you some…medium.com