Una aplicación Android de servicio de autocompletado avanzada diseñada para pruebas y experimentación, con soporte especializado para bancos chilenos y detección inteligente de sitios web.
- Características Principales
- Arquitectura del Sistema
- Compatibilidad Bancaria
- Detección de Sitios Web
- Instalación y Configuración
- Uso de la Aplicación
- Estructura del Proyecto
- Tecnologías Utilizadas
- Desarrollo y Testing
- Contribución
- Detección automática de campos de usuario y contraseña
- Soporte para múltiples tipos de campos (email, teléfono, nombre)
- Datasets personalizados según el tipo de sitio web
- Compatibilidad con navegadores Chrome, Firefox y otros
- Soporte completo para bancos chilenos: BancoEstado, Santander, BCI, Banco de Chile, CorpBanca, Banco Falabella
- Detección automática de campos RUT y clave bancaria
- Manejo especializado de overlays y modales bancarios
- Datasets con formato chileno (RUT + clave)
- Detección por dominio web: Prioriza URLs reales cuando están disponibles
- Sistema de firmas de página: Fallback robusto para sitios sin URL detectable
- Títulos inteligentes: Extracción mejorada de nombres de sitios web
- Compatibilidad universal: Funciona en cualquier aplicación o navegador
- Base de datos Room para almacenamiento seguro
- Credenciales específicas por dominio/sitio
- Actualización automática de contraseñas
- Interfaz de gestión de credenciales guardadas
MyAutofillService/
├── 🔧 service/
│ ├── MyAutofillService.kt # Servicio principal de autocompletado
│ └── WebSiteManager.kt # Gestión de identificación de sitios
├── 🏦 compatibility/
│ └── BankCompatibilityManager.kt # Sistema de compatibilidad bancaria
├── 🔍 utils/
│ ├── PageIdentifier.kt # Identificación híbrida de páginas
│ └── UrlUtils.kt # Extracción y validación de URLs
├── 💾 data/
│ ├── Credential.kt # Modelo de datos de credenciales
│ ├── WebSite.kt # Modelo de datos de sitios web
│ └── CredentialDatabase.kt # Base de datos Room
└── 🎨 ui/
└── MainActivity.kt # Interfaz de gestión
- Detección de Campos → Análisis de estructura de la aplicación
- Identificación de Sitio → Sistema híbrido (URL + firma de página)
- Compatibilidad Bancaria → Aplicación de reglas específicas si es necesario
- Búsqueda de Credenciales → Consulta en base de datos local
- Presentación de Datasets → Muestra opciones de autocompletado
- Guardado de Credenciales → Almacenamiento seguro con SaveInfo
| Banco | Dominio | Características Especiales |
|---|---|---|
| 🏛️ BancoEstado | bancoestado.cl |
Detección de RUT, manejo de overlays |
| 🏛️ Santander | santander.cl |
Campos especializados, modal de login |
| 🏛️ BCI | bci.cl |
Compatibilidad con sistema de claves |
| 🏛️ Banco de Chile | bancodechile.cl |
Soporte para RUT y clave |
| 🏛️ CorpBanca | corpbanca.cl |
Manejo de campos dinámicos |
| 🏛️ Banco Falabella | bancofalabella.cl |
Detección de formularios complejos |
// Ejemplo de configuración bancaria
BankConfig(
domain = "bancoestado.cl",
name = "BancoEstado",
usernameFieldNames = listOf("rut", "usuario", "username"),
passwordFieldNames = listOf("pass", "password", "clave"),
usernameHints = listOf("off", "username", "rut"),
passwordHints = listOf("new-password", "current-password", "password"),
hasOverlay = true,
requiresSpecialHandling = true
)- Transformación de hints:
"off"→"username","new-password"→"password" - Datasets específicos: RUTs chilenos en lugar de emails genéricos
- Extracción especializada: Manejo de campos con nombres no estándar
- Títulos mejorados: Nombres descriptivos para bancos
// Extracción directa del WebDomain
val webDomain = extractWebDomainFromStructure(structure)
if (webDomain != null) {
return PageInfo(
url = "https://$webDomain",
domain = webDomain,
pageId = webDomain,
title = createFriendlyTitleFromDomain(webDomain)
)
}// Creación de firma única basada en elementos estables
val pageSignature = createPageSignature(structure)
val pageId = "page_${hashString(pageSignature)}"- Títulos basados en dominio:
github.com→ "GitHub" - Títulos HTML: Elementos
<title>,<h1>,<h2>,<h3> - Meta títulos:
og:title,twitter:title,application-name - Títulos de navegación: Toolbars, headers, navbars
- Filtrado inteligente: Exclusión de texto genérico y valores de entrada
// Ejemplos de reconocimiento automático
when {
domain.contains("github") -> "GitHub"
domain.contains("google") -> "Google"
domain.contains("netflix") -> "Netflix"
domain.contains("herokuapp") -> extractHerokuAppName(domain)
// ... más de 30 sitios reconocidos
}- Android 8.0 (API 26) o superior
- Permisos de accesibilidad para el servicio de autocompletado
- Clonar el repositorio
git clone https://github.com/tu-usuario/MyAutofillService.git
cd MyAutofillService- Compilar la aplicación
./gradlew assembleDebug- Instalar en dispositivo
adb install app/build/outputs/apk/debug/app-debug.apk- Configurar el servicio
- Ir a Configuración → Sistema → Idiomas e introducción
- Seleccionar Servicio de autocompletado
- Elegir My Autofill Service
// Habilitar logs de debugging
private const val DEBUG_MODE = true
// Configurar base de datos
@Database(
entities = [Credential::class, WebSite::class],
version = 1,
exportSchema = false
)- Abre cualquier aplicación con campos de login
- El servicio detecta automáticamente los campos
- Muestra sugerencias de credenciales guardadas
- Selecciona una opción para autocompletar
- Completa manualmente los campos de login
- Aparece el diálogo "Save username and password?"
- Confirma para guardar las credenciales
- Se almacenan de forma segura en la base de datos local
- Abre la aplicación My Autofill Service
- Ve todas las credenciales guardadas
- Edita o elimina credenciales existentes
- Organiza por sitios web y dominios
Sitio: chanceschile.online
Datasets mostrados:
├── 📧 Usuario de prueba 1 (usuario1@ejemplo.com)
└── 📧 Usuario de prueba 2 (usuario2@ejemplo.com)
Sitio: www.bancoestado.cl
Datasets mostrados:
├── 🆔 RUT de Ejemplo 1 (12345678-9)
└── 🆔 RUT de Ejemplo 2 (98765432-1)
app/
├── src/main/
│ ├── java/com/example/myautofillservice/
│ │ ├── 🔧 service/
│ │ │ ├── MyAutofillService.kt # Servicio principal
│ │ │ ├── WebSiteManager.kt # Gestión de sitios
│ │ │ └── WebSiteIdentification.kt # Tipos de identificación
│ │ ├── 🏦 compatibility/
│ │ │ └── BankCompatibilityManager.kt # Compatibilidad bancaria
│ │ ├── 🔍 utils/
│ │ │ ├── PageIdentifier.kt # Identificación de páginas
│ │ │ └── UrlUtils.kt # Utilidades de URL
│ │ ├── 💾 data/
│ │ │ ├── Credential.kt # Modelo de credenciales
│ │ │ ├── WebSite.kt # Modelo de sitios web
│ │ │ ├── CredentialDao.kt # DAO de credenciales
│ │ │ ├── WebSiteDao.kt # DAO de sitios web
│ │ │ └── CredentialDatabase.kt # Base de datos Room
│ │ └── 🎨 ui/
│ │ └── MainActivity.kt # Interfaz principal
│ ├── res/
│ │ ├── layout/ # Layouts de UI
│ │ ├── values/ # Recursos y strings
│ │ └── xml/
│ │ └── autofill_service.xml # Configuración del servicio
│ └── AndroidManifest.xml # Configuración de la app
├── build.gradle.kts # Configuración de Gradle
└── proguard-rules.pro # Reglas de ofuscación
- Kotlin - Lenguaje principal de desarrollo
- Android SDK - Framework de desarrollo móvil
- AutofillService API - API nativa de Android para autocompletado
- Room Database - ORM para SQLite
- Coroutines - Programación asíncrona
- LiveData - Observación de datos reactiva
- MVVM - Patrón Model-View-ViewModel
- Repository Pattern - Abstracción de datos
- Dependency Injection - Gestión de dependencias
- Android Studio - IDE de desarrollo
- Gradle - Sistema de construcción
- ADB - Android Debug Bridge para testing
// Habilitar logs detallados
Log.d(TAG, "🔍 Page identification results:")
Log.d(TAG, "🏦 Applying Chilean bank compatibility")
Log.d(TAG, "✅ SaveInfo configured successfully!")- Habilitar opciones de desarrollador
- Conectar dispositivo via ADB
- Instalar APK de debug
- Monitorear logs en tiempo real:
adb logcat | grep MyAutofillService| Tipo | Sitio | Propósito |
|---|---|---|
| 🧪 Testing | practicetestautomation.com |
Campos estándar |
| 🧪 Demo | the-internet.herokuapp.com |
Formularios básicos |
| 🏦 Banco | www.bancoestado.cl |
Compatibilidad bancaria |
| 🌐 General | chanceschile.online |
Sitio web normal |
# Filtrar logs del servicio
adb logcat | grep "MyAutofillService\|PageIdentifier\|BankCompatibility"
# Ver estructura de campos detectados
adb logcat | grep "Found autofillable field"
# Monitorear guardado de credenciales
adb logcat | grep "Saved new credential"// Agregar nuevo banco
val NUEVO_BANCO = BankConfig(
domain = "nuevobanco.cl",
name = "Nuevo Banco",
usernameFieldNames = listOf("rut", "usuario"),
passwordFieldNames = listOf("clave", "password"),
usernameHints = listOf("off", "username"),
passwordHints = listOf("new-password", "password"),
hasOverlay = true,
requiresSpecialHandling = true
)// Personalizar datos de ejemplo
private fun createCustomDatasets(fields: List<AutofillField>): List<Dataset> {
// Implementación personalizada
}- ✅ Bancos chilenos: 6 bancos principales soportados
- ✅ Sitios web generales: Compatibilidad universal
- ✅ Navegadores: Chrome, Firefox, Edge, Samsung Internet
- ✅ Aplicaciones: Soporte para apps nativas con WebView
- ⚡ Detección de campos: < 100ms promedio
- ⚡ Búsqueda de credenciales: < 50ms promedio
- ⚡ Guardado de datos: < 200ms promedio
- 💾 Uso de memoria: < 50MB en ejecución
- Fork del repositorio
- Crear rama de feature:
git checkout -b feature/nueva-funcionalidad - Commit de cambios:
git commit -m 'Agregar nueva funcionalidad' - Push a la rama:
git push origin feature/nueva-funcionalidad - Crear Pull Request
- 🏦 Más bancos: Agregar soporte para bancos internacionales
- 🌐 Más navegadores: Mejorar compatibilidad con navegadores alternativos
- 🔒 Seguridad: Implementar encriptación de credenciales
- 🎨 UI/UX: Mejorar interfaz de gestión de credenciales
- 🧪 Testing: Agregar tests automatizados
Al reportar problemas, incluye:
- Versión de Android
- Navegador/aplicación utilizada
- Sitio web específico
- Logs relevantes
- Pasos para reproducir
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Android AutofillService API - Framework base
- Room Database - Persistencia de datos
- Kotlin Coroutines - Programación asíncrona
- Comunidad Android - Documentación y ejemplos
Para preguntas, sugerencias o soporte técnico:
- 📧 Email: [mosiah.orellana@digitalstronglocking.com]
- 🐛 Issues: GitHub Issues
- 📖 Wiki: Documentación completa
Desarrollado con ❤️ para la comunidad Android
Última actualización: Julio 2025