2014-12-02 16 views
6

Sto provando a creare un build CI che costruisce una versione di rilascio di un'app per Android e caricare l'apk risultante in un repo sonatype nexus.Gradle Carica l'apk dell'applicazione android su repo (nexus) Maven

Quando eseguo assembleRelease, l'apk è generato, firmato, corre Proguard, e si trova nella build/uscite/apk/app-release.apk

per caricare al nesso, ho usato questo Gradle plugin: https://github.com/chrisbanes/gradle-mvn-push con una differenza, che ho usato POM_PACKAGING = apk

corro: uploadArchives Gradle e funziona bene, lo fa caricare un APK al nesso, ma la sua non lo stesso file come in build/uscite /apk/app-release.apk (diverse date di creazione).

significa che sta facendo tutto ciò che assembleRelease fa o semplicemente archivia la sorgente ma manca alcune delle azioni necessarie necessarie per un'applicazione Android.

il plugin Gradle definisce questi artificats:

artifacts { 
    archives androidSourcesJar 
    archives androidJavadocsJar 
} 

forse dovrei aggiungere un file manufatto per costruire/uscite/apk/app-release.apk?

risposta

0

Pubblichiamo i nostri file APK nel repository Nexus locale utilizzando gradle. Questo è quello che ho trovato. Questo esempio ha dimostrato l'utilizzo di un gusto build "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

Questo "zip" l'"apk" in un file "zip". L'esecuzione di "unzip googlePlay.apk" mostra che c'è un "apk" nell'apk. Cercando di "adb isntall googlePlay.apk" non funziona. –

5

ho provato la soluzione menzionato, ma ho sempre avuto un "file apk non esiste" problema quando Jenkins ha provato a caricare il apk file al nostro repository Nexus. Nella documentazione del plugin gradle il percorso inizia con la cartella "build". (https://docs.gradle.org/current/userguide/artifact_management.html)
Ho provato a iniettare alcune variabili env sul percorso ma jenkins si lamentava sempre "file non trovato". Ho trovato questa soluzione e funziona semplicemente.

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 
} 
Problemi correlati