{"id":43662,"date":"2024-07-10T09:22:57","date_gmt":"2024-07-10T07:22:57","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=43662"},"modified":"2024-07-10T09:22:57","modified_gmt":"2024-07-10T07:22:57","slug":"librerias-en-android","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/librerias-en-android\/","title":{"rendered":"Librer\u00edas en Android"},"content":{"rendered":"<p>Cuando desarrollamos software, disfrutamos de una cantidad enorme de recursos disponibles para facilitarnos las tareas de desarrollo. Gracias a estos recursos evitamos la reimplementaci\u00f3n de ciertos elementos, utilizando, por tanto, una de las m\u00e1ximas en desarrollo de software: <strong>la reutilizaci\u00f3n de c\u00f3digo<\/strong>. Esto es lo que se conoce como <strong>librer\u00edas<\/strong>.<\/p>\n<h2><\/h2>\n<h2>Las librer\u00edas en Android<\/h2>\n<p>Hist\u00f3ricamente, las librer\u00edas se han utilizado en la mayor parte de lenguajes modernos, por poner un ejemplo:<\/p>\n<ul>\n<li><strong>C \/ C++:<\/strong> ficheros con extensi\u00f3n .a, .so, dll (dependiendo de si se trataba de librer\u00edas de uso est\u00e1tico &#8211; cargadas en tiempo de compilaci\u00f3n &#8211; o din\u00e1mico &#8211; cargadas en tiempo de ejecuci\u00f3n -).<\/li>\n<li><strong>C# \/ resto de lenguajes del .Net Framework:<\/strong> ficheros con extensi\u00f3n .dll<\/li>\n<li><strong>Java:<\/strong> ficheros con extensi\u00f3n .jar, aunque en Java, todo son ficheros jar, incluidos los \u201cejecutables\u201d.<\/li>\n<\/ul>\n<p>En las librer\u00edas Android, que es el caso que nos compete (y en el que nos vamos a centrar a partir de ahora), hasta hace unos a\u00f1os el c\u00f3digo se desarrollaba en Java, por lo que podr\u00edamos pensar que la distribuci\u00f3n de c\u00f3digo reutilizable en librer\u00edas se realiza en ficheros .jar (podr\u00edan utilizarse, s\u00ed). Pero, a diferencia de los desarrollos en Java para desktop, o incluso servicios web,<strong> para Android se utilizan ficheros con extensi\u00f3n .aar<\/strong>, los cuales nos dan unas funcionalidades similares a las que un fichero jar proporciona.<\/p>\n<h2><\/h2>\n<h2>Tipos de distribuci\u00f3n de librer\u00edas en Android<\/h2>\n<p>A la hora de distribuir librer\u00edas para Android, tenemos dos posibilidades que van a afectar notablemente en el sistema de distribuci\u00f3n y actualizaci\u00f3n de nuestras librer\u00edas:<\/p>\n<ul>\n<li><strong>Distribuci\u00f3n local del fichero aar (o incluso jar).<\/strong> Esta opci\u00f3n tiene como ventaja que, si es una librer\u00eda muy espec\u00edfica (por ejemplo, proporcionada por un fabricante) o incluso descatalogada, no correremos el riesgo de que se elimine de repositorios online.<\/li>\n<li><strong>Distribuci\u00f3n de la librer\u00eda (aar) a trav\u00e9s de un sistema de repositorio remoto de librer\u00edas basado en maven<\/strong>. En el mundo Android esta es la opci\u00f3n m\u00e1s com\u00fan, disponiendo adem\u00e1s de varios servicios que nos ofrecen repositorios basados en maven:\n<ul>\n<li>MavenCentral. uno de los principales proveedores de librer\u00edas para el mundo Android, tanto p\u00fablico como privativo, con su sistema nexus (https:\/\/www.sonatype.com\/products\/sonatype-nexus-repository).<\/li>\n<li>Maven Google. En este repositorio se almacenan los distintos recursos de desarrollo publicados por Google (m\u00e1s info sobre c\u00f3mo integrarlo: https:\/\/cloud.google.com\/artifact-registry\/docs?hl=es)<\/li>\n<li>Jcenter. Descatalogado, s\u00f3lo debe utilizarse en desarrollos Android con librer\u00edas que se hayan quedado sin soporte y necesitemos descargarlas desde este repo, es incluso recomendable descargar manualmente el aar e integrarlo de forma local, obviando el uso de jcenter.<\/li>\n<li>Servidor local maven, esta opci\u00f3n implica que somos nosotros los que montamos \/ mantenemos \/ securizamos el servidor de maven.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>En p\u00e1rrafos anteriores, hemos hablado de la posibilidad de distribuir nuestro c\u00f3digo utilizando ficheros jar, o bien ficheros aar. Como comentamos, Android soporta ambos sistemas de empaquetado, aunque se recomienda utilizar el espec\u00edfico aar ya que, entre otras \u201cventajas\u201d, nos ofrece acceso a diversas apis del sistema operativo. Por ejemplo, por indicar uno muy evidente, la gesti\u00f3n de permisos.<\/p>\n<p>Imaginemos un ejemplo en el que desarrollamos una librer\u00eda de componentes en la cual, entre otras funcionalidades, creamos un elemento visual que dispone de un campo de texto y un bot\u00f3n para acceder a un mapa. En este caso, en el preciso instante en el que pulsemos el bot\u00f3n, acceder\u00edamos a comprobar los permisos de ubicaci\u00f3n y, en caso de no disponer de ellos, solicitarlos.<\/p>\n<h2><\/h2>\n<h2><strong>Conclusi\u00f3n<\/strong><\/h2>\n<p>Existen multitud de tutoriales en los que, paso a paso, se nos muestra c\u00f3mo crear una <strong>librer\u00eda en Android<\/strong> Studio, y publicarla en un servicio maven (concretamente en MavenCentral).<\/p>\n<p>Gracias a la creaci\u00f3n de librer\u00edas propias podemos, aparte de contribuir a la comunidad de desarrollo, automatizar, generalizar y eliminar c\u00f3digo innecesario de nuestros proyectos (para qu\u00e9 copiar un componente creado, cuando podemos disponer de una base \u00fanica de c\u00f3digo que nos permitir\u00e1 una mayor agilidad al agregar nueva funcionalidad, o m\u00e1s importante quiz\u00e1, resolver bugs).<\/p>\n<p>Desde hiberus, recomendamos y fomentamos la creaci\u00f3n de librer\u00edas de componentes y\/o utilidades, ya que de un modo u otro se fomenta la creaci\u00f3n de c\u00f3digo m\u00e1s conciso, a la par que optimizamos la posible detecci\u00f3n de errores y posibles ampliaciones de funcionalidad.<\/p>\n<p>&nbsp;<\/p>\n<p>En <a href=\"https:\/\/www.hiberus.com\/\" target=\"_blank\" rel=\"noopener\">hiberus<\/a>\u00a0contamos con un departamento de profesionales dedicado al desarrollo de aplicaciones m\u00f3viles. Ofrecemos soluciones a medida para todo tipo de plataformas:\u00a0<a href=\"https:\/\/www.hiberus.com\/mobile\" target=\"_blank\" rel=\"noopener\">desarrollo Android<\/a>,\u00a0<a href=\"https:\/\/www.hiberus.com\/mobile\" target=\"_blank\" rel=\"noopener\">desarrollo iOS<\/a>, aplicaciones h\u00edbridas,\u00a0<a href=\"https:\/\/www.hiberus.com\/mobile\" target=\"_blank\" rel=\"noopener\">desarrollo multiplataforma<\/a>, aplicaciones web, quioscos digitales, desarrollo de sistemas IoT, desarrollos en Alexa\/Google\u2026 Cont\u00e1ctanos para m\u00e1s informaci\u00f3n.<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de desarrollo de aplicaciones m\u00f3viles?<\/p>\n                        <p>Contacta con nuestro equipo de Mobile<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/43662#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Cuando desarrollamos software, disfrutamos de una cantidad enorme de recursos disponibles para facilitarnos las tareas de desarrollo. Gracias a estos recursos evitamos&#8230;<\/p>\n","protected":false},"author":394,"featured_media":43686,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[234,3],"tags":[30,214],"class_list":{"0":"post-43662","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aplicaciones-moviles","8":"category-negocio-electronico","9":"tag-desarrollo-de-aplicaciones-moviles","10":"tag-mobile"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/43662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/394"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=43662"}],"version-history":[{"count":7,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/43662\/revisions"}],"predecessor-version":[{"id":43688,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/43662\/revisions\/43688"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/43686"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=43662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=43662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=43662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}