2016-09-07 3 views
7

В Maven процесс выпуска работает без проблем. Поскольку я был вынужден использовать Android Studio с Gradle, я хочу добиться такого же поведения, как и с Eclipse и Maven. Я нашел неплохой Maven-подобный плагин выпуска (https://github.com/researchgate/gradle-release), он почти работает так, как ожидалось, но он не загружает apk версии, хотя он правильно создает apk в /app/build/outputs/apk и тег с исходным кодом в моем репозитории SVN. Папка выпуска по-прежнему пуста. Я даже не уверен, может ли этот плагин сделать это, потому что он не очень хорошо документирован, но я думаю, мне нужно сказать этому плагину, что загрузить и где его найти. Существует только afterReleaseBuild.dependsOn uploadArchives. Что это значит, что я должен переопределить этот метод uploadArchives или что это значит в Gradle? Кажется, что-то встроено, потому что Gradle build не жалуется, если я пишу это в своем скрипте и запускаю gradlew release. Очевидно, что плагин уже знает репозиторий и может подключаться через ssh, иначе он не смог бы создать тег, но кажется, что он не знает, что загрузить, папки выпуска остаются пустыми. Тем временем я пытался решить это с помощью множества других попыток Gradle, например. с плагином Maven, но затем я столкнулся с проблемами сертификата SSH без решения, и даже если это сработает, это не будет хорошим решением, потому что я не хочу создавать файлы pom.xml или так далее. были всего лишь обходным решением.Android Studio, Gradle: как автоматически публиковать release.apk в svn-репозиторий?

Цель состоит в том, чтобы процесс выпуска автоматически создавал папку в папке выпусков репозитория svn, которая называется текущей версией (как она уже работает в папке тегов, например 1.0.0), и копирует выпущенный apk в который уже был переименован в myapp-app-1.0.0-release.apk от Gradle, так как это имя пакета в локальной выходной папке.

Вот мой текущий Gradle скрипт, который может генерировать релиз APK в выходной папке, но не загружает его в 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' 
} 

ответ

1

Вы можете добавить задачу в свой build.gradle

Это задача образец и Баш скрипт для публикации:

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

и положить publish.sh в вашем приложении путь (и сделать его исполняемым)

#!/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

Вы можете сделать это с Gradle синтаксиса, для получения более подробной информации читайте here

+0

Я Бесполезный Не тестируйте его, но, поскольку, очевидно, нет другого решения, я соглашусь с вами. – Bevor