Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Librería de Android Gradle release JAR

¿Cómo puedo liberar el envase Jar del proyecto android-library ?
He encontrado, classes.jar se encuentra en build/bundles/release/classes.jar y supongo que este es el paquete Jar correcto (contiene archivos *.class ).

¿Hay alguna manera oficial, para liberar la biblioteca como JAR en lugar de AAR?

  • Crear un AAR que depende de varios AAR
  • Paquete Android AAR para la biblioteca nativa
  • Poner permisos a manifiesto del proyecto de la biblioteca .aar de Android
  • Maven se niega a descargar una dependencia empacada desde un repositorio remoto
  • Excluir activos para el tipo de generación de versión
  • ¿Puede una biblioteca JAR de Android depender de una librería AAR de Android?
  • Editar
    Utilizo Gradle para liberar artefactos Maven, y me gustaría liberar JAR junto con el paquete AAR. Así JAR con la firma, md5, manifiesto, …
    Basado en https://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/

     apply plugin: 'maven' apply plugin: 'signing' configurations { archives { extendsFrom configurations.default } } def sonatypeRepositoryUrl if (isReleaseBuild()) { println 'RELEASE BUILD' sonatypeRepositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" } else { println 'DEBUG BUILD' sonatypeRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/" } if(!hasProperty('nexusPassword')) { ext.set('nexusPassword', System.console().readPassword("\n\$ Type in password for Sonatype nexus account " + nexusUsername + ": ")) } if(!signing.hasProperty('password')) { ext.set('signing.password', System.console().readPassword("\n\$ Type in GPG key password: ")) } afterEvaluate { project -> uploadArchives { repositories { mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } pom.artifactId = POM_ARTIFACT_ID repository(url: sonatypeRepositoryUrl) { authentication(userName: nexusUsername, password: nexusPassword) } pom.project { name POM_NAME packaging POM_PACKAGING description POM_DESCRIPTION url POM_URL scm { url POM_SCM_URL connection POM_SCM_CONNECTION developerConnection POM_SCM_DEV_CONNECTION } licenses { license { name POM_LICENCE_NAME url POM_LICENCE_URL distribution POM_LICENCE_DIST } } developers { developer { id "loopj" name "James Smith" } developer { id "smarek" name "Marek Sebera" } } } } } } signing { required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } sign configurations.archives } task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs } task androidJavadocsJar(type: Jar) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs } artifacts { archives androidSourcesJar archives androidJavadocsJar } } 

    utilizando

     task androidJar(type: Jar) { from android.sourceSets.main.java.srcDirs } 

    Paquete de sólo archivos java, no compilado y vinculado a android sdk

  • Cómo implementar google maps búsqueda por dirección en Android?
  • Android N no se compila en la facturación de la aplicación AIDL
  • El anuncio de Admob no se muestra en la vista
  • ¿Cómo eliminar la aplicación de ejemplo del emulador de Android?
  • Diálogo android transparente
  • Cómo utilizar una base de datos existente con una aplicación de Android
  • 3 Solutions collect form web for “Librería de Android Gradle release JAR”

    Aunque no he probado subir los artefactos con un despliegue a Sonatype (o incluso un repo local), esto es lo que logré llegar con unas semanas atrás cuando trataba de abordar el mismo problema.

     android.libraryVariants.all { variant -> def name = variant.buildType.name if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) { return; // Skip debug builds. } def task = project.tasks.create "jar${name.capitalize()}", Jar task.dependsOn variant.javaCompile task.from variant.javaCompile.destinationDir artifacts.add('archives', task); } 

    A continuación, ejecute lo siguiente:

     ./gradlew jarRelease 

    Otra forma de generar un jar desde un proyecto de biblioteca a través de gradle es la siguiente:

    En el build.gradle de su biblioteca:

     def jarName = 'someJarName.jar' task clearJar(type: Delete) { delete "${project.buildDir}/libs/" + jarName } task makeJar(type: Copy) { from("${project.buildDir}/intermediates/bundles/release/") into("${project.buildDir}/libs/") include('classes.jar') rename('classes.jar', jarName) } makeJar.dependsOn(clearJar, build) 

    Lo que estamos haciendo aquí es simplemente copiar las clases.jar generadas por el complemento Android Gradle. Asegúrese de buscar en su directorio de compilación para este archivo y ver si su contenido está en la forma que desee.

    Luego ejecuta la tarea makeJar y el tarro resultante estará en la biblioteca / build / libs / ${jarName} .jar

    El tendrá los archivos de clase de acuerdo con su configuración para su liberación. Si lo ocultas, entonces los archivos del frasco serán ofuscados.

    Sólo porque las respuestas anteriores no estaban ajustando mis necesidades, comparto mi versión complicada para generar un jar con las clases de proyecto y las dependencias de aar / jar.

     // A tricky jar operation, we want to generate a jar files that contains only the required classes used. // Dependencies are in jar and aar, so we need to open the aar to extract the classes and put all at the same level // (aar is a zip that contains classes.jar, the latter is a zip that contains .class files) task jar(type: Jar) { from { List<File> allFiles = new ArrayList<>(); configurations.compile.collect { for (File f : zipTree(it).getFiles()) { if (f.getName().equals("classes.jar")) { allFiles.addAll(zipTree(f).getAt("asFileTrees").get(0).getDir()) } } } allFiles.add(new File('build/intermediates/classes/release')) allFiles // To return the result inside a lambda } archiveName( project.ext.appName + '.jar' ) } 

    Esto NO maneja los tipos / sabores de la estructura pero puede ser adaptado (es apenas aceptable construir en la versión del tipo de la estructura sin sabor).

    Si alguna vez tienes una solución más inteligente o más elegante, ¡comparte!

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.