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

Я создал библиотеку Android в студии Android, которая имеет некоторые внешние зависимости (например, модификация). Но когда я попытался использовать эту библиотеку в приложении для Android, приложение не включает переходные зависимости (те, которые включены в библиотеку).

Я уже пытался опубликовать библиотеку в Bintray, измените ключевое слово «реализация» в файле app-gradle на «api». Я также попытался установить транзитивное = true в файле gradle моего приложения.

При попытке создать приложение для Android отображается Resource Linking Failed вместо CardView, которое используется в моей библиотеке.


person Mohd Zaid    schedule 18.06.2019    source источник
comment
Прежде всего проверьте jcenter в файле pom, если список зависимостей правильный.   -  person Gabriele Mariotti    schedule 18.06.2019
comment
Там не было файла pom.xml! приведенный ниже ответ решил эту проблему.   -  person Mohd Zaid    schedule 28.06.2019


Ответы (1)


Я столкнулся с той же проблемой при создании библиотеки для Android. Я пытался напрямую загрузить файл .aar из студии Android в bintray. Но, по-видимому, он не включал файл pom.xml. Поэтому я последовал за это руководство по созданию ZIP-файла. Затем создайте новую версию в bintray, а затем вручную загрузите zip-файл, используя параметр UI upload. Также не забудьте проверить параметр explode this Archive при загрузке. Затем вы можете опубликовать библиотеку и использовать ее со всеми ее транзитивными зависимостями. Вот пример кода build.gradle:

def version = 'your.version'
def localReleaseDest = "${buildDir}/release/${version}"
uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = 'your.package.name'
        pom.artifactId = 'yourModuleName'
        pom.version = 'your.version'
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}
task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}

task generateRelease {
    doLast {
        println "Release ${version} can be found at ${localReleaseDest}/"
        println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
    }
}

generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)

поместите этот код вне всех блоков в вашем уровне приложения после изменения его по мере необходимости. Теперь синхронизируйте проект и открытый терминал в студии Android и выполните следующую команду:

./gradlew clean build generateRelease

это создаст файл .zip в вашем каталоге app/build, который вы можете загрузить в bintray, как описано выше.

person Mohd Ahmad    schedule 28.06.2019