2016-09-07 21 views
7

W Maven proces uwalniania działa bezproblemowo. Ponieważ byłem zmuszony korzystać z Android Studio z Gradle, chcę osiągnąć to samo zachowanie, co w Eclipse i Maven. Znalazłem całkiem dobrą wtyczkę Maven-like release (https://github.com/researchgate/gradle-release), która działa prawie zgodnie z oczekiwaniami, ale nie przesyła apk release, chociaż poprawnie tworzy apk w /app/build/outputs/apk i tag z kodem źródłowym w moim repozytorium SVN. Folder wydania jest nadal pusty. Nie jestem nawet pewien, czy ta wtyczka może to zrobić, ponieważ nie jest ona dobrze udokumentowana, ale myślę, że muszę powiedzieć tej wtyczce, co przesłać i gdzie ją znaleźć. Jest tylko afterReleaseBuild.dependsOn uploadArchives. Co to znaczy, że muszę zastąpić tę metodę uploadArchives lub cokolwiek to oznacza w Gradle? Wydaje się, że jest to coś wbudowanego, ponieważ kompilacja Gradle nie narzeka, jeśli napiszę to w moim skrypcie i uruchomię gradlew release. Oczywiście wtyczka już zna repozytorium i może łączyć się przez ssh, inaczej nie mógłby utworzyć tagu, ale wygląda na to, że nie wie, co przesłać, a foldery wydania pozostają puste. Tymczasem próbowałem rozwiązać to z wieloma innymi próbami Gradle, np. z wtyczką Mavena, ale wtedy napotykam na problemy z certyfikatem SSH bez rozwiązania, przy czym nawet jeśli to działa, nie byłoby to dobre rozwiązanie, ponieważ nie chcę tworzyć plików pom.xml itd. było tylko obejściem.Android Studio, Gradle: Jak automatycznie opublikować release.apk do svn repozytorium?

Celem jest, aby proces zwolnienia automatycznie utworzył folder w folderze wydań repozytorium svn, który ma nazwę taką jak aktualna wersja (tak jak działa już w folderze tagów, np. 1.0.0) i kopiuje wydany plik APK do to, które zostało już przemianowane na myapp-app-1.0.0-release.apk przez Gradle, ponieważ jest to nazwa pakietu w lokalnym folderze wyjściowym.

Oto mój obecny Gradle skrypt, który może wygenerować apk uwalnianiu w folderze wyjściowym, ale nie przesłać go do svn:

apply plugin: 'com.android.application' 
apply plugin: 'net.researchgate.release' 

def keystorePropertiesFile = rootProject.file("/home/myuser/.android/keystore.properties") 
def keystoreProperties = new Properties() 
keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 

android { 
    lintOptions { 
     //TODO remove this or set to true 
     abortOnError false 
    } 

    signingConfigs { 
     myapp_release_config { 
      keyAlias keystoreProperties['keyAlias'] 
      keyPassword keystoreProperties['keyPassword'] 
      storeFile file(keystoreProperties['storeFile']) 
      storePassword keystoreProperties['storePassword'] 
     } 
    } 
    compileSdkVersion 24 
    buildToolsVersion "24.0.1" 

    packagingOptions { 
     exclude 'META-INF/ASL2.0' 
    } 

    defaultConfig { 
     applicationId "com.mydomain.myapp" 
     minSdkVersion 9 
     targetSdkVersion 24 
     versionCode 1 
     versionName '1.0.0' 
     archivesBaseName = "myapp-app-$versionName" 
    } 
    buildTypes { 
     debug { 
      debuggable true 
      zipAlignEnabled false 
     } 
     release { 
      minifyEnabled true 
      proguardFiles 'proguard-rules.pro' 
      signingConfig signingConfigs.myapp_release_config 
      afterReleaseBuild.dependsOn uploadArchives 
     } 
    } 
} 

release { 
    failOnUnversionedFiles = false 

    svn { 
     username = 'myuser' 
     password = 'mypassword' 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.mydomain.myapp:model:1.0' 
    //support-v4 
    compile 'com.android.support:support-core-utils:24.2.0' 
    compile 'com.android.support:support-fragment:24.2.0' 
    //compile 'com.android.support:multidex:1.0.0' 
    //support-design 
    compile 'com.android.support:design:24.2.0' 
    //support-v7 
    compile 'com.android.support:appcompat-v7:24.2.0' 
    //FlowLayout 
    compile 'com.wefika:flowlayout:0.4.1' 
    compile 'javax.validation:validation-api:1.1.0.Final' 
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' 

    testCompile 'junit:junit:4.12' 
    testCompile 'org.hamcrest:hamcrest-all:1.3' 
} 

Odpowiedz

1

Możesz dodać zadanie do build.gradle

jest to zadanie próbki i bash skrypt do publikowania:

task publishit (type: Exec) { 
 
    commandLine './publish.sh', android.defaultConfig.versionName 
 
} 
 
assembleRelease.finalizedBy(publishit)

i umieścić w swojej aplikacji publish.sh ścieżki (i uczynić go wykonywalnym)

#!/bin/bash 
 
    
 
### Settings 
 
svn_path='/path/to/repo/' 
 
svn_user='user' 
 
svn_password='password' 
 
app_prefix='myapp-app-' 
 
app_suffix='-release.apk' 
 
release_name='app-release.apk' 
 
dir='/' 
 

 
current_path=`pwd` 
 
release_path=$current_path$dir$release_name 
 
code_name=$1 
 
app_path=$svn_path$code_name$dir$app_prefix$code_name$app_suffix 
 

 
cd $svn_path 
 
mkdir $code_name 
 
cp $release_path $app_path 
 

 
# check and fix these: 
 
svn add $code_name 
 
svn update 
 
svn commit -m "new version" --username $svn_user --password $svn_passwd > publish_log

Można to zrobić ze składnią Gradle, aby uzyskać więcej informacji czytaj here

+0

Nie miałem jeszcze tego nie testujemy, ale ponieważ nie ma innego rozwiązania, zaakceptuję twoje. – Bevor