Включить ввод жестами (пролистыванием) (на Fairphone 2) без клавиатуры Google

У меня есть Fairphone 2 под управлением Fairphone Open OS, и я прилагаю донкихотские усилия, чтобы избежать установки на нем несвободного (как свобода) программного обеспечения и оптимизировать конфиденциальность.

Я хочу ввод свайпом, но не хочу устанавливать Google Keyboard, (LatimeImeGoogle.apk) По умолчанию в ОС установлена ​​клавиатура AOSP. Я также установил удивительно удобную для кода AnySoftKeyboard (у которой также есть потрясающие темы) и клавиатуру хакера от F-Droid, но, хотя они мне полезны, у них нет ввода смахиванием.

Я прочитал этот пост , который заставляет меня думать, что мне нужно получить исходный код и скомпилировать клавиатуру. Я не знаю, как это сделать в данный момент, но я готов учиться. Я попытался просто заменить библиотеку (обманывая и взяв правильную библиотеку из Google apk), упомянутую в посте, и ничего не изменилось (если я удалю библиотеку, клавиатура полностью перестанет работать, поэтому очевидно, что я вношу изменения в систему, заменяя ее) - это просто не делает то, что я хочу).

Я хотел бы что-нибудь из следующего, в порядке предпочтения

  1. приятная удобная клавиатура FOSS с жестовым вводом
  2. простой* способ включить ввод жестами для AOSP
  3. подтверждение того, что мне действительно нужно самому собрать AOSP, чтобы делать то, что я хочу
  4. любой другой актуальный совет(!)

Очевидно, у меня есть root :)

* У меня есть система Ubuntu, с которой я могу поиграть на своем ноутбуке, если это поможет...

Установка клавиатуры Google не повлияет на вашу конфиденциальность, если вы не включите функции синхронизации.
Вот клавиатура FOSS: github.com/AnySoftKeyboard/AnySoftKeyboard
Вы должны иметь возможность импортировать это в Android Studio без особых усилий.
@AndroidDev, это то, что я использую - это здорово, и в надстройке есть красивые темы, но нет ввода жестов.
@Zanna - О боже ... полностью пропустил это в вашем вопросе. Ржу не могу. В этом случае, да, вам, вероятно, придется собирать исходный код AOSP.
@AndroidDev Я так понимаю :( И AOSP такой уродливый ... когда у AnySoftKeyboard будет вздох ввода жестов ?
@Занна - Ой-ой. См. этот комментарий: stackoverflow.com/questions/33127671/…
@AndroidDev Я думаю, все в порядке, в код нужно внести небольшое изменение, и вам просто нужно добавить библиотеку из apk клавиатуры Google (думая об этом как о капле). Выглядит довольно просто, мне просто лень и хотелось бы более привлекательный вариант
@Zanna - Но тогда это уже не FOSS
@AndroidDev закрывается, как только получается :(

Ответы (3)

Проблема

Клавиатура AOSP по умолчанию не поддерживает смахивание. В настройках не появится. Простая (но неловкая) причина заключается в том, что Google посчитал эту функцию слишком «секретной» или около того, чтобы выпускать ее в открытом исходном коде, и поэтому они поставляют ее в проприетарной библиотеке.

Решение

Если вы хотите, вы можете загрузить эту библиотеку на свое устройство после установки ПЗУ (и каждого обновления!). Он назван libjni_latinimegoogle.soи его нужно вставить /system/lib.

Для меня (Android 7.1, ARM) эта библиотека была очень маленькой (944 КБ) и старой (обновлено в 2008 году). (sha256sum 442a2a8bfcb25489564bc9433a916fa4dc0dba9000fe6f6f03f5939b985091e6:)

Подробное руководство

  1. Загрузите нужные Google Apps с http://opengapps.org/ . (хотя я предполагаю, что библиотека может быть одинаковой для некоторых версий, но… просто скачайте правильную)
  2. Теперь попадаем в ZIP, соответственно извлекаем его. В Optionalкаталоге вы найдете еще один архив swypelibs-lib-arm.tar.lz. Извлеките это, и вы получите libjni_latinimegoogle.soфайл.
  3. Теперь подготовьте свой телефон/устройство в режиме восстановления. Обязательно смонтируйте /systemраздел доступным для записи способом. В TWRP вам нужно перейти в «Монтировать» -> (если нужно, снимите флажок) «монтировать / system в режиме только для чтения», а затем смонтировать его, установив флажок «/ system».
  4. Теперь просто нажмите на файл на свой телефон ( adb push /path/to/libjni_latinimegoogle.so /system/lib) и перезапустите.

Он должен работать!

Выживание ОТА

Я сказал, что вам нужно делать это для каждого обновления. Однако вы также можете создать небольшой сценарий выживания OTA, который создает резервную копию файла при обновлении системы.

Вот мое (в настоящее время экспериментальное) предложение:

#!/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

Также доступно на GitHub: https://gist.github.com/rugk/a4c9fa11c5c031faf45602d6bf922a1c .

  1. Просто сохраните этот файл, поместите его на свое устройство в каталог /system/addon.d( adb push 95-latinimegoogle.sh /system/addon.d). (Опять же, вы должны убедиться, что /systemон смонтирован.)
  2. И сделайте его исполняемым: adb shellв вашем устройстве перейдите в каталог через cd /system/addon.dи: chmod +x 95-latinimegoogle.sh.
Папка назначения должна быть, /system/lib64если вы работаете на ARM64. Мне потребовалось некоторое время, чтобы понять, так как /system/libвокруг все еще есть. Конечно, путь нужно настроить и в скрипте выживания ОТА.
Ваши инструкции, к сожалению, не работают, когда установлен Magisk: после перезагрузки файл снова исчез. Решение: после копирования файла на SD-карту загрузитесь в рекавери (TWRP), смонтируйте /system, а затем используйте, например, встроенный файловый менеджер (Aroma), чтобы скопировать файл. После повторной перезагрузки набор жестов доступен.
PS: "старая (обновленная 2008) штука" - не ведитесь на это. Тот, что для 8.1, имеет такую ​​же метку времени, но больше (1,1М вместо 944К). Похоже, временная метка всегда устанавливается на фиктивную «дату рождения» Android. // «Загрузить правильный Google Apps» — похоже, для этого достаточно пакета smalles (pico).
  1. Взлом скрипта выживания / фрагмента конфигурации OTA перестал работать на OnePlus 3T после последнего обновления прошивки OEM от OnePlus. (Несмотря на то, что последнее обновление прошивки OEM для OnePlus 3T было выпущено OnePlus в июле 2019 года, я чувствую себя обязанным написать это, потому что до сих пор я не видел, чтобы кто-то упоминал об этом.) Я думаю, это потому, что разработчики LineageOS oneplus3начали использовать дайджест-файлы, и это проверяет компоненты системы на соответствие некоторому набору ключей подписи, что всегда приводит к тому, что на телефоне исчезает пользовательский сценарий выживания OTA. Итак, это означает, что вы ограничены «верхней» половиной решения от rugk . Итак, исходя из моего опыта работы с телефонами, которые у меня есть, я думаю, что «нижняя» часть решения работает только на:bacon) или любые 64-разрядные устройства Android со сборками LOS, которые не используют проверку дайджест-файлов. (Я не знаю, как это проверить на произвольных LOS-доступных устройствах.)

  2. Для libjni_latinimegoogle.soработы взлома требуется TWRP в качестве вашего пользовательского восстановления. Начиная с LOS 17.1-18.1, Lineage Recovery предлагается для любого устройства со сборками LOS. Однако не используйте Lineage Recovery, если используете этот libjni_latinimegoogle.soхак. По какой-то причине, если у вас Lineage Recovery, /system/lib64каталог просто не существует, даже когда вы монтируете хранилище устройства через Lineage Recovery. Это наблюдалось на OnePlus 3T/ oneplus3.

  3. Основываясь на том, что я прочитал, я делаю вывод, что этот libjni_latinimegoogle.soхак просто не будет работать на любом пользовательском ПЗУ, который правильно реализует проверенную загрузку через повторную блокировку загрузчика. По состоянию на май 2021 года CalyxOS и GrapheneOS представляют собой два ПЗУ, которые используют проверенную загрузку. Таким образом, сброс libjni_latinimegoogle.soсреди системных файлов, вероятно, будет запрещен. Даже если бы этот взлом библиотеки набора жестов был гипотетически возможен, я чувствую, что это было бы чрезвычайно плохой практикой / ходом безопасности. Вместо этого, если ваша модель использования/угрозы допускает сторонние клавиатуры с открытым исходным кодом, я бы порекомендовал FlorisBoard , который недавно реализовал то, что он называет «скользящим» набором текста, и доступен на F-Droid.. (Просто для ясности: я не связан с CalyxOS, GrapheneOS или FlorisBoard.) AnySoftKeyboard обещала какой-то тип набора текста скольжением/жестами, но это было еще в 2018 году, и ASK так и не реализовал эту функцию полностью, когда я однажды устал от ASK. 2020, МИИР.

Обновление для Lineage OS 17.1 (Android 10.0)

Основываясь на этом Reddit , шаг 4 подробного руководства rugk отличается следующим образом (используя TWRP, поскольку отправка файла с помощью adb не сработала):

  • перенести libjni_latinimegoogle.soна телефон ( /sdcard)
  • запустите TWRP, проверьте в разделе «Монтировать», что systemсмонтировано, а «только для чтения» не отмечено
  • запустите командную строку в разделе «Дополнительно » Терминал» и введите следующие команды:
  • 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

Приведенное выше решение отлично работает с Samsung S5 Neo (s5neolte/SM-G903F) и Lineage OS 17.1 (Android 10).

Как упоминалось выше, вы можете извлечь libjni_latinimegoogle.soиз Open GApps . Что касается вариантов загрузки, не так уж важно, какую версию Android вы выберете. Кажется, файл не менялся, по крайней мере, с Android 7.1. Я использовал следующие настройки:

  • Платформа: рука
  • Андроид: 10.0
  • Вариант: нано