Usar librería común entre dos proyectos Android

Un problema cuando se tiene dos aplicaciones del mismo proyecto que usan cosas comunes como el : estilo del app, iconos, textos, api rest, pero por ser dirigidas a diferentes roles tienen funcionalidades distintas, algunas soluciones, dirigidas a rehusar código o minimizar repetir trabajo:

  1. Usar flavor para cada tipo de rol y separarlas
  2. Usar proguard para que según una condición no compile algunos módulos
  3. Usar android app bundle para cargar las partes según demanda
  4. Usar librería común por path
  5. Usar aar común
  6. etc..

No son todas las opciones, ni las mejores, solo las que analice, dependiendo del problema alguno puede ser mejor, en mi caso:

  1. Tendría varios flavor y manejar las constantes seria un poco trabajoso, ademas de la demora de compilación por todo el código en una app
  2. Agrega mas tiempo de compilación.
  3. Seria una idea a probar si la app fuera de cero, pero ya esta avanzada y tendría que refactorizarla, lo cual si esta bien estructurada no seria muy complejo pero si trabajoso, pero es también el tiempo de probar nuevamente cada módulo.
  4. Es la que escogí ya que como esta en desarrollo, los cambios que haga en una serán reflejadas en la otra fuente sin tener que reimportar el modulo.
  5. Seria una solución si los recursos comunes ya estaría casi en su versión final o final.

Entonces aplicando la solución 4 se podría hacer así:

Escoger los recursos comunes : rest api, sql, estilos, views, cadenas, traducciones, colores, layouts, constantes de servidor, iconos, raws, librerias comunes, etc.

Mover los recursos comunes en una librería, en mi caso lo llame common

Estructura del proyecto

Luego agregarlo como referencia en build.gradle

apply plugin: 'com.android.application'
.....
dependencies {
    ....
    //LIBRARY COMUN
    implementation project(':common')
}

Luego en los demás proyectos que usen la librería se debe importar por dirección de la carpeta, esto se hace desde el archivo settings.gradle

include ':app',':common'
project(':common').projectDir = new File( '/ruta/a/carpeta/common')

Y en build.gradle, agregarlo igual que en el proyecto original

apply plugin: 'com.android.application'
.....
dependencies {
    ....
    //LIBRARY COMUN
    implementation project(':common')
}

Estilo para la documentación

En cabecera de tema header.php

<head>
	<meta charset="<?php bloginfo( 'charset' ); ?>" />
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
	<link rel="profile" href="http://gmpg.org/xfn/11" />
	<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
	<!--[if lt IE 9]>
	<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
	<![endif]-->
	<?php wp_head(); ?>
	
	
	
	
	
	<?php
$host = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
	if (strpos($host, 'blog.puntoycomalab.com/docs/') === 0 && strlen($host) > strlen('blog.puntoycomalab.com/docs/')) {
		echo '
		
		<style type="text/css">
		/*para que ocupe el doc todo la pantalla*/
		.site {
			background-color: #ffffff;
			/* margin: 80px auto; */
			padding: 0 40px;
			max-width: 100% !important; 
			margin-bottom: 0;
			margin-top: 20px !important; 
		} 
		
		/*Para los que tiene articulos*/
		#post-255 > div > div.article-child.well > h3{
		    margin-top: 0px !important; 
    		margin-bottom: 15px !important; 
		}
		
		
		/*para que muestre las paginas del menu*/
		.site-header {
    text-align: center !important;
    margin-left: 0 !important;
    display: block !important;
    width: 100% !important;
    position: relative !important;
    margin-bottom: 0 !important;
}

.single .site-header-info {
    display: none !important;
}

.main-navigation li {
    display: inline-block !important;
    padding: 5px 10px !important;
    width: auto !important;
}

#masthead .site-navigation {
    border-bottom: 1px solid #eee !important;
    margin-top: 0 !important;
    padding-bottom: 20px !important;
    margin-bottom: 20px !important;
}

#masthead .main-navigation ul {
    margin-left: -10px !important;
}

.main-navigation li {
    display: inline-block !important;
    padding: 5px 10px !important;
    width: auto !important;
}


/*para mostrar el footer centrado*/
.site-content, .site-footer {
    /* float: unset; */
    max-width: 100% !important;
    /* width: 100%; */
}

	</style>';
	}
	
?>
	
	
	
	
</head>

Obtener la query de las migraciones

La opción adicional es “–pretend” ( doble guíon medio), ojo no ejecutará la migración, es para mostrar la query que lanzará

php artisan migrate --pretend

Se obtiene una salida así

vagrant@homestead:~/CheckListLegal$ php artisan migrate --pretend
AddColumnJavierformidToTableChecklist: alter table `CheckList` add `JavierForm_id` int unsigned null
AddColumnJavierformidToTableChecklist: alter table `CheckList` add constraint `checklist_javierform_id_foreign` foreign key (`JavierForm_id`) references `JavierForm` (`id`) on delete cascade