Пишем простой модуль Magisk для Android

Введение


Одним вечером я устал менять TTL после перезагрузки устройства и подумал как можно было бы делать это автоматически. Android же Linux и на нем должен быть аналог systemd или он сам. В процессе исследований мой взор пал на Magisk.
На удивление разработать модуль для него было очень просто.


Подготовка


Быстрым гуглением находим дефолтный модуль Magisk. Не пугайтесь того что репозиторий Archived. Так задумано. Давайте форкнем его. Это будет наша основа модуля.


├── META-INF
│   └── com
│       └── google
│           └── android
│               ├── update-binary
│               └── updater-script
├── README.md
├── common
│   ├── post-fs-data.sh
│   ├── service.sh
│   └── system.prop
├── install.sh
├── module.prop
└── system
    └── placeholder

Скрипт install.sh выполняется в момент установки. Скрипт post-fs-data.sh выполняется синхронно с загрузкой перед загрузкой зиготы. Скрипт service.sh запускается после загрузки системы асинхронно. Подробнее тут.


Модифицируем


Вначале давайте поменяем module.prop. Именно там находится служебная информация по модулю. У меня получилось так:


id=yotattlfix
name=Yota TTL Fix
version=v1
versionCode=1
author=lionzxy
description=Change TTL on startup to 63
minMagisk=17000

В файле install.sh нужно, во-первых, выставить в true те вещи, которые мы будем использовать:


SKIPMOUNT=false
PROPFILE=false
POSTFSDATA=false
LATESTARTSERVICE=true 

В файле подробнейшие комментарии по каждой строчке, так что разобраться не сложно.


Во-вторых, я поправил шапку при установке


print_modname() {
  ui_print "*******************************"
  ui_print "     Magisk Yota TTL Fix       "
  ui_print "*******************************"
}

В дополнении, вы можете на этом этапе сделать проверку различных параметров. Тут обычный баш. Скорее всего, вам поможет getprop: getprop ro.product.device. Подробнее можете глянуть на своем устройстве в /system/build.prop или в гугле.


Ну и добавляем нужный нам код в common/service.sh


iptables -t mangle -A POSTROUTING -j TTL --ttl-set 63

Запускаем


Компилировать ничего не нужно. Просто запакуйте в архив :) Можете воспользоваться Github


Download ZIP


Далее открываем Magisk->Modules->Add на нашем аппарате и выбираем наш архив. Если мы попробуем запустить прям так, то увидим странную ошибку.



Пока я не сравнил свой модуль побайтово с рабочим модулем с 4pda, не понял где моя ошибка.



Для теста копируем исходник к нам в проект. И все заработает
Итого:



Публикация


У Magisk существует каталог модулей. Было бы классно туда попасть.
Все модули хранятся в организации на GitHub github.com/Magisk-Modules-Repo
Чтобы попасть туда нужно следовать ряду условий и создать Issues в главном репозитории. Однако будьте готовы что принимать его будут очень и очень долго

Источник: habr.ru