Пишем простой модуль 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 на нашем аппарате и выбираем наш архив. Если мы попробуем запустить прям так, то увидим странную ошибку.

bwa4uvp6h0cuft4dv8pg9x1mvnm.png

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

pbeo2-nbqci7ssecutuhoblpwfy.png

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

jsnu7v0il9ka3fpf7w6edwbc7yu.png

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

© Habrahabr.ru