Проблеми TypeScript у світі React-додатків вiд Iллi Климова на React fwdays | 27 березня
×Закрыть

Java lib -> Android + AVD -> профит?

В общем, т.к. я от этого далёк, нужен совет.

Дано:
Простенькая джава либа с несколькими зависимостями, которая полностью совместима с JDK 1.6 (в смысле, нормально под ним собирается и крутится, а не просто задан таргет).

Нужно:
Получить её работоспособность под Андроид.

Что есть на данный момент после непродолжительных потуг:
1. Перегон либы в AAR на идентичных сорцах с помощью maven Андроид-плагина.
2. Создание в Андроид студии нового проекта, импорт AAR из п.1 и прогон небольшого теста с исп. кода либы на AVD.
3. Ругня на зависимости при вызове некоторых API из зависимостей самой либы. Например, при одном способе аутентификации тест прошёл без ошибок, при другом — наткнулся на зависимость от пакета по работе с xml и умер.

Вопросы:
1. Если я соберу либу как fat вариант (правда, ещё не смотрел, можно ли её так собрать в AAR-варианте), и она полностью заработает в AVD как мне нужно, это значит профит, или всё-таки на реальном девайсе может быть эпик фейл?
2. Как можно облегчить всё это дело, чтобы был профит? Может, с какой-то другой стороны к этому подойти, или есть какие-то факапы и т.д.?

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Похожие топики

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

В общем, самое главное получилось. В новом POM’е выпилил все тестовые зависимости, которые нужны были для обычной Джава либы, сделал fat jar, запустил тест с Андроид студии на девайсе (реальном) — профит: исходники править не нужно, оба сценария прошли успешно. Останется только тесты под Андроид портировать, т.к. есть работа с файловой системой, и всё.

Через Студию подключай как Java Library, AAR не нужен ибо это Android библиотека(библиотека, включающая компоненты Android framework’a). Покрыть сможешь чистым JUnit’oм. Рекомендую подключать библиотеку через git submodule, заимпортив как модуль в Студию, тогда сможешь в одном окне править и библиотеку и cоnsumer проект.

Примерно так я и хочу, чтобы было в итоге: 1) Джава живёт отдельно и тянется через submodule; 2) Для Андроида — только свой тестовый проект и свой pom (т.е., стянули сорсы Джавы, пересобрали под Андроид, прогнали тесты под AVD). Чтобы всё это автоматом крутилось. Или имелось в виду, что собранная без maven Андроид плагина обычная Джава либа нормально заработает на Андроиде и так? Тогда и свой POM не нужен, т.к. пересобирать не надо. Если так, было бы вообще отлично. Хотя, по идее нужна fat библиотека всё-таки, как я предполагаю.

Конечно заработает, «обычная» java библиотека соберется в jar и он подключится в зависимости Андроид проекта. BTW Maven в Андроид мире — чужой, юзается Gradlе.

Ну, изначально думал, что подводных камней будет целый вагон). Оказалось, что всё гораздо проще, и моя либа без каких-либо модификаций спокойно крутится под Андроидом. К этому моменту уже портировал все тесты, которые прошли и на AVD, и на девайсе (для тестового кода пришлось пару зависимостей от API стандартной Джавы всё же пофиксить с помощью сторонних либ). Буду теперь всё это дело в CI двигать.

на реальном девайсе может быть эпик фейл

может, как минимум ваша либа

с несколькими зависимостями

может ссылаться на какие то проперти(заточеные под десктоп, или другие библиотеки) которые дивайсом не определены\или если либа не будет тянуть их по дефолту подразумевая что запущена она под десктопом и только. Например вот так:

 PlatformType buildType = System.getProperty("java.vm.name").equalsIgnoreCase("Dalvik") ? PlatformType.ANDROID : PlatformType.TEST_TOOLS;

    enum PlatformType {
        ANDROID,
        TEST_TOOLS
    }
при параметре тест тул моя библиотека обращается к /dev/. что в андроиде впринципе возможно, но вот пермишина на чтение\запись нету, потому будет креш, и не совсем очевиден.
может ссылаться на какие то проперти(заточеные под десктоп, или другие библиотеки)

Такие проблемы вроде бы отсутствуют — либа просто для интеграции web API. Насчёт зависимостей: так fat библиотека поможет в этом случае?

Подписаться на комментарии