Не показывать файл JAR, от которого я зависел - PullRequest
0 голосов
/ 08 октября 2018

У меня есть библиотека AAR, которая зависит от определенного lib.jar.Я добавил его в свой AAR, выполнив:

dependencies {
    implementation files('myexternallibs/lib.jar')
    ...
}

В полученном AAR я все еще могу получить доступ к классам в lib.jar.Основываясь на многих ответах здесь, в SO, ключевое слово implementation должно не допустить этого.Что-нибудь, что я пропустил?

Ответы [ 4 ]

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

Я изменил implementation на compileOnly.Это сработало.

Примечание из документации :

Если вы используете эту конфигурацию, то ваш библиотечный модуль должен включать условие времени выполнения, чтобы проверить, доступна ли зависимостьи затем изящно измените его поведение, чтобы оно могло функционировать, если оно не предоставлено.

Чтобы сделать это, вам необходимо проверить путь к классу следующим образом:

try {
    Class.forName("com.company.ClassName");
}
catch (ClassNotFoundException ex) {
    // class is not available
}
0 голосов
/ 10 октября 2018

обычный implementation должен использоваться вместе с правильно написанной и встроенной библиотекой.

простое добавление кода .jar в качестве модуля Java может быть самым простым -

вЧтобы обеспечить полный контроль над доступными методами.

см. Плагин библиотеки Java .

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

Вы определили API?

См. Пример с сайта gradle: https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation

dependencies {
    api 'commons-httpclient:commons-httpclient:3.1'
    implementation 'org.apache.commons:commons-lang3:3.5'
}
0 голосов
/ 08 октября 2018
Реализация

предотвратит доступ к библиотекам, реализованным lib.jar, а не к этой библиотеке

Например:

Library1
  |-> Class1
  |-> Class2

Library2 (implementation 'Library1')
  |-> Class3 (this library can access Class1 and Class2)

YourProject (implementation 'Library2')
  |-> Main (this library can access Class3, but not Class1 and Class2)
...