当前位置: 首页 > 面试题库 >

Android Library Gradle版本JAR

姬浩渺
2023-03-14
问题内容

如何发布android-library项目的Jar包装?
我发现,classes.jar位于下面build/bundles/release/classes.jar,我想这是正确的Jar包(包含*.class文件)。

有什么正式的方法可以将库发布为JAR而不是AAR?

编辑
我使用Gradle发行了Maven构件,并且我想连同AAR软件包一起发行JAR。因此具有签名,md5,清单…
的JAR 基于https://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/

apply plugin: 'maven'
apply plugin: 'signing'

configurations {
    archives {
        extendsFrom configurations.default
    }
}

def sonatypeRepositoryUrl
if (isReleaseBuild()) {
    println 'RELEASE BUILD'
    sonatypeRepositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
    println 'DEBUG BUILD'
    sonatypeRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
}

if(!hasProperty('nexusPassword')) {
    ext.set('nexusPassword', System.console().readPassword("\n\$ Type in password for Sonatype nexus account " + nexusUsername + ": "))
}

if(!signing.hasProperty('password')) {
    ext.set('signing.password', System.console().readPassword("\n\$ Type in GPG key password: "))
}

afterEvaluate { project ->
    uploadArchives {
        repositories {
            mavenDeployer {
                beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

                pom.artifactId = POM_ARTIFACT_ID

                repository(url: sonatypeRepositoryUrl) {
                    authentication(userName: nexusUsername, password: nexusPassword)
                }

                pom.project {
                    name POM_NAME
                    packaging POM_PACKAGING
                    description POM_DESCRIPTION
                    url POM_URL

                    scm {
                        url POM_SCM_URL
                        connection POM_SCM_CONNECTION
                        developerConnection POM_SCM_DEV_CONNECTION
                    }

                    licenses {
                        license {
                            name POM_LICENCE_NAME
                            url POM_LICENCE_URL
                            distribution POM_LICENCE_DIST
                        }
                    }

                    developers {
                        developer {
                            id "loopj"
                            name "James Smith"
                        }
                        developer {
                            id "smarek"
                            name "Marek Sebera"
                        }
                    }
                }
            }
        }
    }

    signing {
        required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
        sign configurations.archives
    }

    task androidJavadocs(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
    }

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

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

    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}

使用

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

将仅打包Java文件,而不打包并针对android sdk链接


问题答案:

虽然我还没有尝试将带有部署的工件上传到Sonatype(甚至本地存储库),但几周前,当我试图解决相同的问题时,我还是想出了这点。

android.libraryVariants.all { variant ->
  def name = variant.buildType.name
  if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
    return; // Skip debug builds.
  }
  def task = project.tasks.create "jar${name.capitalize()}", Jar
  task.dependsOn variant.javaCompile
  task.from variant.javaCompile.destinationDir
  artifacts.add('archives', task);
}

然后运行以下命令:

./gradlew jarRelease


 类似资料:
  • 一个好的 API 设计应该是“版本化”的:变更和新的功能应该在 API 新版本中实现,而不是在一个版本上持续更改。与Web应用程序不同,您可以完全控制客户端和服务器端 代码,APIs 是为了给超出控制的客户端使用。因此, 应该尽可能的保持向后兼容性,如果有一些变化不能向后兼容,你应该在新版本的 API 中采用它同时增加版本号。现有客户端可以继续使用旧版本的 API;新的或升级的客户端可以在新的 A

  • 在 Linxu 系统中,Emacs 的最新版本通常为 emacs-snapshot、emacs-cvs Emacs for Windows 请到这里下载,推荐“patched”版本

  • 在 Windows 平台下,请使用 gvim7ole 版本

  • 2021-06-04 Yearning v2.3.3 优化审核引擎 优化我的工单及审核搜索条件 优化工单详情页信息 优化回滚弹出框UI 修复重新登录密码错误或选择失败后返回登陆页面登录403的问题 流程页面新增搜索功能 修复公告栏admin无法编辑的问题 优化错误拦截逻辑,不重复显示相同错误信息 升级前端库 2021-03-01 Yearning v2.3.2 提升稳定性 优化整体性能,使用更流畅

  • 版本问题,ant design vue1.7.8版本能用less4版本吗? 目前项目为less3版本,按需求升级到less4,报错的内容是ant design vue相关的

  • 问题内容: 如果在我的计算机上编译一个C ++程序,然后在另一个程序(使用旧版软件)上运行它,则会得到:GLIBCXX_3.4.9’ not found`。 实际上,在我的系统上,glibc是较新的版本(我有gcc-libs 4.5.1:libstdc 。so.6.0.14),并 从打印 到 。相反,在另一个系统上,它只能打印到 (我得到libstdc 。so.6.0.8)。 所以我有几个问题:

  • 版本用于组织和计划发布。如果创建了版本并在版本上分配了问题,那么我们可以使用该版本来过滤各种报告中的信息。 可以将问题分配给特定版本,并可以组织该版本中的sprint。 创建版本 第1步:进入到您的项目。 第2步:单击面板左侧显示的版本(Releases)。 第3步:点击Releases链接后,屏幕出现,如下所示: 第4步:单击“创建版本”按钮。 第5步:单击“创建版本”按钮,将出现弹出窗口,询问

  • 我的布局如下,其中包含3个,它们分别对齐、和。 我现在面临的问题是,在android设备版本<6.0的情况下并不能很好地工作。我的意思是,对于版本的设备,会在达到最大宽度时中断文本,但是对于或版本的设备,可能也会更低, <罢工> 这个 故障发生后 文本和显示中的空格 ,它不会中断长文本。 下面是它在android版本中的样子,它小于: 考虑名称是FName LName 联系人:fname... 以