Может ли Proguard полностью удалить накладные расходы из неиспользованного Kotlin кода? - PullRequest
0 голосов
/ 16 февраля 2020

Я думал о добавлении некоторых расширений 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[]);
}
...