Cómo utilizar artifactoryPublish para publicar artefactos de liberación y depuración

Tengo proyectos de Android Studio que construyen AARs o APKs en versiones de lanzamiento y depuración. Me gustaría publicar estos en diferentes repositorios en mi servidor Artifactory. Los ejemplos de JFrog no parecen cubrir este caso.

¿Significa esto que se considera la mejor práctica simplemente construir sólo la versión o sólo la versión de depuración y elegir qué y dónde cargar en función del tipo de compilación?

He configurado mi biblioteca android archivo build.gradle que el archivo aar compilado podría ser cargado en repos diferentes, dependiendo del tipo de construcción.
Por ejemplo, desea publicar artifatos de depuración en el repositorio 'libs-debug-local' y liberar artefactos en el repositorio 'libs-release-local'.

//First you should configure all artifacts you want to publish publishing { publications { //Iterate all build types to make specific //artifact for every build type android.buildTypes.all { variant -> //it will create different //publications ('debugAar' and 'releaseAar') "${variant.name}Aar"(MavenPublication) { def manifestParser = new com.android.builder.core.DefaultManifestParser() //Set values from Android manifest file groupId manifestParser.getPackage(android.sourceSets.main.manifest.srcFile) version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) artifactId project.getName() // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") } } } } //After configuring publications you should //create tasks to set correct repo key android.buildTypes.all { variant -> //same publication name as we created above def publicationName = "${variant.name}Aar" //new task name def taskName = "${variant.name}Publication" //in execution time setting publications and repo key, dependent on build type tasks."$taskName" << { artifactoryPublish { doFirst { publications(publicationName) clientConfig.publisher.repoKey = "libs-${variant.name}-local" } } } //make tasks assembleDebug and assembleRelease dependent on our new tasks //it helps to set corrent values for every task tasks."assemble${variant.name.capitalize()}".dependsOn(tasks."$taskName") } //Inside artifactory block just set url and credential, without setting repo key and publications artifactory { contextUrl = 'http://artifactory.cooperok.com:8081/artifactory' publish { repository { username = "username" password = "password" } defaults { publishArtifacts = true // Properties to be attached to the published artifacts. properties = ['qa.level': 'basic', 'dev.team': 'core'] } } } 

Eso es todo. Ahora si ejecuta el comando

 gradle assembleRelaese artifactoryPublish 

Aar se cargará en el repositorio 'libs-release-local'.
Y si usted corrió

 gradle assembleDebug artifactoryPublish 

Se cargará en el repositorio 'libs-debug-local'

Un menos de esta configuración es que siempre debe ejecutar artifactoryPublish tarea con assembleDebug / Release tareas

Para instantáneas + versiones de lanzamiento, puede utilizar sonatype (también conocido como mavencentral). Hice una breve guía pareja de semanas atrás, que puede encontrar de algún uso. Cómo publicar AARs de Android – instantáneas / lanzamiento a Mavencentral

No se puede publicar trabajo con respuesta @cooperok de lo contrario me ayude mucho.

Aquí está mi código:

 apply plugin: 'com.android.library' apply plugin: 'com.jfrog.artifactory' apply plugin: 'maven-publish' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 9 targetSdkVersion 23 versionCode 1 versionName "0.0.1" } publishNonDefault true buildTypes { debug { minifyEnabled false debuggable true } release { minifyEnabled false debuggable false } snapshot { minifyEnabled false debuggable false } } } task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs } artifacts { archives androidSourcesJar archives androidJavadocsJar } publishing { publications { android.buildTypes.all { variant -> "${variant.name}"(MavenPublication) { def manifestParser = new com.android.builder.core.DefaultManifestParser() groupId manifestParser.getPackage(android.sourceSets.main.manifest.srcFile) if("${variant.name}".equalsIgnoreCase("release")){ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) }else if ("${variant.name}".equalsIgnoreCase("debug")){ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile).concat("-${variant.name}".toUpperCase().concat("-SNAPSHOT")) }else{ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile).concat("-${variant.name}".toUpperCase()) } artifactId project.getName() artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") artifact androidJavadocsJar pom.withXml { def dependencies = asNode().appendNode('dependencies') configurations.getByName("_releaseCompile").getResolvedConfiguration().getFirstLevelModuleDependencies().each { def dependency = dependencies.appendNode('dependency') dependency.appendNode('groupId', it.moduleGroup) dependency.appendNode('artifactId', it.moduleName) dependency.appendNode('version', it.moduleVersion) } } } } } } android.buildTypes.all { variant -> model { tasks."generatePomFileFor${variant.name.capitalize()}Publication" { destination = file("$buildDir/publications/${variant.name}/generated-pom.xml") } } def publicationName = "${variant.name}" def taskName = "${variant.name}Publication" task "$taskName"() << { artifactoryPublish { doFirst { tasks."generatePomFileFor${variant.name.capitalize()}Publication".execute() publications(publicationName) clientConfig.publisher.repoKey = "${variant.name}".equalsIgnoreCase("release") ? "libs-release-local" : "libs-snapshot-local" } } } tasks."assemble${variant.name.capitalize()}".dependsOn(tasks."$taskName") } artifactory { contextUrl = 'http://172.16.32.220:8081/artifactory' publish { repository { username = "admin" password = "password" } defaults { publishPom = true publishArtifacts = true properties = ['qa.level': 'basic', 'dev.team': 'core'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' } 

prueba esto:-

 def runTasks = gradle.startParameter.taskNames artifactory { contextUrl = "${artifactory_contextUrl}" publish { repository { if ('assembleRelease' in runTasks) repoKey = "${artifactory_repository_release}" else if ('assembleDebug' in runTasks) repoKey = "${artifactory_repository_debug}" username = "${artifactory_user}" password = "${artifactory_password}" maven = true } defaults { publishArtifacts = true if ('assembleRelease' in runTasks) publications("${artifactory_publication_release}") else if ('assembleDebug' in runTasks) publications("${artifactory_publication_debug}") publishPom = true publishIvy = false } } } 

Donde artifactory_repository_release = libs-release-local y artifactory_repository_debug = libs-debug-local

Artifactory repo en el que desea publicar su biblioteca arr.

  • Instalar jar con dependencias para el repositorio maven (Android gcm-server push library)
  • Importar fanfarronería en el proyecto existente en Android Studio
  • No se pudieron resolver todas las dependencias para la configuración ': classpath'
  • Ionic Gradle failure "No se pudo encontrar com.android.tools.build:gradle:2.2.3"
  • Cómo eliminar correctamente una dependencia transitiva de un repo de maven con gradle
  • Embalaje android facebook sdk como apklib con maven
  • Android Maven No se pudo encontrar la herramienta 'aapt'
  • ¿Cómo automatizar las creaciones de android para la versión lite y de la prima?
  • Evitar que la dependencia de Gradle para la biblioteca de soporte sea reemplazada por una versión más reciente
  • ¿Qué significa "proyecto maven-android no reconocido"?
  • Suprimir advertencia de pelusa en el nivel de vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.