Android Studio ссылается на классы в AAR, опубликованные в локальном репозитории Maven - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема в Android Studio (3.1.2) со ссылками на классы в AAR, опубликованные в моем локальном репозитории maven.

Я успешно опубликовал файл AAR в своем локальном репозитории Maven и включил его в проект, который должен использовать AAR после этой статьи:

https://medium.com/@kuassivi/tip-work-with-third-party-projects-locally-with-gradle-961d6c9efb02

В основном я добавил ссылку на mavenLocal () в проекте верхнего уровня в разделах репозиториев buildscript и всех проектов. Я также добавил ссылку на AAR в сборке приложения (т.е. реализация groupid: artifactid: version). Я не сделал ничего больше, чем это.

Если я выполняю перестройку gradle в Android Studio, все компилируется нормально, но если я редактирую файл, который ссылается на классы в AAR, IDE не может разрешить ссылки.

Когда я нахожу класс (то есть cmd o), среда IDE правильно находит класс в файле classes.jar AAR и декомпилирует его.

Я предполагаю, что это происходит отчасти потому, что он не может получить исходный файл, который я опубликовал вместе с файлом aar, в локальный репозиторий Maven.

Как мне заставить IDE подобрать исходные файлы и правильно сослаться на классы в AAR? Я бы предпочел сделать это с помощью изменения скриптов gradle, а не с помощью мастера IDE, если это возможно.

После более подробного изучения я обнаружил, что использование репозитория maven не имеет значения, поскольку он получает файл AAR из кэша gradle в ~ / .gradle / caches / transforms-1 / files-1.1, а не из maven. локальный репо. Я также могу включить исходные файлы, используя "реализацию com.company:artifact-name:0.8:sources". Здесь есть хорошая информация:

https://www.alonsoruibal.com/my-gradle-tips-and-tricks/

Однако Android Studio по-прежнему не может распознать импорт, и хотя компиляция работает, импорт помечается красным в редакторе. Я думаю, должно быть какая-то магия с gradle, которую мне не хватает.

1 Ответ

0 голосов
/ 02 мая 2018

Я собрал простой пример на github здесь:

https://github.com/jmc420/kotlin_examples

В папке с несколькими проектами есть 2 отдельных проекта, один из которых называется «вложенный», который содержит проект библиотеки Android под названием «multiprojectlibrary», в который входят «вложенные» ссылки через оценку.

«множественный проект» использует плагин maven publish для публикации aar в mavenLocal с помощью команды gradle publishToMavenLocal.

В «независимом» проекте «множественный проект» - это зависимость, которая читается из mavenLocal.

«Вложенный» проект работает надежно.

Использование mavenLocal в «независимом» проекте кажется очень ненадежным. Иногда «независимый» проект правильно использует mavenLocal «множественный проект», но когда вы делаете обновление и публикуете снова, «независимый» проект начинает использовать копию «множественного проекта» в .gradle / caches / transforms-1 / files-1.1.

Кажется, есть 2 проблемы. Одним из них является то, что пункт меню «Новый проект» в Android Studio позволяет только создавать приложения; Вы можете создать библиотеку Android только через «Новый модуль», который помещает эту библиотеку в подпроект приложения. Вариант для создания «Новой библиотеки» решит эту проблему.

Другая проблема заключается в том, что неясно, как взаимодействуют локальное хранилище maven и кеш-хранилище. Похоже, что они вышли из синхронизации, и синхронизация gradle не синхронизирует кэш gradle с репозиторием mavenLocal.

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