Правильное использование «реализации» - PullRequest
0 голосов
/ 02 октября 2018

У меня есть проект со следующей структурой.

+-MyApplication
+-MyLibrayOne
+-MyLibrayTwo

MyApplication - мое основное приложение, тогда как MyLibrayOne и MyLibrayTwo - две библиотеки, импортированные в проект.MyApplication использует некоторые классы MyLibrayOne, а MyLibrayOne использует некоторые классы MyLibrayTwo.

В .gradle файле MyLibrayOne я использовал - compile project(':MyLibrayTwo').Все отлично работаетНо если я заменю compile на implementation, он не сможет импортировать классы из MyLibrayTwo.Выдает error: cannot find symbol class XXXX ошибку.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Использование api вместо implementation решит вашу проблему.Т.е.

dependencies {
    // Enforce the runtime dependencies
    api project(':MyLibrayOne')
    api project(':MyLibrayTwo')
}

Проще говоря, api позволит зависимому проекту видеть все классы зависимых проектов, но implementation не может этого сделать.

0 голосов
/ 02 октября 2018

Сначала я призываю вас взглянуть сюда в Google I / O 2017 .компиляция и реализация не одно и то же.compile предоставляет приложению доступ ко всем зависимостям, к которым у библиотеки есть доступ.Это означает, что если MyLibrayOne зависит от MyLibraryTwo, и вам также необходим доступ к классу из MyLibrarayTwo, вам нужно будет указать gradle для предоставления классов из MyLibrayTwo с помощью директивы compile.Если это не нужно, то реализации достаточно.Я могу только догадываться, что ваш случай - первый, и поэтому вам нужно продолжать использовать компиляцию.Поскольку компиляция теперь устарела, используйте директиву api.Они одинаковые.Кроме того, посмотрите здесь в документации Gradle .

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