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?
- ANDROID - Enviar una captura de pantalla de java a android via tcp socket
- Mostrar diálogo de la rueda giratoria mientras carga datos en Android
- Java SIP Plugin para Cordova o Phonegap para streaming de audio y video
- ¿Por qué el tipo primitivo corto es significativamente más lento que largo o int?
- Importar código fuente de Android en eclipse
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
- Conversión de OpenCV C ++ a Java para problemas de detección de formas
- Codificación / decodificación de datos entre php / java para android
- Gran cantidad de constantes en Java
- TimerTask vs Thread.sleep vs Handler postDelayed - más preciso para llamar a la función cada N milisegundos?
- Fragmento implementando AsyncTask y Listview en android
- Cómo leer una tarjeta inteligente / tarjeta de microprocesador utilizando un lector de tarjetas inteligentes en android mediante programación
- Crear una anotación Java con comportamiento contextual IDE
- ¿Cómo ejecutar mi código en el hilo específico?
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!
- Desplácese la página cuando el teclado suaves aparece
- Cómo agregar un tarro en bibliotecas externas en el estudio android