2014-12-02 85 views
6

我正在尝试创建一个构建Android应用程序发布版本的CI构建,并将结果apk上传到maven sonatype nexus回购。Gradle上传android应用程序apk到maven回购(nexus)

当我运行assembleRelease,生成APK,签约,运行proguard的,它位于在建/输出/ APK/APP-release.apk以上传到关系

,我用这个gradle这个插件: https://github.com/chrisbanes/gradle-mvn-push 有一个区别,那我用POM_PACKAGING = APK

我运行:gradle这个uploadArchives 并能正常工作,但它上传APK的Nexus,但它不是同一个文件中生成/输出/apk/app-release.apk(不同的创建日期)。

这意味着它可以执行任何assembleRelease,或者只是归档源代码,但是会漏掉一些android应用程序需要的操作。

的gradle这个插件定义了这些artificats:

artifacts { 
    archives androidSourcesJar 
    archives androidJavadocsJar 
} 

也许我应该添加一个文件神器打造/输出/ APK/APP-release.apk?

回答

0

我们使用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 
} 
+0

这将在“zip”文件中“zip”“apk”。运行“解压缩googlePlay.apk”显示“apk”中有一个“apk”。试图“adb isntall googlePlay.apk”不起作用。 – 2015-03-04 20:45:51

5

我想提到的解决方案,但我始终有一个“apk文件不存在”时,詹金斯试图将APK文件上传到我们的关系资源库的问题。 在gradle插件的文档中,路径以“build”文件夹开头。 (https://docs.gradle.org/current/userguide/artifact_management.html
我试图向路径注入一些env变量,但詹金斯总是抱怨“找不到文件”。我想出了这个解决方案,它很简单。

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 
}