Разрабатывая наш Мобильный Банк мы однажды столкнулись с такой
проблемой.
А именно: при использовании библиотеки GSON для сериализации/десериализации в/из JSON на некоторых устройствах от HTC в рантайме мы получали креш. Причина такого поведения в том, что некоторые устройства от HTC имеют в своей прошивке свою версию GSON, которая более старая чем та которую использовали мы в своих проектах. А андроидовский java class loader при загрузке класса в память предпочитает «системную» версию, вместо версии в проекте.
Кроме того на некоторых устройствах существует аналогичная проблема с OkHttp — тоже довольно популярной библиотекой в мире андроид разработки.
Для решения проблемы необходимо переупаковать GSON (или любую другую библиотеку) с помощью утилиты
JarJar. После переупаковки артефакт будет иметь новую структуру пакетов, которую необходимо использовать в директивах импорта в своем проекте. Для этого нужно подключить переупакованный jar к своему проекту вместо исходного.
Нам захотелось автоматизировать эту задачу и в итоге появился
Gradle JarJar Plugin, доступный в
Maven Central. Плагин позволяет указать jar-библиотеки и правила для переупаковки их с помощью JarJar.