Habilite la entrada de gestos (deslizar) (en Fairphone 2) sin el teclado de Google

Tengo Fairphone 2 con Fairphone Open OS y estoy haciendo un esfuerzo quijotesco para evitar instalar software no libre (como en freedom) en él y optimizar la privacidad.

Quiero entrada de deslizamiento, pero no quiero instalar el teclado de Google, (LatimeImeGoogle.apk) De manera predeterminada, el sistema operativo tiene un teclado AOSP. También instalé AnySoftKeyboard, maravillosamente amigable con el código (que también tiene temas increíbles) y Hacker's Keyboard de F-Droid, pero aunque son útiles para mí, no tienen entrada de deslizamiento.

He leído esta publicación que me hace pensar que tengo que obtener la fuente y compilar el teclado. No sé cómo hacer esto en este momento, pero estoy preparado para aprender. Intenté simplemente reemplazar la biblioteca (haciendo trampa y tomando la biblioteca correcta de Google apk) mencionada en la publicación, y nada cambió (si elimino la biblioteca, el teclado deja de funcionar por completo, así que claramente estoy haciendo un cambio de sistema al reemplazarlo) - simplemente no hace lo que quiero).

Me gustaría alguno de los siguientes, en orden de preferencia

  1. un buen teclado FOSS amigable con el código con entrada de gestos
  2. una forma simple* de habilitar la entrada de gestos para AOSP
  3. confirmación de que, de hecho, necesito construir AOSP yo mismo para hacer lo que quiero
  4. cualquier otro consejo relevante (!)

Obviamente, tengo root :)

*Tengo un sistema Ubuntu para jugar en mi computadora portátil si ayuda...

La instalación del teclado de Google no afectará su privacidad, a menos que habilite las funciones de sincronización.
Debería poder importar eso a Android Studio sin demasiada dificultad.
@AndroidDev ese es el que uso: es genial y tiene hermosos temas en el complemento, pero no hay entrada de gestos
@Zanna - Oh, caramba... se me pasó por completo eso en tu pregunta. Jajaja. En ese caso, sí, probablemente tendrá que construir desde la fuente AOSP.
@AndroidDev Me imagino :( Y AOSP es tan feo ... ¿cuándo tendrá AnySoftKeyboard suspiro de entrada de gestos ?
@Zanna - Oh, oh. Vea este comentario: stackoverflow.com/questions/33127671/…
@AndroidDev Creo que está bien, hay un pequeño cambio que hacer en el código y solo tienes que ingresar a la biblioteca desde el apk del teclado de Google (pensando en ello como un blob). Parece bastante simple, solo soy perezoso y preferiría que hubiera una opción más atractiva.
@Zanna - Pero entonces ya no es FOSS
@AndroidDev cierra como se pone :(

Respuestas (3)

El problema

El teclado AOSP predeterminado no se envía con deslizamiento. No aparecerá en la configuración. La razón fácil (pero incómoda) es que Google consideró que esta función era demasiado "secreta" para publicarla en el código fuente abierto y, por lo tanto, la envían en una biblioteca propietaria.

La solución

Si lo desea, puede enviar esa biblioteca a su dispositivo después de la instalación de la ROM (¡y cada actualización!). Se nombra libjni_latinimegoogle.soy necesita ser puesto en /system/lib.

Para mí (Android 7.1, ARM) esta biblioteca era realmente pequeña (944 kB) y anticuada (actualizada en 2008). (sha256sum 442a2a8bfcb25489564bc9433a916fa4dc0dba9000fe6f6f03f5939b985091e6:)

Guía detallada

  1. Descargue las Google Apps correctas desde http://opengapps.org/ . (aunque supongo que la lib puede ser la misma para algunas versiones, pero bueno… solo descarga la correcta)
  2. Ahora ingrese al ZIP, extráigalo respectivamente. En el Optionaldirectorio encontrarás otro archivo swypelibs-lib-arm.tar.lz. Extraiga eso y obtendrá el libjni_latinimegoogle.soarchivo.
  3. Ahora tenga su teléfono/dispositivo listo en modo de recuperación. Asegúrese de montar la /systempartición de forma que se pueda escribir. En TWRP, debe ir a "Montar" -> (si es necesario, desmarque) "montar / sistema en solo lectura" y luego montarlo marcando la casilla "/ sistema".
  4. Ahora simplemente presione para archivar en su teléfono ( adb push /path/to/libjni_latinimegoogle.so /system/lib) y reinicie.

¡Deberia de funcionar!

supervivencia OTA

Dije que necesitas hacer esto para cada actualización. Sin embargo, también puede crear un pequeño script de supervivencia OTA, que realiza una copia de seguridad del archivo cuando se actualiza el sistema.

Aquí está mi propuesta (actualmente, experimental):

#!/sbin/sh
# 
# /system/addon.d/95-latinimegoogle.sh
# During an OS upgrade, this script backs up /system/lib/libjni_latinimegoogle.so,
# /system is formatted and reinstalled, then the file is restored.
#

. /tmp/backuptool.functions

list_files() {
cat <<EOF
lib/libjni_latinimegoogle.so
EOF
}

case "$1" in
  backup)
    list_files | while read FILE DUMMY; do
      backup_file $S/"$FILE"
    done
  ;;
  restore)
    list_files | while read FILE REPLACEMENT; do
      R=""
      [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
      [ -f "$C/$S/$FILE" ] && restore_file $S/"$FILE" "$R"
    done
  ;;
  pre-backup)
    # Stub
  ;;
  post-backup)
    # Stub
  ;;
  pre-restore)
    # Stub
  ;;
  post-restore)
    # Stub
  ;;
esac

También disponible en GitHub: https://gist.github.com/rugk/a4c9fa11c5c031faf45602d6bf922a1c

  1. Simplemente guarde ese archivo, introdúzcalo en su dispositivo en el /system/addon.ddirectorio ( adb push 95-latinimegoogle.sh /system/addon.d). (Una vez más, debe asegurarse de que /systemesté montado).
  2. Y hazlo ejecutable: adb shellen tu dispositivo, ve al directorio vía cd /system/addon.dy: chmod +x 95-latinimegoogle.sh.
La carpeta de destino debe ser /system/lib64si está ejecutando en un ARM64. Me tomó un tiempo averiguarlo ya que todavía hay un /system/libalrededor. Por supuesto, la ruta también debe ajustarse en el guión de supervivencia de OTA.
Desafortunadamente, sus instrucciones no parecen funcionar cuando Magisk está instalado: después de reiniciar, el archivo desaparece nuevamente. Solución: después de copiar el archivo en su tarjeta SD, inicie la recuperación (TWRP), monte /systemy luego use, por ejemplo, el administrador de archivos incorporado (Aroma) para copiar el archivo. Después de reiniciar nuevamente, la escritura gestual está disponible.
PD: "cosa anticuada (actualizada en 2008)": no se deje engañar por eso. El de 8.1 tiene la misma marca de tiempo, pero es más grande (1,1M en lugar de 944k). Parece que la marca de tiempo siempre se establece en la "fecha de nacimiento" ficticia de Android. // "Descargar las Google Apps correctas": parece que el paquete más pequeño (pico) es suficiente para eso.
  1. El truco del fragmento de configuración/secuencia de comandos de supervivencia de OTA dejó de funcionar en OnePlus 3T después de la última actualización de firmware OEM de OnePlus. (Aunque OnePlus lanzó la última actualización de firmware OEM para OnePlus 3T en julio de 2019, me siento obligado a seguir escribiendo esto porque hasta ahora no he visto a nadie mencionar esto). Creo que esto se debe a que los mantenedores de LineageOS oneplus3comenzaron a usar digerir los archivos y esto verifica los componentes del sistema con algún conjunto de claves de firma, lo que siempre hará que el teléfono desaparezca el script de supervivencia OTA personalizado. Entonces, esto significa que está limitado a la mitad "superior" de la solución de rugk . Entonces, según mi experiencia con los teléfonos que tengo, creo que la parte "inferior" de la solución solo funciona en:bacon) o cualquier dispositivo Android de 64 bits con compilaciones LOS que no utilicen la comprobación de archivos de resumen. (No sé cómo verificar esto en dispositivos arbitrarios disponibles en LOS).

  2. El libjni_latinimegoogle.sotruco requiere TWRP como recuperación personalizada para funcionar. Desde LOS 17.1-18.1, Lineage Recovery se ha ofrecido para cualquier dispositivo con compilaciones LOS. Sin embargo, no use Lineage Recovery si usa este libjni_latinimegoogle.sotruco. Por alguna razón, si tiene Lineage Recovery, el /system/lib64directorio simplemente no existe, incluso cuando monta el almacenamiento del dispositivo a través de Lineage Recovery. Esto se observó en un OnePlus 3T/ oneplus3.

  3. Según lo que he leído, infiero que este libjni_latinimegoogle.sotruco simplemente no funcionará en ninguna ROM personalizada que implemente correctamente el arranque verificado al volver a bloquear el gestor de arranque. A partir de mayo de 2021, CalyxOS y GrapheneOS son 2 ROM que utilizan un arranque verificado. Por lo tanto, libjni_latinimegoogle.soes probable que se prohíba colocarlos entre los archivos del sistema. Incluso si este truco de la biblioteca de escritura de gestos fuera hipotéticamente posible, creo que sería una práctica/movimiento de seguridad extremadamente malo. En cambio, si su caso de uso/modelo de amenaza permite teclados de terceros de código abierto, recomendaría FlorisBoard , que implementó recientemente lo que llama escritura "deslizante" y está disponible en F-Droid. (Para que quede claro, no estoy afiliado a CalyxOS, GrapheneOS o FlorisBoard). AnySoftKeyboard prometía algún tipo de escritura deslizante/gestual, pero eso fue en 2018 y ASK nunca implementó completamente esta función, cuando cansé ASK una vez en 2020, IIRC.

Actualización para Lineage OS 17.1 (Android 10.0)

Basado en este Reddit , el paso 4 de la guía detallada de rugk difiere de la siguiente manera (usando TWRP ya que empujar el archivo con adb no funcionó):

  • transferir libjni_latinimegoogle.soa su teléfono ( /sdcard)
  • inicie TWRP, verifique en "Montar" que systemestá montado y "solo lectura" no está marcado
  • inicie la línea de comando en "Avanzado »Terminal" e ingrese los siguientes comandos:
  • mv /sdcard/libjni_latinimegoogle /system/product/lib/
  • chmod 644 /system/product/lib/libjni_latinimegoogle
  • cd /system/product/app/LatinIME/lib/arm/
  • rm libjni_latinime.so
  • ln -s /system/product/lib/libjni_latinimegoogle.so libjni_latinime.so

La solución anterior funciona de maravilla con un Samsung S5 Neo (s5neolte/SM-G903F) y Lineage OS 17.1 (Android 10).

Como se mencionó anteriormente, puede extraer libjni_latinimegoogle.sode Open GApps . En cuanto a las opciones de descarga, no importa mucho la versión de Android que elijas. Parece que el archivo no ha cambiado al menos desde Android 7.1. Utilicé la siguiente configuración:

  • Plataforma: brazo
  • androide: 10.0
  • variante: nano