Giter Club home page Giter Club logo

dergoogler / mmrl Goto Github PK

View Code? Open in Web Editor NEW
254.0 2.0 5.0 29.18 MB

Introducing Magisk Module Repo Loader (MMRL) - the ultimate module manager for Magisk, KernelSU and APatch on Android. This highly configurable app allows users to manage modules effortlessly, all while being completely free of ads.

Home Page: https://mmrl.dergoogler.com

License: MIT License

TypeScript 86.24% Java 8.45% HTML 0.40% Shell 0.01% SCSS 2.23% JavaScript 2.68%
javascript magisk react repo typescript kernelsu android apatch module-manager

mmrl's Introduction


Your highly customizable module manager

Get it on Google Play Get it on GitHub Get it on GitHub

Build with Webpack Generate APK Debug GitHub all releases

FAQModConfModFS

Summary

Introducing Magisk Module Repo Loader (MMRL) - the ultimate module manager for Magisk, KernelSU and APatch on Android. This highly configurable app allows users to manage modules effortlessly, all while being completely free of ads.

Requirements

  • Android 8.0 or later
  • MMRL-CLI
  • 4-5 GB RAM (lower may possible)

Features

  • Basics: Literally basics
  • ModFS: Customizable Module Filesystem
  • ModConf: Provide dynamic created pages for modules
  • Custom Repos: Load any repo that uses the MRepo or the GR Fork

Read the documentation to explore more of our functions like Shell, SuFile and more

Supported root manager

Screenshots

Credits & Thanks

mmrl's People

Contributors

2926295173 avatar dependabot[bot] avatar dergoogler avatar syspwda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

mmrl's Issues

DAPI Element for Required Modules

  • module - for the native app to find the given module, to open directly the module instead of the browser
  • href - this will only affect browser
<a module="node_on_android" href="https://github.com/Magisk-Modules-Alt-Repo/node">Node.js</a>

Handle initial view in RepoActivity

Currently in version 1.6.0 nothing shows in RepoActivity to help the user find an repository

There is currently no repo. See this wiki which repo is supported.

Additional sorting for installed modules

It would be great if the sorting of installed modules could get an additional sorting method like time of update.
Or even better, if the modules with an available update could be listed on top.

Terminal Ext

import React from "react";
import { Page, Ansi } from "@mmrl/ui";
import { Stack } from "@mui/material";
import { StringsProvider } from "@mmrl/providers";
import { useStrings } from "@mmrl/hooks";

const strs = {
  en: {
    hello: "\x1b[36mHello\x1b[0m"
  },
  de: {
    hello: "Hallo"
  }
}


const Config = () => {
  const [lines, setLines] = React.useState([])

  const processCommand = (rawCommand) => {
    let arg;
    let command;
    console.log(rawCommand)
    const i = rawCommand.indexOf(' ');
    if (i != -1 && rawCommand.length != i + 1) {
      arg = rawCommand.substring(i + 1).trim().split(" ")
      command = rawCommand.substring(0, i)
    } else {
      arg = ""
      command = rawCommand
    }

    switch (command) {
      case "clearTerminal":
        setLines([]);
        break;
      case "log":
        console.log(arg[0])
        break;
    }
  }


  const onPrint = (s) => {
    if (s.startsWith("#!mmrl:")) {
      processCommand(s.substring(7));
    } else {
      return s
    }
  }


  React.useEffect(() => {
    setLines([
      "#!mmrl:log 4 ddd d",
      "sdfsddfghfghfgh",
      "df\x1b[36mHello\x1b[0mfgffgnhnfgh",
      "fgdfgsff"
    ])
  }, [])

  return (
    <Page>
      <Stack>
        {lines.map((line) => <Ansi style={{ display: "inline-block" }}>{onPrint(line)}</Ansi>)}
      </Stack>
    </Page>
  )
}

const Main = () => {
  return (
    <StringsProvider data={strs}>
      <Config />
    </StringsProvider>
  )
}

export default Main
if [ -f "/system/etc/mmrl.sh" ]; then
    mmrl() {
        ui_print "$(echo "#!mmrl:$@")"
    }
else
    mmrl() { true; }
fi

DAPI Preview causes crash

Cannot read properties of undefined (reading 'charAt')
 at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:131227
    at Vo (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:193695)
    at hn (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:213045)
    at ons-navigator
    at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:130262
    at https://mmrl.dergoogler.com/bundle/vendor.bundle.js:2:10025
    at Sn (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:214665)
    at ons-splitter-content
    at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:130262
    at https://mmrl.dergoogler.com/bundle/vendor.bundle.js:2:10025
    at ons-splitter
    at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:130262
    at https://mmrl.dergoogler.com/bundle/vendor.bundle.js:2:10025
    at div
    at ons-page
    at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:130262
    at https://mmrl.dergoogler.com/bundle/vendor.bundle.js:2:10025
    at https://mmrl.dergoogler.com/bundle/app.bundle.js:1:131227
    at Jn (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:224410)
    at x (https://mmrl.dergoogler.com/bundle/vendor.bundle.js:81:586261)
    at Ft (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:146258)
    at div
    at t.Preventer (https://mmrl.dergoogler.com/bundle/vendor.bundle.js:81:1292632)
    at u (https://mmrl.dergoogler.com/bundle/vendor.bundle.js:75:178732)
    at m (https://mmrl.dergoogler.com/bundle/vendor.bundle.js:75:179237)
    at b (https://mmrl.dergoogler.com/bundle/vendor.bundle.js:75:179446)
    at X (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:124715)
    at ee (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:125738)
    at J (https://mmrl.dergoogler.com/bundle/app.bundle.js:1:123855)

Filter for installed modules

Is this a possibility in explore view?

In installed view it could be alphabetical too but mine seem to appear all over the place in random order

[BUG] all of a sudden Explore tab is empty?

What title says
Used to work fine, but for the past few days no modules are shown in Explore..

{
"device": {
"sdk": "34",
"brand": "google",
"model": "Pixel 7 Pro"
},
"application": {
"package_name": "com.dergoogler.mmrl",
"version_name": "1.9.5",
"version_code": 195
},
"root": {
"manager": "Magisk",
"version_name": "0fe46c5a-delta:MAGISKSU",
"version_code": 26301
}
}

Edit: because I'm obviously stupid, I thought I was up to date facepalm

Feel free to close...

[BUG] Crash

Crash on open.

Device info

  • Device: Samsung M20
  • OS: Android 10
  • App Version 1.13.9 (1139)
  • User Agent ...

Logs :
FATAL EXCEPTION: main
Process: com.dergoogler.mmrl, PID: 6831
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dergoogler.mmrl/com.dergoogler.mmrl.MainActivity}: android.view.InflateException: Binary XML file line #28 in com.dergoogler.mmrl:layout/splash_screen_view: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3448)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7807)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
Caused by: android.view.InflateException: Binary XML file line #28 in com.dergoogler.mmrl:layout/splash_screen_view: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:825)
at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:8949)
at android.view.ViewGroup$MarginLayoutParams.(ViewGroup.java:9147)
at android.widget.FrameLayout$LayoutParams.(FrameLayout.java:452)
at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:380)
at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:58)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1125)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at android.view.View.inflate(View.java:27683)
at n.r$a$a.d(Unknown Source:9)
at n.r$a$a.a(Unknown Source:0)
at j0.k.getValue(Unknown Source:20)
at n.r$a.d(Unknown Source:2)
at n.r$a.a(Unknown Source:25)
at n.r.(Unknown Source:25)
at n.g$b.l(Unknown Source:11)
at n.g.e(Unknown Source:7)
at org.apache.cordova.SplashScreenPlugin.setupSplashScreen(Unknown Source:52)
at org.apache.cordova.SplashScreenPlugin.onMessage(Unknown Source:22)
at org.apache.cordova.PluginManager.lambda$postMessage$0(Unknown Source:2)
at org.apache.cordova.PluginManager.a(Unknown Source:0)
at org.apache.cordova.a.accept(Unknown Source:8)
at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at java.util.Collections$SynchronizedMap.forEach(Collections.java:2698)
at org.apache.cordova.PluginManager.postMessage(Unknown Source:32)
at org.apache.cordova.CordovaActivity.init(Unknown Source:47)
at com.dergoogler.mmrl.MainActivity.onCreate(Unknown Source:14)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7807)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)

[BUG] Unable to install modules from local file

Describe the bug
Unable to install any modules from local file. No matter which Magisk module i choose - it always says "(file name) does not exist".

To Reproduce
Steps to reproduce the behavior:

  1. Go to the tab "installed", click the icon to install local module.
  2. Choose a local module to install.

Expected behavior
The module should install.

Screenshots
Screenshot_20240117-090904_MMRL
Screenshot_20240117-090840_MMRL

Device info(please complete the following information):

  • Device: POCO F2 Pro
  • OS: crDeoid 10.1 (Android 14)
  • App Version: 1.13.9
  • User Agent: nv

Additional context
nv

Not able to detect Magisk Delta

Make detection regex configurable for the end-user, to prevent issuea like these.

Start detecting root manager via native calls

Delta Regex:

/((\d+\.\d+)|((\w+))-delta):MAGISKSU/i

Change these information at your own risk, MRRL or its developers are not responsible for your actions.

D-API Tester Preview Overflow

There is currently an visual bug which causes the elements to escape the preview box

IMG_20230712_061625_330.jpg

How it could be fixed

Add this property to the preview box

overflow: auto;

[BUG] Failure to download zip's correctly.

Every (but 1*) zip file downloaded (I downloaded them twice) are either corrupt or the command programmed is downloading incorrectly. All (but 1*) zip files fail. After downloading I try installing via Magisk AND via TWRP. Both times, all zip file are bad. I think whatever command MMLR uses (guessing curl or wget) is downloading an html file then naming it .zip but that's just a guess. There was 1 successful zip from the bunch I downloaded which was Kali Nethunter Firmware files*. Which helps you find the bug. Whatever was programmed in that download was correct. All others, I'm not sure. Hope this helps.

More install configuration

module.prop

# allow install when Magisk is installed
magisk=true
# disallow when KernelSU is installed
kernelsu=false

Add config page for modules

New

Note
This feature may change over time

File extensions will change from *.js to *.mdx

I've made new progression on cofigureable modules with MMRL, it uses JSX instead of JSON which makes it more user friendly. <OnClick/> is unfortunately a workaround component because the onClick property don't work.

Config files must placed in /system/usr/share/mmrl/config/$MODID.js

<Box sx={{p:1}}>
  <Alert severity="info">
    <AlertTitle>Still in development!</AlertTitle>
    This configure screen is still in development, the api may change in future
  </Alert>
</Box>      

<List subheader={<ListSubheader>Settings</ListSubheader>}>
  <ListItemDialogEditText
      id="rootfs"
      scope="mkshrc"
      inputLabel="Path"
      type="text"
      title="Change ROOTFS"
      initialValue="/data/mkuser"
      description="Changing this path will move/create a new environment">
    <ListItemText primary="Default ROOTFS" secondary={getprop("persist.mkshrc.rootfs", "/data/mkuser")} />
  </ListItemDialogEditText>
  <ListItem>
    <ListItemText primary="Show service notification" />
    <Switch id="show_service_notify" defaultState={true} />
  </ListItem>
</List>

<Divider/>

<List subheader={<ListSubheader>Project</ListSubheader>}>
  <OnClick handler={openLink("https://github.com/Magisk-Modules-Alt-Repo/mkshrc/issues")}>
    <ListItemButton>
      <ListItemText primary="Report a issue" />
    </ListItemButton>
  </OnClick>
  <OnClick handler={openLink("https://github.com/Magisk-Modules-Alt-Repo/mkshrc")}>
    <ListItemButton>
      <ListItemText primary="Source code" />
    </ListItemButton>
  </OnClick>
  <OnClick handler={openLink("https://github.com/Magisk-Modules-Alt-Repo/node")}>
    <ListItemButton>
      <ListItemText primary="Try Node.js" />
    </ListItemButton>
  </OnClick>
</List>

Dark mode hardly usable

'/readable at all

1000002092

Google Pixel 7
Android 13
Rooted w/ Magisk 26.1

I'm pretty sure it's due to the already dark colors of the font. Black background + dark fonts don't match well.

Improve share feature

Currently it can only shared if the repo has been added

https://mmrl.dergoogler.com/?module=terminal_systemizer

To make the share feature better, load the repo directly from the URL

https://mmrl.dergoogler.com/?repo=gr.dergoogler.com/magisk/mmar.json&module=terminal_systemizer

[BUG] Crash on startup

Describe the bug
App crashes on startup:

FATAL EXCEPTION: main
Process: com.dergoogler.mmrl, PID: 21908
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dergoogler.mmrl/com.dergoogler.mmrl.MainActivity}: android.view.InflateException: Binary XML file line #28 in com.dergoogler.mmrl:layout/splash_screen_view: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3431)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:223)
	at android.app.ActivityThread.main(ActivityThread.java:7664)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.view.InflateException: Binary XML file line #28 in com.dergoogler.mmrl:layout/splash_screen_view: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f0300df a=-1}
	at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:826)
	at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:8231)
	at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:8429)
	at android.widget.FrameLayout$LayoutParams.<init>(FrameLayout.java:452)
	at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:380)
	at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:58)
	at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
	at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
	at android.view.View.inflate(View.java:26707)
	at o.r$a$a.d(Unknown Source:9)
	at o.r$a$a.a(Unknown Source:0)
	at p0.h.getValue(Unknown Source:20)
	at o.r$a.d(Unknown Source:2)
	at o.r$a.a(Unknown Source:25)
	at o.r.<init>(Unknown Source:25)
	at o.g$b.l(Unknown Source:11)
	at o.g.e(Unknown Source:7)
	at org.apache.cordova.SplashScreenPlugin.setupSplashScreen(Unknown Source:52)
	at org.apache.cordova.SplashScreenPlugin.onMessage(Unknown Source:22)
	at org.apache.cordova.PluginManager.lambda$postMessage$0(Unknown Source:2)
	at org.apache.cordova.PluginManager.a(Unknown Source:0)
	at org.apache.cordova.a.accept(Unknown Source:8)
	at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
	at java.util.Collections$SynchronizedMap.forEach(Collections.java:2698)
	at org.apache.cordova.PluginManager.postMessage(Unknown Source:32)
	at org.apache.cordova.CordovaActivity.init(Unknown Source:47)
	at com.dergoogler.mmrl.MainActivity.onCreate(Unknown Source:22)
	at android.app.Activity.performCreate(Activity.java:7994)
	at android.app.Activity.performCreate(Activity.java:7978)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:223)
	at android.app.ActivityThread.main(ActivityThread.java:7664)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

To Reproduce
Steps to reproduce the behavior:
install and Start app

Expected behavior
no crash lol

Screenshots
If applicable, add screenshots to help explain your problem.

Device info(please complete the following information):

  • Device: Redmi Note 7
  • OS: Lineage 11
  • App Version: latest from here
  • User Agent: no idea

Additional context
Add any other context about the problem here.

Downloads master zip

When I try and download any magisk module it downloads the master zip from GitHub which isn't flashable with Magisk unless I'm being extremely dumb - (extremely possible)

cleartext traffic

My scanner just got its hands on today's update and reported:

! repo/com.dergoogler.mmrl_1138.apk declares flags: usesCleartextTraffic

This is just a warning (the update was still published), but could you please let me know why you've set that flag? By default, it's turned off, so you'll have had a reason for enabling that. Thanks in advance!

ccbins wrecking havoc

it's the third time this happens.

I download and install ccbins.

reboot and finally go to shell and enter su.

I run ccbins to install all binaries.

Everything is installed succesfully, so I believe.

after a few minutes, root begins to behave erratically.

the shell prompt freezes, magisk app manager doesn't load up anymore, for instance.

I reboot, but device goes into a bootloop mode.

gladly I had installed the antil-bootloop module, so I can reboot successfully and get back to MMRL. I re-enable all modules, except ccbins.

I am attaching the ccbin i installation log, because at the end of the script it does some pretty heavily stuff, for instance:

remount_as ro false typeset 'arg=ro' true typeset 'libloc=/system/lib64' is_mounted /system/bin /data/adb/modules/ccbins/busybox readlink -f /system/bin 2>/dev/null /data/adb/modules/ccbins/busybox grep -q ' /system/bin ' /proc/mounts return 0 /data/adb/modules/ccbins/busybox mount -o ro,remount /system/bin is_mounted /system/etc /data/adb/modules/ccbins/busybox readlink -f /system/etc 2>/dev/null /data/adb/modules/ccbins/busybox grep -q ' /system/etc ' /proc/mounts return 0 /data/adb/modules/ccbins/busybox mount -o ro,remount /system/etc is_mounted /system/usr /data/adb/modules/ccbins/busybox readlink -f /system/usr 2>/dev/null /data/adb/modules/ccbins/busybox grep -q ' /system/usr ' /proc/mounts return 1 is_mounted /system/usr/share /data/adb/modules/ccbins/busybox readlink -f /system/usr/share 2>/dev/null /data/adb/modules/ccbins/busybox grep -q ' /system/usr/share ' /proc/mounts return 0 /data/adb/modules/ccbins/busybox mount -o ro,remount /system/usr/share is_mounted /system/lib64 /data/adb/modules/ccbins/busybox readlink -f /system/lib64 2>/dev/null /data/adb/modules/ccbins/busybox grep -q ' /system/lib64 ' /proc/mounts return 0 /data/adb/modules/ccbins/busybox mount -o ro,remount /system/lib64 /data/adb/modules/ccbins/busybox rm -f /data/adb/modules/ccbins/tmp /data/adb/modules/ccbins/dlerror /data/adb/modules/ccbins/busybox kill -10 27367 exit 0

mmrl.config.txt

ccbins-verbose.log

UI Delay

Is it just me or the UI kind of delay around 0.5-1 second every time I click something?

Check for low quality modules

Some modules don't meet the required module props, so we will show a warning or a red border radius

Code sample

const prop1 = {
   id: "xhhttp",
   name: "xh for Android",
   version: "v0.18.0",
   versionCode: "0180",
   author: "ducaale & Der_Googler",
   // description: "Friendly and fast tool for sending HTTP requests"
}

const prop2 = {
   id: "xhhttp",
   name: "xh for Android",
   version: "v0.18.0",
   versionCode: "0180",
   author: "ducaale & Der_Googler",
   description: "Friendly and fast tool for sending HTTP requests"
}


const isLowQuality = (props) => {
   const requiredProp = ["id", "name", "version", "versionCode", "author", "description"];
   const result = requiredProp.reduce(function(i, j) { return i && j in props }, true);
   return !result
}


// description is missing and will trigger an low quality module
console.log(isLowQuality(prop1))

// if all required props included then it won't trigger an low quality module
console.log(isLowQuality(prop2))

Can't Toggle On Dark theme

I can't toggle on the Dark theme sorry thank you for this app tho Love You Keep It Up And Stay Positive

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.