В проекте библиотеки Android отсутствуют классы в aar

Я пытаюсь создать библиотеку android, moduleD, которая зависит от другого библиотечного модуля, который, в свою очередь, зависит от двух библиотечных модулей. Вроде бы все работает нормально, но я получаю ClassNotFoundException, когда пытаюсь использовать библиотеку в приложении.

Настраивать

MyLibrary/
 +-- moduleA
      +-- src/main/java/
           +-- com/example/a

 +-- moduleB
      +-- src/main/java/
           +-- com/example/b

 +-- moduleC
      +-- src/main/java/
           +-- com/example/b
           +-- com/example/c
                `-- MyMissingClass.java <-- MISSING

 +-- moduleD
      +-- src/main/java/
           +-- com/example/b

build.gradle (модуль C)

dependencies {
    compile project(':moduleA')
    compile project(':moduleB')
}

build.gradle (модуль D)

dependencies {
    compile project(':moduleC')
}

В моем приложении я вызываю ModuleD, который вызывает Module

Для полноты картины я ссылаюсь на полученные aars локально, но я не думаю, что проблема в этом. Разархивируя class.jar в moduleD, я вижу файлы классов moduleD, но не MyMissingClass.

build.gradle (в отдельном проекте приложения)

repositories {
...
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    compile(name:'moduleB', ext:'aar')
}

не-решение

Транзитивная зависимость[1][2]

[1]: Как включить зависимости в проект Gradle библиотеки Android? [2]: Как отправить библиотеку Android (aar) с удаленными зависимостями (gradle)?

build.gradle (приложение)

dependencies {
    compile(name:'moduleD', ext:'aar') {
        transitive true
    }
}

Это может работать для внешних зависимостей (например, доступных через maven, центральных или локальных), и имеет смысл избегать связывания внешних зависимостей, которые в противном случае можно было бы обновить/понизить независимо друг от друга, чтобы избежать конфликтов или получить исправления. Однако модули A-C являются внутренними для проекта и на данный момент используются только в этой одной библиотеке.

Вопрос

Можно ли создать aar (или jar) для moduleD, который содержит все классы и может фактически использоваться в приложении, учитывая, что проект библиотеки разбит на отдельные модули?


person Enrico    schedule 19.11.2014    source источник
comment
Похоже, что это не так: groups.google.com/d/msg/adt- dev/0ZAP8AVUZVw/tJGV69wo9q4J   -  person speedynomads    schedule 14.03.2017