Gradle上传Android应用程序APK到Maven仓库(Nexus)

9
我正在尝试创建一个CI构建,用于构建Android应用程序的发布版本,并将生成的apk上传到Maven Sonatype Nexus存储库。运行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:
artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

也许我应该在build/outputs/apk/app-release.apk中添加一个文件构件?
2个回答

6
我尝试了提到的解决方案,但当Jenkins试图上传apk文件到我们的nexus存储库时,我总是遇到“apk文件不存在”的问题。在gradle插件的文档中,路径以“build”文件夹开头。(https://docs.gradle.org/current/userguide/artifact_management.html)我尝试向路径注入一些环境变量,但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
}

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
}

这将在一个“zip”文件中“压缩”“apk”。运行“unzip googlePlay.apk”会显示“apk”中有一个“apk”。尝试“adb install googlePlay.apk”不起作用。 - Jared Burrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接