Aligerar Xiami


La mayoría de dispositivos Android  suelen  venir con unas cuantas aplicaciones preinstaladas, ciertamente algunas de ellas  obligatorias como por ejemplo el propio teléfono  o el servicio de mensajeria. Ademas  los fabricantes que quieren incluir los servicios de Google se comprometen a incluir una serie de aplicaciones «recomendadas » por Google, pero  otras provienen de acuerdos con terceras partes o porque pensaron que serían útiles.

El problema es que algunas de estas aplicaciones preinstaladas podrían no ser de  interés, pero  lo peor  no eso sino que  no siempre se puede desinstalar sin más( de hecho cuando esto sucede, se las denomina bloatware, un término que se usa para nombrar las aplicaciones preinstaladas que hacen el sistema más pesado, sin aportar gran cosa).

Precisamente en este post vamos a centrarnos  en todo el sw que suele añadir Xiami  en sus terminales , sw que no siempre nos resulta de interés sobre todo por el valioso espacio que ocupa en la limitada memoria del terminal

Photo by Tracy Le Blanc on Pexels.com

 

 

En efecto  cualquiera que adquiera un terminal XIaomi es fácil que incluya alguna o todas de  las aplicaciones siguientes:

  • Joyose: servicios de entretenimiento
  • Mi App store : tienda de apliaciones de Xiaomi
  • Mi Cloud : nube de Xiaimi
  • Mi Credit :credito para tienda de Xiaomi
  • Mi Drop :envio de archivos
  • Mi Pay :servicio de pagos
  • Mi Recycle:papelera 
  • Miui Daemon:recolector de estadisticas
  • MiWebView :Ejecución de contenido desde la red
  • MSA:MSA es el servicio instalado de Xiaomi para mostrar anuncios a lo largo de diferentes apps e interfaces gráficas en los smartphones. No es fácil deshabilitarlo, probablemente se necesitan más de un intento para que realmente quitarlo. Además, es importante que esté conectado a interne
  • PAI :PAI son las siglas de Personal Activity Intelligence, que es un nuevo algoritmo que, en vez de darnos pasos, tiempos o distancia, nos proporciona un número único que indica qué tan activos debemos estar para llevar una vida más sana.
  • PartnerBookmarks :Enlaces asociados
  • Xiaomi Service Framework : Sincronizador de servicios de Xiaomi
  • Xiaomi SIM Activate ServiceServicio para activar SIMs
  • etc

 

Puede que no todo este sw le interese ..¿pero se puede eliminar si mas?..Pues  veamos en primer lugar las herramientas que nos pone Android  y después veremos en efecto que existen  otras opciones para eliminar este sw   y recuperar esa cantidad de memoria que tanto necesitamos  

 

 Desinstalación  manual de aplicaciones

Ciertamente  hay aplicaciones que no se pueden desinstalar normalmente ,pues  como comentábamos  no solo porque una aplicación esté preinstalada en su móvil o tablet no quiere decir que sea imposible de desinstalar. En algunos casos, afortunadamente, todavía hay  aplicaciones instaladas de forma tradicional, de modo que si se  pueden desinstalar normalmente.

La forma más fácil de comprobar si es así  es hacer una pulsación prolongada y ver si te aparece la opción de desinstalar (si es así como funciona en tu lanzador).Si no, vaya a Ajustes – Aplicaciones, busque la aplicación en cuestión y mire si dispone del botón Desinstalar en su pantalla de información:si el botón es Desinstalar en vez de Desactivar, puede librarse de la aplicación para siempre, sin más.

Deshabilitación de aplicaciones

Para las aplicaciones preinstaladas que no se pueden desinstalar normalmente (que, desgraciadamente, es lo más común), la mayoría permiten sin entrar en el territorio root es la deshabilitación. Una aplicación deshabilitada sigue estando en el sistema ( y por tanto ocupando espacio en la memoria interna) , pero se  ve en el lanzador, no se abre y ocupa algo menos espacio.

Una aplicación deshabilitada pues  sigue estando físicamente en el sistema y ocupando algo del espacio disponible  ya que es el tamaño del APK incluido en el sistema, sin contar las posteriores actualizaciones y datos, que en algunos casos pueden ser de varios cientos de megas.

Para deshabilitar una aplicación vaya a Ajustes – Aplicaciones, busquea la aplicación que quiere desactivar y pulse el botón Desactivar. Esto, generalmente, implica desinstalar las actualizaciones que se hayan instalado posteriormente. 

 

Usar herramientas a medida para eliminar aplicaciones en su Xiaomi

Deshabilitar aplicaciones no es la forma definitiva de librarse del sw del fabricante, de Google o  de operadora , aunque por lo menos es la solución más sencilla para obtener un resultado aceptable, sin necesidad de hacer root o nada fuera de lo normal.

Si su deseo es aligerar aun mas memoria  y su terminal es Xiami , sin ser root , todavía existe una herramienta que nos va a permitir eliminar tanto el sw que Xiaomi proporciona como el que el propio Google recomienda que quizas  tampoco nos interese ( por ejemplo Google Duo, Google Play movies o Google play music)

Bien la herramienta se llama XiaomiABFastbootTools  y es gratuita  estando disponible en Github en  https://github.com/Szaki/XiaomiADBFastbootTools

Esta a herramienta viene comprimida en un fichero jar pero antes de descargarla  y ejecutarla deberá oratoriamente que cumplir los siguientes  requisitos :

        •  Depuración USB activada en el terminal.
        •  Java instalado en PC con Windows ( a ser posible Java SE Development kit  en version 64 bits).

De la  herramienta Xiaomi ADB Fastboot Tools, algunos pueden pensar que es solo otro instalador ADB Fastboot, pero sin embargo, la función de esta herramienta va  mucho más allá de eso pues de hecho pues  es una utilidad que tiene muchas herramientas  o modulos dentro de un mismo  paquete software
 
En efecto XAF tiene funciones principales de todo lo que pueden hacer las herramientas ADB Fastboot tradicionales, excepto que todas las funciones ahora tienen GUI (interfaz gráfica de usuario) lo cual facilita todos los trabajos para cualquier usuario así que ya no necesitamos memorizar todos los comandos para ejecutar casi cualquier tarea relacionada con sus dispositivos Android Xiaomi.
 
 

Pasos previos: habiltar depuración  e instalar  Java Se Development Kit

 

Para habilitar las opciones de desarrollador en Xiaomi, en todos los modelos y todas las gamas de dispositivos de la popular marca china, tan solo deberemos entrar en Ajustes y dirigirnos a la última opción que nos aparece, una opción que se llama Acerca del Teléfono

Una vez estemos ahí,  tan solo tendremos que clicar las mismas siete veces seguidas aunque sobre la opción que dice Versión de MIUI:

Cómo habilitar las opciones de desarrollador en Xiaomi

Finalmente nos aparecerá el aviso, tal y como os muestro en la captura de aquí abajo, anunciándonos que el tan ansiado menú para desarrolladores se ha habilitado con éxito.

Cómo habilitar las opciones de desarrollador en Xiaomi

Ahora, para acceder a este nuevo menú de desarrolladores desde el que podremos realizar acciones tan interesantes como habilitar la depuración USB, tan solo tendremos que dirigirnos a Ajustes/ Ajustes adicionales  y podremos ver como dentro ahora ya si que nos aparecen estas opciones de desarrollador.

 
Una vez habilitado el modo desarrollador en nuestro terminal Xiaomi ( en caso de no tenerlo )  nos toca instalar la  ultima version de java Se Development kit  adecuado al sistema operativo donde vaya ejecutar la herramienta.
 
 
 
 
 
Nota: es importante tener instalada la ultima version java disponible pues de lo contrario probablemente le dará error al  intentar ejecutar esta herramienta.

 

Ejecución de la jerramienta  XAF

XAF  es la herramienta comentada  que nos ayuda a establecer conexiones ADB y Fastboot y una vez establecido, se podrán seleccionar qué acción desean continuar, así que una vez cumplidos los dos requisitos para ejecutar la herramienta  , descararemos  el jar de  la herramienta XiaomiABFastbootTools    que esta disponible en Github en  https://github.com/Szaki/XiaomiADBFastbootTools

 

Esta a herramienta viene comprimida en un fichero jar , pero si hemos instalado Java Se DEvelopement ,el mismo se encargara de lanzar el entorno simplemente clicando en el fichero jar

Descargado pues  el fichero, conectaremos el terminal con un cable usb a micro-usb a nuestro PC , desbloquearemos el terminal  y haremos clic sobre el fichero XiaomiADBFastbootTools.jar
 
 
En seguida , si hemos seguido los pasos anteriores  deberíamos ver   una ventana con todas las apps  instaladas .
 
 
 
Según  la mayoría de los foros sobre el tema las siguientes aplicaciones deberíamos poder eliminar sin sufrir graves coontratiempos y ahorrando un precioso espacio de memoria :
 
      • Analytics – Analizador de datos
      • App Vault – Bóveda de aplicaciones
      • Backup – Copia de seguridad
      • Browser – Navegador
      • Calculator – Calculadora
      • Calendar – Calendario
      • Cleaner – Limpiador
      • Clock – Reloj
      • Compass – Brújula
      • Downloads – Descargas
      • Facebook – Facebook
      • Feedback – Comentarios
      • FM Radio – Radio
      • Freeform – Pantalla compartida
      • Games – Juegos
      • GBoard – Teclado de Google
      • Google Duo – Videollamadas
      • Google Lens – Lentes de Google
      • Google Play movies – Google Películas
      • Google play music – Google Música
      • Joyose – Servicios de entretenimiento
      • Mail – Correo
      • Mi App store – Tienda de aplicaciones
      • Mi Cloud – Nube
      • Mi Credit – Crédito para tienda Mi
      • Mi Drop – Envío de archivos
      • Mi Pay – Pagos
      • Mi Recycle – Papelera
      • Miui Daemon – Recolector de estadísticas
      • MiWebView – Ejecución de contenido desde la red
      • Mobile Device Information Provider – Proveedor de información de dispositivos móviles
      • MSA – Anuncios
      • News – Noticias
      • Notes – Notas
      • PAI – Instalación de aplicaciones en la primera configuración
      • PartnerBookmarks – Enlaces asociados
      • PartnerNetflixActivation – Activador de Netflix
      • Quick Apps – Lanzador de aplicaciones sin necesidad de instalarlas
      • Quick Ball – Botones de acceso directo
      • SMS Extra – ¿?
      • Translation Service – Servicio de traducción
      • Uniplay Service – Servicio de proyección de juegos
      • VsimCore – Núcleo de sim virtual
      • Xiaomi Service Framework – Sincronizador de servicios de Xiaomi
      • Xiaomi SIM Activate Service – Servicio para activar SIMs
      • Yellow Pages – Identificador de números
      • Youtube – Youtube
Ahora pues  en la pestaña Uninstaller  clicaremos sobre alguna de las apps citadas  que deseamos quitar .
 
 
 
 
OJO:UNA VEZ DESINSTALEMOS   LAS APPS QUE MARQUEMOS, EN LA MAYORIA DE LAS VECES ,   YA NO LAS PODREMOS VOLVER A INSTALAR A MENOS QUE CAMBIAMOS LA ROM 
 
Bien , una vez seleccionadas, si realmente estamos seguros que no las necesitamos  ,  simplemente daremos al botón Unsinstaller
 

 

Bien una vez recibamos la pantalla de  hecho , tan solo necesitaremos reiniciar el terminal  y tendremos nuestro terminal liberado de sw innecesarios
 
 
 
 

Funcionalidades  de XAF

 

 Bien ahora hablemos sobre algunas de sus características clave del sw XAF:

 

Desinstalador: esta característica  que como hemos visto permite a los usuarios eliminar cualquier aplicación integrada. Los teléfonos Xiaomi generalmente vienen con varias aplicaciones predeterminadas que incluyen Mi Store, Mi Calculator, Mi Scanner, Mi Remote, etc.

Esta característica permite a los usuarios desinstalar cualquier aplicación predeterminada. Esas aplicaciones no son bloatware para algunos. Otros pueden considerarlo inútil y, por lo tanto, se convierte en bloatware para ellos.
 

 Camera2:la característica más buscada. Muchos fanáticos de Mi exigen desbloquear el cargador de arranque de su teléfono solo para habilitar la API de Camera2. Esta característica permite a los usuarios habilitar y deshabilitar la API de Camera2, habilitar y deshabilitar EIS (Estabilización electrónica de imagen) y reiniciar en recuperación.

Una vez que se ha habilitado la API Android Camera2, los usuarios pueden instalar cualquier aplicación de cámara con controles manuales, al igual que una DSLR.

 

Explorador de archivos:  esta es la característica más querida. Esto lanza un Explorador de archivos que permite a los usuarios administrar sus archivos almacenados en el almacenamiento del teléfono. Esta característica es muy conveniente porque a veces es crucial copiar y pegar archivos desde y hacia el teléfono.

 Densidad de pantalla: los usuarios ahora pueden ajustar y cambiar el valor de DPI de la pantalla de su teléfono fácilmente. Cuanto mayor sea el DPI, mejor será la pantalla. Cuanto más bajo es, menor es la calidad de la pantalla, pero puede ahorrar batería.

 Propiedades del dispositivo: una vez que se hace clic, el XAF recuperará muchas estadísticas e información sobre su dispositivo.

 Flasher: esta es la última característica de XAF. El software puede flashear casi cualquier cosa que sea flash a través de la conexión ADB-Fastboot. Los usuarios pueden flashear recuperaciones personalizadas, flashear ROM de arranque rápido, etc. Esta función también es capaz de arrancar cualquier imagen.

 Wiper: Bueno, su nombre lo dice todo. Esta característica es necesaria para aquellos que desean borrar los cachés o realizar un restablecimiento de fábrica.

 Desbloqueador / OEM: Esto desbloqueará el cargador de arranque del teléfono en una condición; el teléfono ejecuta Android One (Mi A1 / Mi A2). Esto no funcionará en dispositivos MIUI.

 

MIUI ROM Downloader: esta característica es muy útil. En lugar de navegar solo para descargar la ROM MIUI correcta, esta función busca directamente el enlace a la ROM Fastboot. Los usuarios pueden copiar el enlace o descargar la ROM directamente.

 

Rebooter: reinicia los teléfonos de los usuarios sin esfuerzo sin tocar el botón de encendido.


En la ultima version
 Xiaomi ADB / Fastboot 6.6.1

    •  Se corrigió un error en Windows que rompía el módulo Flasher y se agregó descarga nativa al módulo ROM Downloader (no es necesario el navegador)
    • Complemento Kotlin actualizado a 1.3.50
    • ADB / Fastboot actualizado a 29.0.2
Consulte la página principal para obtener más información sobre las opciones de descarga.



 

Aplicaciones que podemos desinstalar

Ya lo hemos comentado, pero a modo de resumen ,al parecer y según siempre la propia herramienta, todas las aplicaciones que aparecen en la lista se pueden desinstalar sin ningún problema. No obstante, en  un hilo de HTC, uno de los usuarios recomienda desinstalar solo las siguientes  a los que mi querido lector  yo solo he marcado en negrita y cursiva :

        • Analytics
        • App Vault
        • Backup
        • Browser
        • Facebook
        • Games
        • Google Duo
        • Google Play movies
        • Google play music
        • Joyose
        • Mi App store
        • Mi Cloud
        • Mi Credit
        • Mi Drop
        • Mi Pay
        • Mi Recycle
        • Miui Daemon
        • MiWebView
        • MSA
        • Notes
        • PAI
        • PartnerBookmarks
        • Quick Apps
        • Quick Ball
        • SMS Extra
        • Translation Service
        • Uniplay Service
        • VsimCore
        • Yellow Pages
        • Xiaomi Service Framework
        • Xiaomi SIM Activate Service

 

 

Problemas: Atención solo ver  esto cuando ha seguido los pasos anteriores y obtiene el error de can’t find ADB/Fasboot

 
 


Si no le funciona  la herramienta puede  que necesite deshabilitar el uso obligatorio de controladores firmados en Windows, ya que con esto evitaremos problemas de compatibilidad que no permitan instalar correctamente los controladores, lo cual posteriormente pude generar problemas.

En Windows 10 abriremos el menú inicio y daremos clic en la opción Configuración icono de engrane, lo cual abrirá la ventana configuración de Windows en la que daremos clic en la opción Actualización y seguridad que nos abrirá un nuevo menú en el que daremos clic en la opción Recuperación y por último buscaremos del lado derecho el apartado Inicio avanzado y daremos clic en el botón Reiniciar ahora.

Deshabilitar el uso obligatorio de controladores firmados en Windows 8, 8.1 y 10
 

  • Cuando Windows se reinicie tras a ver entrado al modo Inicio avanzado veremos una pantalla azul en la deberemos seleccionar la opción Solucionar problemas.

Deshabilitar el uso obligatorio de controladores firmados en Windows 8, 8.1 y 10

  • En la siguiente pantalla seleccionaremos Opciones avanzadas para posteriormente seleccionar la opción Configuración de inicio.

Deshabilitar el uso obligatorio de controladores firmados en Windows 8, 8.1 y 10

  • Ahora en la nueva pantalla de Configuración de inicio veremos una lista con las opciones que podremos modificar, pero para hacerlo primero tendremos que presionar el botón Reiniciar.

Deshabilitar el uso obligatorio de controladores firmados en Windows 8, 8.1 y 10

  • Por último, una vez que la computadora se haya reiniciado veremos que nuevamente entraremos a la pantalla azul de Configuración de inicio con la lista de opciones que podemos modificar, en nuestro caso deberemos seleccionar la opción 7 Deshabilitar el uso obligatorio de controladores firmados para ello presionaremos la tecla F7 para que la computadora se reinicie de forma normal y así podamos instalar los programas y sus controladores sin ningún problema.

Deshabilitar el uso obligatorio de controladores firmados en Windows 8, 8.1 y 10

Programas
Una vez deshabilitado el uso obligatorio de controladores firmados en Windows debes instalar los programas necesarios que instalan los controladores en windows para la correcta deteccion del telefono.

    • Mi Flash o  en /https://www.xiaomiflash.com/
    • Mi PC Suite
    • Controladores ADB

 

Windows no detecta el teléfono con depuración USB 


Si no puede entrar al modo EDL reiniciando el teléfono por comandos ADB a pesar de a ver activado la depuración USB, muy probablemente se deba a que los controladores no se instalaron correctamente.

Pero antes de empezar asegúrese de que:

    • La depuración USB este activada.
    • La opción Desbloqueo de OEM esta activada.
    • Prueba conectando el cable en un puerto diferente.
    • Utilize otro cable USB.


Si hiciste todos los puntos anteriores y aun así no detecta el teléfono entonces procederemos a verificar si faltan controladores por instalar o si no se instalaron correctamente.

  • Primero abriremos el explorador de archivos teclas Control + Windows y posterior mente daremos clic derecho en Mi equipo o Mi PC y seleccionaremos la opción Administrar si no encuentras la opción simplemente ve al menú inicio o a la barra de tareas y en el buscador escribe Administración de equipos o Administrador de dispositivos.
  • Una vez abierta la herramienta Administración de equipos buscaremos la opción Administrador de dispositivos en la que posteriormente buscaremos la opción Android Phone si aparece la opción como en la imagen entonces todo se instaló de forma correcta.
  • Pero si no aparece la opción Android Phone y aparece Otros dispositivos como en la imagen entonces deberemos instalar los controladores de forma manual.

  • Para ello daremos clic derecho en ADB Interface y en el menú que nos aparece seleccionaremos la opción Actualizar software de controlador lo que abrirá una ventana en la que seleccionaremos la opción Buscar software de controlador en el equipo.
  • Después de seleccionar la opción Buscar software de controlador en el equipo, tendremos que buscar la ruta donde se instalaron los controladores del programa Universal Adb Driver si no cambiaste la ruta de instalación entonces tendría que ser la siguiente: C:\Program Files (x86)\ClockworkMod\Universal Adb Driver

 

 

  • Por último, daremos clic en el botón siguiente para comenzar la instalación cuando termine la instalación volveremos a la opción Administrador de dispositivos para ver que ya aparecerá el teléfono como Android Phone, por lo cual ahora si ya podremos proceder a poner el teléfono en modo EDL para instalar la rom.


Reiniciar controladores

  • En dado caso de que el error no sea la falta de controladores y aparezca correctamente Android Phone y el error sea el de la siguiente imagen entonces tendremos que deshabilitar y habilitar el controlador del puerto para que se reinicie y detecte los controladores recién instalados.
  • Para ello daremos clic derecho sobre los controladores que marque error “triángulo amarillo” y seleccionaremos deshabilitar una vez deshabilitado esperaremos unos segundos y lo habilitaremos de nuevo.
  • Al habilitar nos daremos cuenta que el controlador ya no marca error “triángulo amarillo” ahora solo quedara conectar el teléfono y verificar que lo reconozca como como Android Phone en el Administrador de dispositivos y así podremos proceder a poner el teléfono en modo EDL para instalar la rom
Windows no detecta el teléfono en modo Fastboot 
 

Si no puede entrar al modo EDL reiniciando el teléfono por comandos Fastboot a pesar de a ver entrado al modo Fastboot o no puedes instalar la rom en modo Fastboot «si tienes el bootloader desbloqueado», muy probablemente se deba a que los controladores no se instalaron correctamente.

Pero antes de empezar asegúrate de que:

  • El modo Fastboot este activado.
  • Prueba conectando el cable en un puerto diferente.
  • Utiliza otro cable USB.

Si hizo todos los puntos anteriores y aun así no detecta el teléfono entonces procederemos a verificar si faltan controladores por instalar o si no se instalaron correctamente.

  • Primero abriremos el explorador de archivos teclas Control + Windows y posterior mente daremos clic derecho en Mi equipo o Mi PC y seleccionaremos la opción Administrar si no encuentras la opción simplemente ve al menú inicio o a la barra de tareas y en el buscador escribe Administración de equipos o Administrador de dispositivos.
  • Una vez abierta la herramienta Administración de equipos buscaremos la opción Administrador de dispositivos en la que posteriormente buscaremos la opción Android Phone si aparece la opción como en la imagen entonces todo se instaló de forma correcta.
  • Pero si en lugar de aparezca la opción Android Phone, aparece Kedacom USB Device como en la imagen entonces deberemos instalar los controladores de forma manual.

Como solucionar problemas con controladores para la correcta detección del teléfono

  • Para ello daremos clic derecho en Android Bootloader Interface y en el menú que nos aparece seleccionaremos la opción Actualizar software de controlador lo que abrirá una ventana en la que seleccionaremos la opción Buscar software de controlador en el equipo.

Como solucionar problemas con controladores para la correcta detección del teléfono

  • Después de seleccionar la opción Buscar software de controlador en el equipo, tendremos que seleccionaremos la opción Elegir en una lista de controladores de dispositivos en el equipo para selecciona el controlador a instalar.
Como solucionar problemas con controladores para la correcta detección del teléfono

  • Por último, en la nueva ventana que aparecerá buscaremos y seleccionaremos el controlador Android Bootloader Interface y daremos clic en el botón siguiente para comenzar la instalación cuando termine la instalación volveremos a la opción Administrador de dispositivos para ver que ya aparecerá el teléfono como Android Phone, por lo cual ahora si ya podremos proceder a poner el teléfono en modo EDL o instalar la rom con Mi Flash por Fastboot si es que se tiene desbloqueado el bootloader.
Como solucionar problemas con controladores para la correcta detección del teléfono
 
 
 Mi Flash no detecta correctamente el teléfono en modo EDL 
 
Si el teléfono no es detectado en Mi Flash a pesar de que ya se encuentra en modo EDL, al igual que en el anterior punto el problema es generado por la falta de controladores que no se instalaron, pero en este caso los controladores faltantes son los de Qualcomm.

Pero antes de empezar asegúrate de que:
  • Asegúrate que el teléfono está en modo EDL “bootloader bloqueado”.
  • Asegúrate que el teléfono está en modo Fastboot “bootloader desbloqueado”.
  • Asegúrate que el teléfono sea reconocido por Windows.
  • Prueba conectando el cable en un puerto diferente.
  • Utiliza otro cable USB.

Si hiciste todos los puntos anteriores y aun así no detecta el teléfono entonces procederemos a verificar si faltan controladores por instalar o si no se instalaron correctamente.
  • Primero abriremos el explorador de archivos teclas Control + Windows y posterior mente daremos clic derecho en Mi equipo o Mi PC y seleccionaremos la opción Administrar si no encuentras la opción simplemente ve al menú inicio o a la barra de tareas y en el buscador escribe Administración de equipos o Administrador de dispositivos.
  • Una vez dentro de la opción Administrador de dispositivos deberemos buscar el apartado Puertos (COM Y LPT1) y dentro Qualcomm HS-USB QDLoader 9008 (COM10) si aparecen entonces quiere decir que todo se instaló correctamente y Mi Flash debería detectar el teléfono como COM10 por lo cual ya podríamos instalar la rom.

Como solucionar problemas con controladores para la correcta detección del teléfono

  • Pero si lo que aparece es QHUSB_BULK como en la imagen entonces deberemos instalar los controladores de forma manual.

Como solucionar problemas con controladores para la correcta detección del teléfono

  • Para ello daremos clic derecho en QHUSB_BULK y en el menú que nos aparece seleccionaremos la opción Actualizar software de controlador lo que abrirá una ventana en la que seleccionaremos la opción Buscar software de controlador en el equipo.

Como solucionar problemas con controladores para la correcta detección del teléfono

  • Después de seleccionar la opción Buscar software de controlador en el equipo, tendremos que buscar la ruta donde se instalaron los controladores del programa MI Flash si no cambiaste la ruta de instalación entonces tendría que ser la siguiente: C:\XiaoMi\XiaoMiFlash\Source\ThirdParty\Qualcomm\Driver

Como solucionar problemas con controladores para la correcta detección del teléfono

Por último, daremos clic en el botón siguiente para comenzar la instalación cuando termine la instalación veremos que al revisar en la opción Administrador de dispositivos el teléfono en modo EDL ya aparecerá como Qualcomm HS-USB QDLoader 9008 (COM10), por lo cual ahora si ya podremos proceder a instalar la rom.

Extracion de documentos en Oracle text


Oracle incorpora un tipo de datos llamado BLOB que permite almacenar documentos de cualquier tipo (imágenes, excel, word, access, comprimidos, vídeos, música, etc). En principio admite cualquier tipo de documento y de cualquier tamaño aunque aún sigue manteniendo el tipo de datos LONG RAW que está obsoleto, sustituido por BLOB. Las instrucciones que os mostramos a continuación admiten ambos tipos de datos: BLOB y LOB RAW.

 

Insertar o extraer documentos  desde Visual Basic

Para poder insertar documentos en un campo BLOB de Oracle con Visual Basic necesitaremos una librería (dll) llamada SAFileMgr Module (SAFileMgr.dll), esta librería está disponible de forma gratuita en la web http://www.softartisans.com. Tras descargar este fichero, deberemos copiarlo a la carpeta del sistema (normalmente C:/Windows/System32) y registrarlo con el comando:  regsvr32 C:/Windows/System32/SAFileMgr.dll .  Tras copiar y registrar el fichero SAFileMgr.dll, también necesitaremos disponer de una base de datos Oracle activa

Tras tener la tabla creada con el campo BLOB, procederemos a abrir Visual Basic y a crear un nuevo proyecto para insertar y extraer documentos en Oracle. En la ventana de «Nuevo proyecto» seleccionaremos «EXE estándar» y pulsaremos «Abrir»:Para que la aplicación funcione correctamente deberemos agregar las referencias necesarias. Para ello pulsaremos en el menú «Proyecto » – «Referencias» de Visual Basic:Seleccionaremos la referencia FileMgr 1.1:Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero .dll copiado y registrado anteriormente:C:/Windows/System32/SAFileMgr.dll y seleccionaremos también Microsoft ActiveX Data Objects 2.6 Library: Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero ubicado en: C:/Archivos de programa/Archivos comunes/system/ado/msado26.tlb

 

Ahora veamos el código de cada uno de los tres  botones de un  formulario tipo para lanzar una consulta de inserción o extracción de un documento :

  • Para el botón «Insertar documento«:

Private Sub btInsertarDocumento_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim SQL As String

On Error GoTo cError

‘ Conexión mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos una consulta SQL sobre la tabla  para activar el recordset

SQL = «Select * from » + txtTabla.Text + » where 1=2″

Rs.Open SQL, Conn, 2, 3

‘ Añadimos un nuevo registro con los datos indicados

Rs.AddNew

Rs(txtCampoTitulo.Text).Value = txtDocumentoTitulo.Text

Rs(txtCampoRutaDocumento.Text).Value = txtDocumento.Text

‘ Insertamos el documento en el campo BLOB/RAW

FileMgr.ExportToBlob txtDocumento.Text, Rs(txtCampoBLOB.Text)

Rs.Update

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Documento insertado correctamente en » + «la base de datos: » + vbCrLf + vbCrLf + txtDocumento.Text, vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btEjecutar_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text,  txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario

Rs.Open txtSQL.Text, Conn, 0, 1

txtExtraerTitulo.Text = Rs(txtCampoTitulo.Text)

txtDestino.Text = Rs(txtCampoRutaDocumento.Text)

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Consulta SQL ejecutada correctamente.»,  vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btExtraer_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim continuar As Boolean

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario 

Rs.Open txtSQL.Text, Conn, 0, 1

‘ Comprobamos si existe ya un fichero destino

‘ con el mismo nombre

continuar = False

If Dir(txtDestino.Text) <> «» Then

continuar = MsgBox(«Ya existe un documento » + «con este nombre ¿desea reemplazarlo?», vbYesNo + vbQuestion) = vbYes

Else

continuar = True

End If

‘ Extraemos el documento del primer   registro de la consulta SQL  en el destino especificado por el usuario

If continuar Then

FileMgr.ImportFromBlob Rs(txtCampoBLOB.Text), txtDestino.Text

MsgBox «Fichero extraído correctamente en: » + vbCrLf + vbCrLf +  txtDestino.Text, vbOKOnly + vbInformation

End If

Rs.Close

Conn.Close

Set Conn = Nothing

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

 

Extracción desde java

 

Ahora  veamos  usando el lenguaje   Java un ejemplo de como podemos extraer  documentos almacenados en  CLOB’s   en una base de Datos Oracle Text 9 en Java

Necesitaremos tener instalado el cliente Oracle instalado en la maquina, las credenciales de acceso  ,    asi como referenciar en el proyecto desde el Eclipse las siguientes librerías

 

 

 

Y ahora veamos  un ejemplo de una clase de extracción de campos clob’s

La clase principal es Main , la cual debería seleccionarse al exportar el proyecto desde Eclipse

Se puede ejecutar en local  o crear un pequeño script para invocar el java

En este ejemplo es  obligatorio usar tres argumentos y en este orden  para llamar al programa:

  • nodo= número del nodo a exportar
  • tope = numero de orden donde se quedo la última exportación empezando por cero
  • topefinal= umbral donde termina

 

En el proyecto se han referenciado dos versiones de la MV Java porque puede ocurrir que la MV usada en local ( 1.6 ) sea diferente a la del host  donde se ejecute ( por ejemplo  la 1.4.2_08, razon por la habria que copiar tambien esa version 1.4.2.08  dedseel host  a una ruta local

También se hace referencia al driver de oracle classes12.jar , ruta que también existe en la maquina

 

 

Este proyecto debería exportarse situándose en la raiz del proyecto como un jar sin incluir tanto los ficheros .classspath como el de .project

Antes de compilar debe eliminar manualmente el war existente desde el propio eclipse asi como el log de ejecución (manualmente habría que ubicarse en c:\ users\xxx\workspace\application)

Asimismo por ultimo , al   compilarlo  no debemos incluir el classpath

 

Veamos el código completo;

 

/*
Main.java
*
* Created on 20 de Marzo de 20174, 11:43
*

*/

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import oracle.jdbc.driver.OracleDriver;

/**
* @author CRN
*
* EXTRACTOR DOCUMENTOS
*/

public class Main {

private static int nodo;

private static int tope;

private static int topefinal;

public static void main(final String[] args) {

System.out.println(«Inicializando programa …»);

Connection conn = null;

GestorDeConexiones gc = null;

try{

gc = new GestorDeConexiones(«xxxx», «yyyyyy»); // credenciales de  acceso a la BBDD con el user y pwd de acceso 

conn = gc.getConnection();

// Comprueba si hay argumentos en la linea de comandos

final int nnodo=1;

if(args.length != 0)
//CON ARGUMENTOS

{
for(int counter = 0; counter < args.length; counter++)
{
System.out.println(«Argument index » + counter + «: » + args[counter]);
}

System.out.println(» fin argumentos»);

nodo = Integer.parseInt(args[0]); // primer argumento ( el nodo)

tope = Integer.parseInt(args[1]); //segundo argumento (inicio

topefinal = Integer.parseInt(args[2]); //tercer argumento ( tope)

System.out.println(«Argumento nodo= » + nodo);
System.out.println(«Argumento conteo incial= » + tope);
System.out.println(«Argumento numero de documentos= » + topefinal);

}

else

//SIN ARGUMENTOS

{
System.out.println («No se ha incluido ningún argumento»);
System.exit(0);
}

System.out.println(«NODO» + nodo);
System.out.println(«Valor inicial= » + tope);
System.out.println(«Valor final= » + topefinal);

final String path1 =»d:\»;

final String nfichero= path1+»previa_carga_jd_»+nodo+»tope«+tope+»topefinal_»+ topefinal;

//generacion del fichero de salida

File theDir = new File(nfichero);

if (!theDir.exists())
{
System.out.println(«..creando directorio: » + theDir.getName()); // SI EL DIRECTORIO NO EXISTE ,. SE CREA
boolean result = false;
try{
theDir.mkdir();

result = true;
}
catch(SecurityException se){   //handle it
}
if(result) {
System.out.println(«Directorio creado»);
}
}

//Intentamos cambiar los permisos al directorio creado
System.out.println(«Cambiamos permisos 777 a «+nfichero);
Process theProcess = null;
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ nfichero);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}

//creacion fichero de log

final String log1=path1;

final String nfichero1= log1+»directorio_»+nodo+»tope«+tope+»topefinal_»+ topefinal+».log»;

System.out.println(«Fichero Log de proceso :[» +nfichero1+»]»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);

//generación del fichero de salida

File fichero = new File(nfichero1);

 

if (!fichero.exists())
{

// SI NO EXISTE , SE CREA
System.out.println(«..creando fichero de log: » + fichero.getName());
boolean result = false;
try{
fichero.createNewFile();

result = true;
}
catch(SecurityException se){ //handle it
}
if(result) {
System.out.println(«Fichero creado»);
}
}

//abre fichero de log
File TextFile = new File(nfichero1);
FileWriter TextOut = new FileWriter(TextFile, true);
TextOut.write(«********************************************************************\r\n»);
TextOut.write(«INICIANDO PROCESO DE EXTRACCIÓN DE DOCUMENTOS r\n»);
TextOut.write(«Fichero Log de proceso :[» +nfichero1+»]\r\n»);
TextOut.close();

String path=nfichero +»/»;

System.out.println («RUTA DESTINO FINAL»+ path);

//extraemos los objetos de texto
RecuperadorBD2.RecuperarBD2(conn,path, tope,topefinal,nodo,nfichero1);

}
catch (final SQLException sqle) {
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
}
catch (final IOException ioe){
System.out.println
(«Error de acceso a disco:» + ioe.getMessage());
ioe.printStackTrace();
}

try{
if (gc != null && conn != null)
gc.closeConnection();
}

catch (final SQLException sqle)
{
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
conn = null;
gc = null;
}
System.out.println(» **** Fin extraccion ****»);
}
}

class RecuperadorBD2
{
public static void RecuperarBD2 (final Connection cn, final String path , final int topec, final int topex, final int nodo ,final String path1)
throws SQLException, IOException
{

 

String topex1= String.valueOf(topex);

String topec1= String.valueOf(topec);

String nnodo= String.valueOf(nodo);

int contador=0;
FileOutputStream fos = null;

Statement st = null;
ResultSet rs = null;

 

final String sql=» SELECT «+
«FROM(SELECT to_number (rownum) cuenta,»+
» p.
«+
» FROM «+
» ( «+
«SELECT c.nodo_co_nodo, «+
» c.infi_nu_infi, «+
» c.docu_co_documento, «+
» d.docu_no_documento, «+
» d.docu_no_extension ,»+
» d.docu_nu_version, «+
» d.DOCU_FX_MODIFICACION fecha,»+
» e.doct_do_documento doc «+
» FROM tablametadatos c, «+
» tablaauxiliar d, «+
» tabladocumentos e «+
» WHERE c.nodo_co_nodo = » + nnodo +
» AND c.docu_co_documento =d.docu_co_documento «+
» AND d.docu_co_documento =e.docu_co_documento «+
» AND e.docu_nu_version =d.docu_nu_version «+
» AND c.docu_nu_version =e.docu_nu_version «+
» ) «+
» where (cuenta >»+topec1 + » and cuenta <» +topex1 +» )»;

 

//abre fichero de log
File TextFile = new File(path1);
FileWriter TextOut = new FileWriter(TextFile, true);

System.out.println(«»);
System.out.println(«********************************************************************»);
System.out.println(«COMENZANDO PROCESO INICIAL») ;
System.out.println(«sql general=»+sql);
System.out.println(«»);

TextOut.write(«********************************************************************\r\n»);
TextOut.write(«COMENZANDO PROCESO INICIAL\r\n»);
TextOut.write(«sql general=»+sql+»\r\n»);

try
{

st = cn.createStatement();
rs = st.executeQuery(sql);

while (rs.next())
{
++contador;
//para blobs
final String verdocu= rs.getString(«docu_no_documento») ;
System.out.println(«Ndocu =» + verdocu );

final String verinfi =rs.getString(«infi_nu_infi»);
System.out.println(«Infi =» + verinfi );

final String verloc = rs.getString(«docu_co_documento»);
System.out.println(«Cdocc =» + verloc );

final String vernombre= verinfi+»«+verloc + ««+ verdocu;

System.out.println(«Nombre =» + vernombre );

System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
System.out.println(«Numero fichero a extraer =» + contador );

TextOut.write(«Numero fichero a extraer =» + contador+»\r\n»);

final String nfichero =vernombre; //LE PASAMOS COMO ARGUMENTO EL NOMBRE YA MONTADO:INFI_DOCU+LOC

System.out.println(» Fichero a extraer: » +nfichero);
TextOut.write(«Fichero a extraer =» + nfichero+»\r\n»);

final String pathname= path + nfichero ;
System.out.println(» Extrayendo fichero multimedia : «+pathname);
TextOut.write(«Extrayendo fichero multimedia =» + pathname +»\r\n»);

//deberíamos comprobar si existe ese fichero
final File file = new File(pathname);

fos = new FileOutputStream(file);
final Blob bin = rs.getBlob(«doc»);
System.out.println(«…Extrayendo BLOB»);
TextOut.write(«Extrayendo BLOB \r\n»);

final InputStream inStream = bin.getBinaryStream();
final int size = (int)bin.length();
System.out.println(«Tamaño: «+size);
TextOut.write(«Tamaño =» + size+»\r\n»);

final byte[] buffer = new byte[size];
int length = -1;

while ((length = inStream.read(buffer)) != -1)
{
fos.write(buffer, 0, length);
}

if (fos != null)

{

//Intentamos cambiar los permisos al directorio creado
TextOut.write(«Fichero extraido ok \r\n»);

permisos777(pathname);
fos.close();
System.out.println(» Fichero extraido ok.»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
TextOut.write(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n»);

}
}
}
catch (final IOException ioe)
{
throw new IOException(ioe.getMessage());

}
finally
{
if (fos !=null)
{
fos.close();
TextOut.write(«FIN DEL PROCESO \r\n»);
TextOut.close();

}
if (rs !=null)
{
rs.close();

TextOut.close();
}
rs=null;
st=null;

 

 

System.out.println(«Fin RecuperaBD2»);

System.out.println(«FIN PROCESO») ;

TextOut.close();

}
}

 

//funcion para añadir permisos 777 a los ficheros extraidos 
public static void permisos777 (final String pathname)
{

Process theProcess = null;

//intentamos cambiar los permisos del fichero recién creeado
System.out.println(«Cambiamos permisos 777 a «+pathname);
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ pathname);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}
//fin de cambio de permisos

}

}

//clase para gestionar las conexiones con la BBDD

class GestorDeConexiones
{
private final String user;
private final String password;
private Connection conn = null;
private boolean conectado = false;

public GestorDeConexiones(final String usr, final String pwd){
user = usr;
password = pwd;
}

public void closeConnection() throws SQLException{
if (conectado)
conn.close();
}

private void conectar() throws SQLException {

String url;
DriverManager.registerDriver(new OracleDriver());

url = «jdbc:oracle:thin:@x.x.x.x:yyy:cadena»; ///ojo PROD

 

conn = DriverManager.getConnection(url,user, password);
System.out.println(«Conexion correcta»);
conectado = true;

}

public Connection getConnection() throws SQLException
{
if (!conectado)
conectar();
return conn;
}
}