Как стать автором
Обновить
287.32
TINKOFF
IT’s Tinkoff — просто о сложном

Android разработка — Gradle JarJar plugin

Время на прочтение 2 мин
Количество просмотров 11K
Разрабатывая наш Мобильный Банк мы однажды столкнулись с такой проблемой.

А именно: при использовании библиотеки GSON для сериализации/десериализации в/из JSON на некоторых устройствах от HTC в рантайме мы получали креш. Причина такого поведения в том, что некоторые устройства от HTC имеют в своей прошивке свою версию GSON, которая более старая чем та которую использовали мы в своих проектах. А андроидовский java class loader при загрузке класса в память предпочитает «системную» версию, вместо версии в проекте.

Кроме того на некоторых устройствах существует аналогичная проблема с OkHttp — тоже довольно популярной библиотекой в мире андроид разработки.

Для решения проблемы необходимо переупаковать GSON (или любую другую библиотеку) с помощью утилиты JarJar. После переупаковки артефакт будет иметь новую структуру пакетов, которую необходимо использовать в директивах импорта в своем проекте. Для этого нужно подключить переупакованный jar к своему проекту вместо исходного.

Нам захотелось автоматизировать эту задачу и в итоге появился Gradle JarJar Plugin, доступный в Maven Central. Плагин позволяет указать jar-библиотеки и правила для переупаковки их с помощью JarJar.



Добавляем плагин в dependencies скрипта:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'ru.tinkoff.gradle:jarjar:1.1.0'
    }
}

Подключаем его в модуле проекта:

apply plugin: 'ru.tinkoff.gradle.jarjar'

Указываем список артефактов для переупаковки:

dependencies {
    // Будет переупаковано с помощью JarJar
    jarJar 'com.google.code.gson:gson:2.3'

    // Результаты работы плагина находятся в build/libs, добавляем их в classpath проекта
    compile fileTree(dir: './build/libs', include: ['*.jar'])
}

Настраиваем:

jarJar {
    // Опциональный параметр - jarJar.jar используемый для переупаковки jar :)
    jarJarDependency 'com.googlecode.jarjar:jarjar:1.3'

    // Список правил
    // первый параметр - имя артефакта, указанного в скоупе jarJar в dependencies проекта
    // второй - правила для JarJar
    rules = ['gson-2.3.jar': 'com.google.gson.** ru.tinkoff.core.gson.@1']
}
Теги:
Хабы:
+12
Комментарии 3
Комментарии Комментарии 3

Публикации

Информация

Сайт
www.tinkoff.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия