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?

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

  • OutOfMemoryError ¿qué aumentar y cómo?
  • ¿Son los programas escritos en Java para Android más lento que el equivalente escrito en C incluido en Objective-C para iOS?
  • Cuándo utilizar sincronizado en Java
  • ¿Castrará Android la tecnología Jazelle de ARM?
  • Arreglo de ordenadores de Android
  • Android: ¿Cómo leer el archivo en bytes?
  • Dónde colocar los archivos de texto en el directorio de Android
  • Analizar objeto JSON con cadena y sólo valor
  • 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.