微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 JNI 项目上传到 Maven 存储库

如何解决将 JNI 项目上传到 Maven 存储库

我正在尝试使用 this guide 通过 Maven 存储库将我的 Android 库上传到 GitHub 包,但在包含我的项目所依赖的 .so 文件时遇到了问题。

总的来说,库上传得很好,我什至可以在另一端下载。问题是 AAR 文件只包含我的库中的 Java/Kotlin 文件,而不包含来自 JNI 层的其余本机 C 代码

这是我图书馆的 build.gradle 的样子:

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'group.id'
            artifactId 'artifact-id'
            version '1.0'
            artifact("$buildDir/outputs/aar/${getAarName()}-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
                    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") }
            }
        }
    }

    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/some/url")
            credentials {
                username = githubProperties['gpr.usr']
                password = githubProperties['gpr.key']
            }
        }
    }
}

以下是我的目录树或多或少的外观以供参考:

root
   - gradle
   - app
   - library
      - build
      - src
         - androidTest
         - main
            - java (included in AAR)
            - cpp (missing in AAR)
            - res

我不确定我错过了什么。我读过很多问题/答案,说我必须将 maven-publish 插件指向我的 .so 文件,但我还没有想出如何做到这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。