├── .gitattributes ├── .github ├── FUNDING.yaml └── workflows │ └── module.yaml ├── .vscode └── settings.json ├── CHANGELOG.md ├── META-INF └── com │ └── google │ └── android │ ├── update-binary │ └── updater-script ├── README.md ├── assets ├── 1.png ├── 2.png └── 3.png ├── common ├── curl-arm ├── curl-arm64 ├── curl-x64 └── curl-x86 ├── install.sh ├── module.prop └── system ├── etc └── mmrl.sh └── usr └── share └── mmrl ├── bin ├── mmrl_explore_install_v8.sh └── mmrl_local_install_v8.sh └── config └── mmrl_install_tools ├── activitys └── TerminalActivity.jsx ├── assets └── logcat-min.png ├── components ├── CenterBox.jsx └── RenderToolbar.jsx └── index.jsx /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf -------------------------------------------------------------------------------- /.github/FUNDING.yaml: -------------------------------------------------------------------------------- 1 | github: DerGoogler 2 | -------------------------------------------------------------------------------- /.github/workflows/module.yaml: -------------------------------------------------------------------------------- 1 | name: Build Magisk/KernelSU Module 2 | 3 | on: 4 | push: 5 | tags: [ v*.*.* ] 6 | 7 | jobs: 8 | build: 9 | name: Build Module 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Setup Apt Dependencies 15 | run: | 16 | sudo apt update -y && sudo apt upgrade -y 17 | sudo apt install zip unzip -y 18 | 19 | - name: Make 20 | shell: bash 21 | run: | 22 | zip -r "module.zip" * -x ".git" -x "README.md" 23 | 24 | - name: Publish 25 | uses: softprops/action-gh-release@v1 26 | with: 27 | files: 'module.zip' 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.eol": "\n", 3 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 |

7.5.12

2 | 3 | - Little new toolbar design -------------------------------------------------------------------------------- /META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | ################# 4 | # Initialization 5 | ################# 6 | 7 | umask 022 8 | 9 | # echo before loading util_functions 10 | ui_print() { echo "$1"; } 11 | 12 | require_new_magisk() { 13 | ui_print "*******************************" 14 | ui_print " Please install Magisk v20.4+! " 15 | ui_print "*******************************" 16 | exit 1 17 | } 18 | 19 | ######################### 20 | # Load util_functions.sh 21 | ######################### 22 | 23 | OUTFD=$2 24 | ZIPFILE=$3 25 | 26 | mount /data 2>/dev/null 27 | 28 | [ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk 29 | . /data/adb/magisk/util_functions.sh 30 | [ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk 31 | 32 | install_module 33 | exit 0 -------------------------------------------------------------------------------- /META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [MMRL]: https://github.com/DerGoogler/MMRL 2 | [Magisk]: https://github.com/topjohnwu/Magisk 3 | [KernelSU]: https://kernelsu.org 4 | [APatch]: https://github.com/bmax121/APatch 5 | 6 | # MMRL Install Tools 7 | 8 | > [!WARNING] 9 | > Please be advised that **support** and **update delivery** for MMRL Install Tools will be discontinued as of June 20, 2024. We recommend migrating to [MMRL-CLI](https://github.com/DerGoogler/MMRL-CLI) to ensure uninterrupted service and continued improvements. 10 | > [Read more 🔗](https://dergoogler.com/farewell-to-mmrl-install-tools-embrace-the-future-with-mmrl-cli) 11 | 12 | Required module if you want to install modules from Explore 13 | 14 | GitHub all releases 15 | 16 | Get it on MMRL 17 | 18 | ## Included features 19 | 20 | - Configuing MMRL's installer 21 | - Logcat logger for MMRL 22 | 23 | ## Installation 24 | 25 | Pick the latest [release](https://github.com/DerGoogler/mmrl_install_tools/releases/) and install it via your root manager (e.g. [Magisk][Magisk], [KernelSU][KernelSU] or [APatch][APatch]). After a reboot you can install modules via [MMRL][MMRL]. 26 | 27 | > You also able to configure the module within [MMRL][MMRL] 28 | 29 | ## Install scripts 30 | 31 | [Magisk][Magisk] 32 | 33 | ```shell 34 | curl -L "https://github.com/DerGoogler/mmrl_install_tools/releases/latest/download/module.zip" --output "/data/local/tmp/mmrl_install_tools.zip" && /system/bin/magisk --install-module "/data/local/tmp/mmrl_install_tools.zip" 35 | ``` 36 | 37 | [KernelSU][KernelSU] 38 | 39 | ```shell 40 | curl -L "https://github.com/DerGoogler/mmrl_install_tools/releases/latest/download/module.zip" --output "/data/local/tmp/mmrl_install_tools.zip" && /data/adb/ksu/bin/ksud module install "/data/local/tmp/mmrl_install_tools.zip" 41 | ``` 42 | 43 | [APatch][APatch] 44 | 45 | ```shell 46 | curl -L "https://github.com/DerGoogler/mmrl_install_tools/releases/latest/download/module.zip" --output "/data/local/tmp/mmrl_install_tools.zip" && /data/adb/ap/bin/apd module install "/data/local/tmp/mmrl_install_tools.zip" 47 | ``` 48 | 49 | ## API 50 | 51 | API documentation for install script. Everthing from [`useModConf.ts`](https://github.com/DerGoogler/MMRL/blob/master/Website/src/hooks/useModConf.tsx) is also available. 52 | 53 | 54 | ### Explore installer 55 | 56 | | ENV | DESC | 57 | |---------------|---------------------------------------| 58 | | `MMRL` | Is always `true` | 59 | | `MMRL_VER` | Prints the current MMRL version | 60 | | `NAME` | Module id | 61 | | `URL` | Download url of the zip file | 62 | | `ROOTMANAGER` | Prints the current used root manager | 63 | 64 | ### Local installer 65 | 66 | | ENV | DESC | 67 | |---------------|---------------------------------------| 68 | | `MMRL` | Is always `true` | 69 | | `MMRL_VER` | Prints the current MMRL version | 70 | | `NAME` | Module id | 71 | | `ZIPFILE` | Location path to install the module | 72 | | `ROOTMANAGER` | Prints the current used root manager | 73 | -------------------------------------------------------------------------------- /assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/assets/1.png -------------------------------------------------------------------------------- /assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/assets/2.png -------------------------------------------------------------------------------- /assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/assets/3.png -------------------------------------------------------------------------------- /common/curl-arm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/common/curl-arm -------------------------------------------------------------------------------- /common/curl-arm64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/common/curl-arm64 -------------------------------------------------------------------------------- /common/curl-x64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/common/curl-x64 -------------------------------------------------------------------------------- /common/curl-x86: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/common/curl-x86 -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | SKIPMOUNT=false 2 | PROPFILE=false 3 | POSTFSDATA=false 4 | LATESTARTSERVICE=false 5 | 6 | print_modname() { 7 | ui_print "=========================================" 8 | ui_print " MMRL Install Tools " 9 | ui_print "=========================================" 10 | } 11 | 12 | move_stdout() { 13 | mv "$1" "$2" 14 | if [ `ui_print $?` -eq 1 ]; then 15 | ui_print "? Something went wrong while moving $1 to $2." 16 | fi 17 | } 18 | 19 | on_install() { 20 | ui_print "- Extracting module files" 21 | unzip -qq -o "$ZIPFILE" 'system/*' -d $MODPATH >&2 22 | 23 | ui_print "- Installing for $ARCH" 24 | 25 | move_stdout "curl-$ARCH" "$MODPATH/system/usr/share/mmrl/bin/curl" 26 | 27 | [ -d "$MODPATH/system/bin/" ] || mkdir -p "$MODPATH/system/bin/" 28 | } 29 | 30 | set_permissions() { 31 | # The following is the default rule, DO NOT remove 32 | set_perm_recursive $MODPATH 0 0 0755 0644 33 | 34 | set_perm $MODPATH/system/etc/mmrl.sh 0 0 0644 35 | set_perm $MODPATH/system/usr/share/mmrl/bin/curl 0 0 0755 36 | set_perm $MODPATH/system/usr/share/mmrl/bin/mmrl_explore_install_v8.sh 0 0 0755 37 | set_perm $MODPATH/system/usr/share/mmrl/bin/mmrl_local_install_v8.sh 0 0 0755 38 | } 39 | -------------------------------------------------------------------------------- /module.prop: -------------------------------------------------------------------------------- 1 | id=mmrl_install_tools 2 | name=MMRL Install Tools 3 | version=8.5.13 4 | versionCode=8513 5 | author=Der_Googler 6 | description=Please be advised that support and update delivery for MMRL Install Tools will be discontinued as of June 20, 2024. We recommend migrating to MMRL-CLI to ensure uninterrupted service and continued improvements.\nRequired module if you want to install modules from Explore 7 | cover=/assets/logcat-min.png 8 | -------------------------------------------------------------------------------- /system/etc/mmrl.sh: -------------------------------------------------------------------------------- 1 | # Systemless Mkshrc could affect this 2 | TMPDIR="/data/local/tmp" 3 | cd $TMPDIR 4 | 5 | VERSION="v7" 6 | 7 | getconf() { 8 | local file="$ADB/mmrl/mmrlini.$VERSION.ini" 9 | local default_value="$2" 10 | local value 11 | if [ -f "$file" ]; then 12 | value=$(sed -n "s|^$1 = ||p" "$file" 2>/dev/null) 13 | if [ -z "$value" ]; then 14 | echo "$default_value" 15 | else 16 | echo "$value" 17 | fi 18 | else 19 | echo "$default_value" 20 | fi 21 | } 22 | ui_info() { echo "$GREEN- $RESET$1"; } 23 | ui_error() { echo "$RED! $RESET$2"; exit $1; } 24 | ui_warn() { echo "$YELLOW? $RESET$1"; } 25 | mmrl_exec() { echo "#!mmrl:$*"; } 26 | 27 | CURL=$(getconf "curl" "$MMRLINI/system/usr/share/mmrl/bin/curl") 28 | EXTRA_CURL_ARGS=$(getconf "curl__args" "-L") 29 | 30 | CLEAR_TERMINAL_AFTER_DL=$(getconf "clear_terminal" "true") 31 | 32 | GREEN="\x1b[32m" 33 | RED="\x1b[31m" 34 | CYAN="\x1b[96m" 35 | YELLOW="\x1b[93m" 36 | UNDERLINE="\x1b[4m" 37 | RESET="\x1b[0m" 38 | 39 | echo "$GREEN __ _____ _______ __ $RESET" 40 | echo "$GREEN / |/ / |/ / __ \/ / $RESET" 41 | echo "$GREEN / /|_/ / /|_/ / /_/ / / $RESET" 42 | echo "$GREEN / / / / / / / _, _/ /___$RESET" 43 | echo "$GREEN/_/ /_/_/ /_/_/ |_/_____/$RESET" 44 | echo "" 45 | echo "Using version $CYAN$MMRL_VER$RESET" 46 | 47 | install_cli() { 48 | case "$ROOTMANAGER" in 49 | "Magisk") 50 | exec $MSUCLI --install-module "$1" 51 | ;; 52 | "KernelSU") 53 | exec $KSUCLI module install "$1" 54 | ;; 55 | "APatchSU") 56 | exec $ASUCLI module install "$1" 57 | ;; 58 | "Unknown") 59 | ui_error 500 "Unable to find root manager" 60 | ;; 61 | *) 62 | ui_error 500 "Install error" 63 | ;; 64 | esac 65 | } 66 | 67 | bb() { 68 | case "$ROOTMANAGER" in 69 | "Magisk") 70 | exec $MSUBSU "$@" 71 | ;; 72 | "KernelSU") 73 | exec $KSUBSU "$@" 74 | ;; 75 | "APatchSU") 76 | exec $ASUBSU "$@" 77 | ;; 78 | "Unknown") 79 | ui_error 500 "Unable to find BusyBox" 80 | ;; 81 | *) 82 | ui_error 500 "BusyBox error" 83 | ;; 84 | esac 85 | } 86 | 87 | download_file() { 88 | $CURL $EXTRA_CURL_ARGS "$URL" -o "$1" 89 | 90 | if [ "$(echo $?)" -eq 0 ]; then 91 | ui_info "Successful downloaded $GREEN$NAME$RESET" 92 | if [ "$CLEAR_TERMINAL_AFTER_DL" = "true" ]; then 93 | mmrl_exec clearTerminal 94 | fi 95 | else 96 | ui_error 500 "Something went wrong" 97 | fi 98 | } -------------------------------------------------------------------------------- /system/usr/share/mmrl/bin/mmrl_explore_install_v8.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | 3 | . "$MMRLINI/system/etc/mmrl.sh" 4 | 5 | FILENAME="$TMPDIR/$NAME" 6 | 7 | download_file "$FILENAME.zip" 8 | install_cli "$FILENAME.zip" -------------------------------------------------------------------------------- /system/usr/share/mmrl/bin/mmrl_local_install_v8.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | 3 | . "$MMRLINI/system/etc/mmrl.sh" 4 | 5 | if [ "$CLEAR_TERMINAL_AFTER_DL" = "true" ]; then 6 | mmrl_exec clearTerminal 7 | fi 8 | 9 | install_cli "$ZIPFILE" -------------------------------------------------------------------------------- /system/usr/share/mmrl/config/mmrl_install_tools/activitys/TerminalActivity.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Page, BottomToolbar, Ansi } from "@mmrl/ui"; 3 | import { useActivity, useNativeStorage, useTheme, useSettings } from "@mmrl/hooks"; 4 | import { Add, Remove } from "@mui/icons-material"; 5 | import { Stack, Box, Slider } from "@mui/material"; 6 | import FlatList from "flatlist-react"; 7 | 8 | const RenderToolbar = include("components/RenderToolbar.jsx"); 9 | 10 | export default () => { 11 | const [fontSize, setFontSize] = useNativeStorage("mmrlini_log_terminal", 100); 12 | const { context } = useActivity(); 13 | const { theme } = useTheme(); 14 | const [lines, setLines] = React.useState([]); 15 | const { settings } = useSettings(); 16 | 17 | const termEndRef = React.useRef(null); 18 | 19 | if (settings.term_scroll_bottom) { 20 | const termBehavior = React.useMemo(() => settings.term_scroll_behavior, [settings]); 21 | 22 | React.useEffect(() => { 23 | termEndRef.current?.scrollIntoView({ behavior: termBehavior.value, block: "end", inline: "nearest" }); 24 | }, [lines]); 25 | } 26 | 27 | const addLine = (line) => { 28 | setLines((lines) => [...lines, line]); 29 | }; 30 | 31 | const handleChange = (event, newValue) => { 32 | setFontSize(Number(newValue)); 33 | }; 34 | 35 | const startLog = React.useMemo(() => { 36 | const envp = { 37 | PACKAGENAME: BuildConfig.APPLICATION_ID, 38 | }; 39 | 40 | if (BuildConfig.VERSION_CODE >= 21817) { 41 | const logcat = new Terminal(); 42 | logcat.env = envp; 43 | logcat.onLine = (line) => { 44 | addLine(line); 45 | }; 46 | logcat.onExit = (code) => { }; 47 | logcat.exec("logcat --pid=`pidof -s $PACKAGENAME` -v color"); 48 | } else { 49 | const Terminal = require("@mmrl/terminal") 50 | 51 | Terminal.exec({ 52 | command: "logcat --pid=`pidof -s $PACKAGENAME` -v color", 53 | env: envp, 54 | onLine: (line) => { 55 | addLine(line); 56 | }, 57 | onExit: (code) => { }, 58 | }); 59 | } 60 | 61 | 62 | }, []); 63 | 64 | return ( 65 | { 70 | return ( 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | ); 79 | }} 80 | > 81 |
87 | 99 | ( 102 | 111 | {line} 112 | 113 | )} 114 | renderOnScroll 115 | renderWhenEmpty={() => null} 116 | /> 117 | 118 |
119 |
120 | 121 | ); 122 | }; 123 | -------------------------------------------------------------------------------- /system/usr/share/mmrl/config/mmrl_install_tools/assets/logcat-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMRLApp/mmrl_install_tools/807e89456a989326db70952d667fa65e562227f3/system/usr/share/mmrl/config/mmrl_install_tools/assets/logcat-min.png -------------------------------------------------------------------------------- /system/usr/share/mmrl/config/mmrl_install_tools/components/CenterBox.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Box } from "@mui/material"; 3 | 4 | export default (props) => { 5 | return ( 6 | 18 | ); 19 | }; -------------------------------------------------------------------------------- /system/usr/share/mmrl/config/mmrl_install_tools/components/RenderToolbar.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useActivity } from "@mmrl/hooks"; 3 | import { CodeRounded,ArrowBackIosRounded, GitHub } from "@mui/icons-material"; 4 | import { Typography } from "@mui/material"; 5 | import { Toolbar } from "@mmrl/ui"; 6 | 7 | export default (props) => { 8 | const { context } = useActivity(); 9 | 10 | return () => { 11 | if (props.isHome) { 12 | return ( 13 | 20 | 21 | 22 | 23 | 31 | 39 | 40 | 54 | MMRL 55 | 56 | 57 | 58 | 59 | window.open("https://github.com/DerGoogler/mmrl_install_tools")} /> 60 | 61 | 62 | ); 63 | } else { 64 | return ( 65 | 72 | 73 | 74 | 75 | {props.title} 76 | 77 | ); 78 | } 79 | }; 80 | }; 81 | -------------------------------------------------------------------------------- /system/usr/share/mmrl/config/mmrl_install_tools/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Page, ListItemDialogEditText, Image } from "@mmrl/ui"; 3 | import { ConfigProvider } from "@mmrl/providers"; 4 | import { useConfig, useActivity, useTheme } from "@mmrl/hooks"; 5 | import { Typography, Divider, Card, CardContent, CardActionArea, Switch, List, ListItemButton, ListSubheader, ListItem, ListItemText } from "@mui/material"; 6 | 7 | const TerminalActivity = include("activitys/TerminalActivity.jsx"); 8 | const RenderToolbar = include("components/RenderToolbar.jsx"); 9 | const CenterBox = include("components/CenterBox.jsx"); 10 | 11 | function App() { 12 | const { context } = useActivity(); 13 | const { theme } = useTheme(); 14 | const [config, setConfig] = useConfig(); 15 | 16 | if (BuildConfig.VERSION_CODE < 21410) { 17 | return ( 18 | 19 | 20 | MMRL Install Tools requires MMRL above 2.14.10! 21 | 22 | 23 | ); 24 | } 25 | 26 | return ( 27 | 28 | 29 | { 31 | context.pushPage({ 32 | component: TerminalActivity, 33 | key: "Terminal", 34 | extra: {}, 35 | }); 36 | }} 37 | > 38 | 44 | 45 | 46 | Logcat 47 | 48 | 49 | You can now view logs inside MMRL Install Tools to make the bug hunt more easier. Click to try it out! 50 | 51 | 52 | 53 | 54 | 55 | Settings}> 56 | 57 | 58 | setConfig("clear_terminal", e.target.checked)} /> 59 | 60 | { 62 | if (val) setConfig("curl", val); 63 | }} 64 | inputLabel="Path" 65 | type="text" 66 | title="Change curl bin path" 67 | initialValue={config.curl} 68 | > 69 | 70 | 71 | 72 | 73 | Arguments}> 74 | { 76 | if (val) setConfig("curl__args", val); 77 | }} 78 | inputLabel="Arguments" 79 | type="text" 80 | title="Add extra curl arguments" 81 | initialValue={config.curl__args} 82 | > 83 | 84 | 85 | 86 | 87 | ); 88 | } 89 | 90 | const version = "v7"; 91 | 92 | export default () => { 93 | return ( 94 | 103 | 104 | 105 | ); 106 | }; 107 | --------------------------------------------------------------------------------