Как использовать jsoniter codegen с Android? - PullRequest
0 голосов
/ 06 мая 2019

Я создаю приложение Android с нуля, которое будет принимать данные JSON из HTTP API, преобразовывать их в POJO, а затем использовать эти POJO во всем приложении для различной логики.

Поскольку я начинаю с нуля, я провел некоторое исследование, чтобы выяснить, что я считаю лучшей библиотекой для обработки этих запросов API. Не стесняйтесь исправлять меня, если я совершенно не прав , потому что у меня было много проблем с поиском более свежей информации, но мне кажется, что Модернизация является одним из более быстрые библиотеки для этого (я знаю, это ссылка 2013 года, но я не нашел много "недавней" информации по этому вопросу)

Заглядывая в Retrofit, он использует «конвертеры» для анализа необработанного текста ответа в POJO. По умолчанию они включают такие вещи, как GSON, Джексон, Моти и некоторые другие вещи, о которых я не слышал. Некоторое дальнейшее прибегание к гуглу предполагает, что jsoniter - самый быстрый вариант (это фактически с 2018 года)

Оглядываясь вокруг, я нашел кого-то, кто создал конвертер для Retrofit, который использует jsoniter (последнее обновление в декабре 2017 года)

В README для этого проекта упоминается, что режим декодирования по умолчанию - DecodingMode.REFLECTION_MODE. Глядя на собственные документы jsoniter по теме , режим отражения звучит так, как будто он самый медленный . Для производительности они рекомендуют либо динамическую генерацию кода, либо статическую генерацию кода. Прочитав документацию по генерации статического кода, они предоставят ссылку на пример для Android

Последняя демонстрация была обновлена ​​в декабре 2017 года, поэтому она не , что старая. Но я не могу заставить код работать в моем собственном проекте. Я скопировал следующее в мой build.gradle файл (из их build.gradle файла):

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.javaCompiler.finalizedBy(jsoniterStaticCodgen)
    }
}

task jsoniterStaticCodgen(type:JavaExec) {
    classpath configurations.getByName(android.sourceSets.main.compileConfigurationName)
    classpath project.buildDir.toString() + '/intermediates/classes/release'
    classpath project.buildDir.toString() + '/intermediates/classes/debug'
    main = 'com.jsoniter.static_codegen.StaticCodegen'
    args 'com.mycompany.myapplication.CodegenConfig'
    workingDir = android.sourceSets.main.java.srcDirs[0].toString()
    standardOutput = System.out
    errorOutput = System.err
}

Затем я попытался нажать кнопку Sync Now в Android Studio и встретил следующую ошибку:

ERROR: Could not get unknown property 'applicationVariants' for object of type com.android.build.gradle.LibraryExtension.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...