Gradle上传android应用程序apk到maven repo(nexus)

时间:2014-12-02 17:03:41

标签: android maven gradle pom.xml nexus

我正在尝试创建一个构建Android应用程序发布版本的CI构建,并将生成的apk上传到maven sonatype nexus repo。

当我运行assembleRelease时,apk生成,签名,运行proguard,位于build / outputs / apk / app-release.apk

为了上传到nexus,我已经使用了这个gradle插件: https://github.com/chrisbanes/gradle-mvn-push 有一点不同,我使用POM_PACKAGING = apk

我运行:gradle uploadArchives 它工作正常,它确实上传了一个apk到nexus,但它与build / outputs / apk / app-release.apk(不同的创建日期)不同。

意味着它要么做任何assembleRelease,要么只是归档源,但是错过了Android应用程序所需的一些必要操作。

gradle插件定义了这些艺术品:

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

也许我应该添加一个文件工件来构建/ outputs / apk / app-release.apk?

2 个答案:

答案 0 :(得分:5)

我尝试了上面提到的解决方案,但我总是有一个" apk文件不存在"当Jenkins试图将apk文件上传到我们的nexus存储库时出现问题。 在gradle插件的文档中,路径以" build"开头。夹。 (https://docs.gradle.org/current/userguide/artifact_management.html
我试图在路径中注入一些env变量,但jenkins总是在抱怨"找不到文件"。我提出了这个解决方案,它只是起作用。

uploadArchives {
repositories {
        mavenDeployer {
            repository(url: "https://repo.domain.com/content/repositories/snapshots") {
                authentication(userName: nexususername, password: nexuspassword)
            }

            pom.project {
                version "0.0.1-SNAPSHOT"
                artifactId "android-artifact"
                name "android-name"
                groupId "com.domain.foo.bar"
            }
        }
    }
}


    // /data/jenkins_work/NAME_OF_THE_BUILD_JOB/artifact/app/build/outputs/apk/app-debug.apk
def apk = file('app/build/outputs/apk/yourapp.apk')

artifacts {
    archives apk
}

答案 1 :(得分:3)

我们使用gradle将APK文件发布到我们的本地Nexus存储库。这就是我提出的。此示例演示了如何使用" googlePlay"建立味道。

// make sure the release builds are made before we try to upload them.    
uploadArchives.dependsOn(getTasksByName("assembleRelease", true))

// create an archive class that known how to handle apk files.
// apk files are just renamed jars.
class Apk extends Jar {
    def String getExtension() {
        return 'apk'
    }
}

// create a task that uses our apk task class.
task googlePlayApk(type: Apk) {
    classifier = 'googlePlay'
    from file("${project.buildDir}/outputs/apk/myApp-googlePlay-release.apk")
}

// add the item to the artifacts
artifacts {
    archives googlePlay
}