diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java index 579fdfea..64b2acf3 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java @@ -23,6 +23,9 @@ import android.app.Activity; import android.app.Dialog; import android.os.Build; import android.os.Bundle; +import android.system.ErrnoException; +import android.system.Os; +import android.system.OsConstants; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.Menu; @@ -51,8 +54,12 @@ import org.lsposed.manager.util.Telemetry; import org.lsposed.manager.util.UpdateUtil; import org.lsposed.manager.util.chrome.LinkTransformationMethod; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.HashMap; +import java.util.concurrent.atomic.AtomicBoolean; import rikka.core.util.ClipboardUtils; import rikka.material.app.LocaleDelegate; @@ -146,6 +153,7 @@ public class HomeFragment extends BaseFragment implements MenuProvider { } binding.statusSummary.setText(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d) - %s", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode(), ConfigManager.getApi())); + binding.developerWarningCard.setVisibility(isDeveloper() ? View.VISIBLE : View.GONE); } else { boolean isMagiskInstalled = ConfigManager.isMagiskInstalled(); if (isMagiskInstalled) { @@ -254,6 +262,27 @@ public class HomeFragment extends BaseFragment implements MenuProvider { return manufacturer; } + private boolean isDeveloper() { + var developer = new AtomicBoolean(false); + var pids = Paths.get("/data/local/tmp/.studio/ipids"); + try (var dir = Files.list(pids)) { + dir.findFirst().ifPresent(name -> { + var pid = Integer.parseInt(name.getFileName().toString()); + try { + Os.kill(pid, 0); + developer.set(true); + } catch (ErrnoException e) { + if (e.errno != OsConstants.ESRCH) { + developer.set(true); + } + } + }); + } catch (IOException e) { + return false; + } + return developer.get(); + } + public static class AboutDialog extends DialogFragment { @NonNull @Override diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 652bc07f..09fe189b 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -215,6 +215,38 @@ + + + + + + + + + + + Modules may invalidate occasionally.]]> Need to update Please install the latest version of LSPosed + Tips for module developer + Please disable deploy optimizations on Android Studio, or use `gradlew installDebug` command to install. Otherwise the module apk will not be updated. API version Framework version Manager package name