2014-12-02 20 views
6

Próbuję utworzyć kompilację CI, która będzie budować wersję aplikacji na Androida i przesłać wynikową apk do repozytorium nVision maven sonatype.Gradle Prześlij aplikację Android apk to maven repo (nexus)

Kiedy biegnę assembleRelease The apk jest generowany, podpisany, biegnie ProGuard i znajduje się w Build/wyjść/apk/app-release.apk

w celu przesłania do Nexusa, Użyłem tego Gradle wtyczki: https://github.com/chrisbanes/gradle-mvn-push z jedną różnicą, że użyłem POM_PACKAGING = apk

biegnę: Gradle uploadArchives i działa dobrze, to jednak przesłać apk Nexusa, ale to nie jest ten sam plik jak w build/wyjścia /apk/app-release.apk (różne daty utworzenia).

oznacza to, że albo robi to, co się robi, albo archiwizuje tylko źródło, ale brakuje niektórych wymaganych działań wymaganych dla aplikacji na Androida.

plugin Gradle definiuje te artificats:

artifacts { 
    archives androidSourcesJar 
    archives androidJavadocsJar 
} 

może powinienem dodać artefakt plików zbudować/wyjść/apk/app-release.apk?

Odpowiedz

0

Publikujemy nasze pliki APK do naszego lokalnego repozytorium Nexus przy użyciu gradle. Oto, co wymyśliłem. Ten przykład demonstruje użycie smaku "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

Spowoduje to "zip" pliku "apk" w pliku "zip". Uruchomienie "unzip googlePlay.apk" pokazuje, że istnieje "apk" w "apk". Próba "adb isntall googlePlay.apk" nie działa. –

5

Próbowałem wymienionego rozwiązania, ale zawsze miałem „plik apk nie istnieje” problem, gdy Jenkins próbował wgrać plik apk do naszego repozytorium Nexus. W dokumentacji wtyczki gradle ścieżka rozpoczyna się od folderu "kompilacja". (https://docs.gradle.org/current/userguide/artifact_management.html) Próbowałem wprowadzić pewne zmienne env do ścieżki, ale Jenkins zawsze narzekał "nie znaleziono pliku". Wpadłem na to rozwiązanie i po prostu działa.

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 
} 
Powiązane problemy