en android, libreria

Como publicar librerías android en jitpack.io

En este post se describe como crear y usar una librería android desde github por medio de jitpack, los servicios usados son githhub.com, jitpack.io, si usa otros los pasos en principio son los mismos.

Creamos un nuevo proyecto

el nombre del paquete esta al final como example, ya que se usara para los ejemplos de la librería que se implementara en un modulo

Luego creamos el modulo de la librería

El nombre del modulo es opcional, es así para tener un orden en caso agregue mas módulos,

Una ves implementado el modulo, subirlo a GitHub.
Ya subido crear un nuevo release, haciendo click en “Create a new release”

Click en “choose a tag” y escribir la versión actual

Los dem´ás campos son opcionales, presionar en “Publish release”

Ahora configurar jitpack, ir a https://jitpack.io/

En el buscador colocar el nombre de usuario slash el nombre del repositorio, así

Debe aparecer las versiones, según la versión que se quiere usar, presionar en “Get it”

Esperar que procese

Si se obtiene un icono rojo, revisar el log, presionando en el icono rojo:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/jitpack/build/app/build.gradle' line: 2

* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

En este caso es la versión de Java, para especificarlo en el build, se crea un nuevo archivo en la raiz del repositorio indicando la versión del jdk

Subirlo, generar una nueva versión y presionar en la X al lado de “report” y presionar nuevamente “get it”.

Da error nuevamente, ahora el error indica agregar el plugin de maven

Getting tasks: ./gradlew tasks --all
0m3.000s
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.2
Tasks: 

WARNING:
Gradle 'install' task not found. Please add the 'maven' or 'android-maven' plugin.
See the documentation and examples: https://jitpack.io/docs/

Adding maven plugin
Found android library build file in library/architecture/presentation
Running: ./gradlew clean -Pgroup=com.github.javiersolis -Pversion=0.0.2 install
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.2

> Configure project :
Gradle version Gradle 7.0.2

FAILURE: Build failed with an exception.

* Where:
Script '/script/maven-plugin.gradle' line: 2

* What went wrong:
A problem occurred evaluating script.
> Failed to apply plugin 'com.github.dcendents.android-maven'.
   > Could not create plugin of type 'AndroidMavenPlugin'.
      > Could not generate a decorated class for type AndroidMavenPlugin.
         > org/gradle/api/publication/maven/internal/MavenPomMetaInfoProvider

Agregar classpath classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.1’

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // Add this line

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Y agregar el plugin de maven ‘maven-publish’

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'maven-publish' //ADD THIS LINEA
}
apply plugin: 'kotlin-kapt'


android {

Intentamos nuevamente para la versión 0.0.3, el error ahora es mas mi propia librería, con compose, como no lo usaré en esta versión, solo lo quito de builfeatures.

e: This version (1.0.0-beta07) of the Compose Compiler requires Kotlin version 1.4.32 but you appear to be using Kotlin version 1.5.30 which is not known to be compatible.  Please fix your configuration (or `suppressKotlinVersionCompatibilityCheck` but don't say I didn't warn you!).

Nuevamente con la versi´ón 0.0.4, no se obtuvo errores, sino hasta el final, pero indica que no encontró artefactos

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/7.0.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 8s
121 actionable tasks: 118 executed, 3 up-to-date
Build tool exit code: 0
Looking for artifacts...
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.2
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.2
Looking for pom.xml in build directory and ~/.m2
2022-01-17T08:37:15.540608148Z
Exit code: 0

ERROR: No build artifacts found

Para que encuentre un artefacto, se agrega un task en build del modulo, al final del script

afterEvaluate {
    publishing{
        publications{
            release(MavenPublication){
                from components.release
                groupId = 'com.puntoycomalab'
                artifactId = 'android-architecture-presentation'
                version = '0.0.5'
            }
        }
    }
}

Si todo va bien, debería mostrar un icono verde y mostrar las lineas para agregar la dependencia

Referencia:

Reddit de maven vs jitpack
https://www.reddit.com/r/androiddev/comments/ni5n9g/releasing_open_source_lib_via_jitpack_vs/

que es el comando dig
https://www.hostinger.com/tutorials/how-to-use-the-dig-command-in-linux/

Jitpack no soporta subdominios
https://github.com/jitpack/jitpack.io/issues/3781

Jitpack encola los build al dar en get it y a veces demora horas en compilar
https://github.com/jitpack/jitpack.io/issues/4035

Sobre como crear el registro txt en DNS
https://help.one.com/hc/en-us/articles/360000825478-How-do-I-create-a-TXT-record-
https://www.shorttutorials.com/control-panel/change-txt-records-cpanel.html

Porque usar jitpack
https://www.talentica.com/blogs/publish-your-android-library-on-jitpack-for-better-reachability/

Dominios personalizados a veces demora
https://github.com/jitpack/jitpack.io/issues/3540

Api para comprobar como resuelve un repositorio
https://jitpack.io/api/resolve/com.puntoycomalab.javiersolis/android-architecture-application/1.0.0

archivo para especificar el jdk
https://github.com/kylecorry31/sol/blob/main/jitpack.yml

Alternativa con gitlab y paquetes privados
https://proandroiddev.com/creating-a-private-maven-repository-for-android-libraries-on-gitlab-91137c402777

Comando para publicar de forma local
./gradlew publishReleasePublicationToMavenLocal

Ubicar lugar donde se publican las librerías
%cd $HOME/.m2/repository directory


Escriba un comentario

Comentario