Почему Gradle включает только классы из моей библиотеки с зависимостью проекта

Я создаю приложение для Android, которое имеет зависимость от пользовательской библиотеки, и Gradle только хочет включить мою собственную библиотеку, когда я использую зависимость от проекта, а не когда я использую зависимость файлов, чтобы включить файл jar библиотеки. Я создаю как свое приложение, так и библиотеку с пакетом API levee 19 SDK.

Раздел с build.gradle из build.gradle :

 dependencies { compile 'com.android.support:appcompat-v7:+' compile files('libs/MyLibrary.jar') } 

Если я использую вышеупомянутый раздел dependencies , ни один из классов в MyLibrary.jar не включен в файл сборки apk, как это проверено путем извлечения его classes.dex и запуска dexdump. Я также проверил, что все классы присутствуют в файле jar, который я использую.

Если я использую следующий раздел dependencies , то все классы в MyLibrary включены в файл apk:

 dependencies { compile 'com.android.support:appcompat-v7:+' compile project(':MyLibrary') } 

Я использую Android Studio 0.4.0, Gradle 1.9, и я думаю, что плагин Gradle 0.7.1.

Что здесь происходит? Мне бы очень хотелось создать мое приложение с интерфейсом API уровня 18 sdk для проверки совместимости, но я не могу получить эту работу, если только я не могу использовать файл jar для своей библиотеки.

Solutions Collecting From Web of "Почему Gradle включает только классы из моей библиотеки с зависимостью проекта"

Ладно, это была моя ошибка. Файл build.gradle моей библиотеки был настроен только для включения исходных файлов в выходной файл jar. Ниже приведен неверный код Gradle и даст вам те же проблемы, что и у меня.

 task jar(type: Jar) { from android.sourceSets.main.java } 

Этот ответ показывает, как исправить создание файла jar. Это уродливо, но, похоже, это работает.

Задача Jar не включает зависимости в последнем артефакте jar.

Из документации Gradle по заданию на баночку:

Задача jar создает файл JAR, содержащий файлы классов и ресурсы проекта.

Он предполагает, что, поскольку вы создаете jar для своего проекта, все зависимости будут предоставляться во время выполнения. В отличие от war , где все зависимости обычно включаются в финальный артефакт.

Если вам нужно создать «жирную банку», которая будет включать в себя зависимости, то посмотрите на определенные плагины, например, gradle-fatjar-plugin .

Это немного длинный, но если вы не используете Android Studio 0.4.0, и вы только что добавили файл jar, попробуйте очистить свой проект и перестроить с нуля. Мы обнаружили эту ошибку: https://code.google.com/p/android/issues/detail?id=63366, где библиотеки не включаются без очистки проекта, хотя эта ошибка относится к зависимости, загруженной из Maven А не локальный файл jar (что может быть или не быть важным отличием). Это было исправлено в Android Studio 0.4.0 (более конкретно, в плагине Gradle 0.7.0).