如何在 Github 包中添加我的 Android 库的依赖项?
How to Add My Android Library's Dependencies in Github Packages?
我正在构建一个 Android 库(比如,MyLibrary
),它将被添加到我公司的其他应用程序中。该库在 build.gradle
文件中有一些依赖项,如下所示:
dependencies{
implementation 'com.alimuzaffar.lib:pinentryedittext:2.0.6'
implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
// ... other dependencies
}
创建库后,我创建了一个 Github 包,因此我可以将它添加到 AppDemo
s build.gradle
文件中的另一个应用程序(比如 AppDemo
),例如这个:
dependencies{
implementation 'com.mycompany:mylibrary:1.2.3'
// other dependencies
}
问题是我遇到了依赖错误,即 MyLibrary
s 依赖(在这个例子中,pinentryedittext
、play-services-auth-api-phone
,如库的 build.gradle
文件中所示以上)都不见了。
我用谷歌搜索了这个问题并尝试了一些解决方案,例如 Mobbeel fataar gradle plugin 和其他一些类似的插件,但我无法让它们工作。
谁能帮我解决这个问题或给我一个工作样本?任何帮助将不胜感激。
万一有人需要,经过大量谷歌搜索,并尝试了一些 gradle 插件(mobbeel、kezong 等),我终于得出结论,在 github 包中添加依赖项是一个坏主意,因此最终用户应该包括这些依赖项。也就是说,最终用户应该以这种方式添加 gradle 依赖项:
dependencies{
implementation 'com.mycompany:mylibrary:1.2.3' // <-- the actual lirbary
// library dependencies
implementation 'com.alimuzaffar.lib:pinentryedittext:2.0.6'
implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
// other dependencies of end user's app
// ... ... ...
}
- 教程中显示的库文件 (aar) 将不包含传递依赖项。
- 对于 Maven 存储库,Gradle 将使用包含依赖项列表的 pom 文件下载依赖项。
- 在教程中显示的项目中,pom 文件不会生成嵌套的依赖项列表。您要么必须在项目中指定依赖项,要么必须修改代码以生成包含依赖项的 pom 文件。
- 使用下面的代码并更新 Android 库模块中的 build.gradle 文件,以生成包含依赖项信息的 .pom 文件。
publications {
bar(MavenPublication) {
groupId getGroupId()
artifactId getArtificatId()
version getVersionName()
artifact("$buildDir/outputs/aar/${getArtificatId()}-release.aar")
pom.withXml {
final dependenciesNode = asNode().appendNode('dependencies')
ext.addDependency = { Dependency dep, String scope ->
if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
return // ignore invalid dependencies
final dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dep.group)
dependencyNode.appendNode('artifactId', dep.name)
dependencyNode.appendNode('version', dep.version)
dependencyNode.appendNode('scope', scope)
if (!dep.transitive) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
exclusionNode.appendNode('groupId', '*')
exclusionNode.appendNode('artifactId', '*')
} else if (!dep.properties.excludeRules.empty) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
dep.properties.excludeRules.each { ExcludeRule rule ->
exclusionNode.appendNode('groupId', rule.group ?: '*')
exclusionNode.appendNode('artifactId', rule.module ?: '*')
}
}
}
configurations.compile.getDependencies().each { dep -> addDependency(dep, "compile") }
configurations.api.getDependencies().each { dep -> addDependency(dep, "compile") }
configurations.implementation.getDependencies().each { dep -> addDependency(dep, "runtime") }
}
}
}
以上代码引用自Publish an Android library to Maven with aar and source jar
我正在构建一个 Android 库(比如,MyLibrary
),它将被添加到我公司的其他应用程序中。该库在 build.gradle
文件中有一些依赖项,如下所示:
dependencies{
implementation 'com.alimuzaffar.lib:pinentryedittext:2.0.6'
implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
// ... other dependencies
}
创建库后,我创建了一个 Github 包,因此我可以将它添加到 AppDemo
s build.gradle
文件中的另一个应用程序(比如 AppDemo
),例如这个:
dependencies{
implementation 'com.mycompany:mylibrary:1.2.3'
// other dependencies
}
问题是我遇到了依赖错误,即 MyLibrary
s 依赖(在这个例子中,pinentryedittext
、play-services-auth-api-phone
,如库的 build.gradle
文件中所示以上)都不见了。
我用谷歌搜索了这个问题并尝试了一些解决方案,例如 Mobbeel fataar gradle plugin 和其他一些类似的插件,但我无法让它们工作。
谁能帮我解决这个问题或给我一个工作样本?任何帮助将不胜感激。
万一有人需要,经过大量谷歌搜索,并尝试了一些 gradle 插件(mobbeel、kezong 等),我终于得出结论,在 github 包中添加依赖项是一个坏主意,因此最终用户应该包括这些依赖项。也就是说,最终用户应该以这种方式添加 gradle 依赖项:
dependencies{
implementation 'com.mycompany:mylibrary:1.2.3' // <-- the actual lirbary
// library dependencies
implementation 'com.alimuzaffar.lib:pinentryedittext:2.0.6'
implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
// other dependencies of end user's app
// ... ... ...
}
- 教程中显示的库文件 (aar) 将不包含传递依赖项。
- 对于 Maven 存储库,Gradle 将使用包含依赖项列表的 pom 文件下载依赖项。
- 在教程中显示的项目中,pom 文件不会生成嵌套的依赖项列表。您要么必须在项目中指定依赖项,要么必须修改代码以生成包含依赖项的 pom 文件。
- 使用下面的代码并更新 Android 库模块中的 build.gradle 文件,以生成包含依赖项信息的 .pom 文件。
publications {
bar(MavenPublication) {
groupId getGroupId()
artifactId getArtificatId()
version getVersionName()
artifact("$buildDir/outputs/aar/${getArtificatId()}-release.aar")
pom.withXml {
final dependenciesNode = asNode().appendNode('dependencies')
ext.addDependency = { Dependency dep, String scope ->
if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
return // ignore invalid dependencies
final dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dep.group)
dependencyNode.appendNode('artifactId', dep.name)
dependencyNode.appendNode('version', dep.version)
dependencyNode.appendNode('scope', scope)
if (!dep.transitive) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
exclusionNode.appendNode('groupId', '*')
exclusionNode.appendNode('artifactId', '*')
} else if (!dep.properties.excludeRules.empty) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
dep.properties.excludeRules.each { ExcludeRule rule ->
exclusionNode.appendNode('groupId', rule.group ?: '*')
exclusionNode.appendNode('artifactId', rule.module ?: '*')
}
}
}
configurations.compile.getDependencies().each { dep -> addDependency(dep, "compile") }
configurations.api.getDependencies().each { dep -> addDependency(dep, "compile") }
configurations.implementation.getDependencies().each { dep -> addDependency(dep, "runtime") }
}
}
}
以上代码引用自Publish an Android library to Maven with aar and source jar