Я думал о добавлении некоторых расширений Kotlin в библиотеку publi c Java, над которой я работаю. Конечно, было бы проще поместить расширения Kotlin в тот же артефакт, что и базовая библиотека, но я знаю, что Kotlin добавляет около 1,4 МБ к скомпилированным проектам. Чистые Java пользователи не будут счастливы. Я подумал, что, может быть, это не имеет значения, собираются ли пользователи применять Proguard при создании версии выпуска, поэтому я провел некоторые эксперименты с минимальной тестовой библиотекой и Java проектом, который использует библиотеку в качестве зависимости.
Библиотека имеет чистую Java версию 1.0 и версию 2.0, в которую я добавил пару функций расширения Kotlin. Обе версии публикуются в Maven local.
В тестовом проекте есть один класс, который использует несколько функций библиотеки и использует none из Kotlin материала. Я построил его с Proguard и без, и с обеими версиями библиотеки. Вот результаты:
| Library | Proguard | Test project fat jar size |
+-----------+-------------+-----------------------------+
| Pure Java | No | 3.2 KB |
| Pure Java | Yes | 1.6 KB |
| w/Kotlin | No | 1485.9 KB |
| w/Kotlin | Yes | 180.0 KB |
Таким образом, Proguard может избавиться от него. Может быть, все классы stlib удаляются. Так что осталось? Есть ли способ сократить его?
Вот моя конфигурация Proguard:
-libraryjars <java.home>/lib/rt.jar
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}