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'
}
Nie miałem jeszcze tego nie testujemy, ale ponieważ nie ma innego rozwiązania, zaakceptuję twoje. – Bevor