Compare commits

...

13 Commits
v4.1.1 ... main

Author SHA1 Message Date
tehcneko
b64046f57c update compile sdk to 36 2025-04-05 12:57:11 +08:00
tehcneko
bc17c4c9bb update ci to jdk 21 2025-04-05 12:57:11 +08:00
tehcneko
401f196e2e check caller method with stack walker 2025-04-05 12:57:11 +08:00
tehcneko
bf5cdb513d replace @TargetApi with @RequireApi 2025-04-05 12:57:11 +08:00
tehcneko
f11e16da7d update AGP 2025-04-05 12:57:11 +08:00
tehcneko
de591e925e
fix issue template 2025-04-05 12:49:42 +08:00
tehcneko
4b426733ca bump version 2025-03-04 19:49:27 +08:00
tehcneko
a5461af177 support scrcpy 2025-03-04 19:48:49 +08:00
tehcneko
aa56f32b6a update issue template 2025-03-04 19:35:08 +08:00
tehcneko
cf19309b6b add support info to README 2025-03-04 19:30:47 +08:00
tehcneko
cd14a26f54 remove support for Android 11- 2025-03-04 19:10:58 +08:00
tehcneko
20c7f4c30d update gradle 2025-03-04 18:55:48 +08:00
tehcneko
624a493311 update gradle 2025-01-12 11:56:00 +08:00
10 changed files with 109 additions and 99 deletions

View File

@ -29,6 +29,13 @@ body:
options: options:
- label: I am using latest debug CI version - label: I am using latest debug CI version
required: true required: true
- type: checkboxes
id: official
attributes:
label: LSPosed requirement
options:
- label: I am using official LSPosed version
required: true
- type: textarea - type: textarea
attributes: attributes:
label: Behavior label: Behavior

View File

@ -23,10 +23,10 @@ jobs:
path: libxposed/api path: libxposed/api
fetch-depth: 0 fetch-depth: 0
- name: set up JDK 17 - name: set up JDK 21
uses: actions/setup-java@v4 uses: actions/setup-java@v4
with: with:
java-version: '17' java-version: '21'
distribution: 'temurin' distribution: 'temurin'
cache: gradle cache: gradle
@ -50,7 +50,6 @@ jobs:
echo 'org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties echo 'org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties
echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties
# build dependencies # build dependencies
sed -i 's/VERSION_21/VERSION_17/g' libxposed/api/checks/build.gradle.kts
cd libxposed/api && ./gradlew publishToMavenLocal && cd ../.. cd libxposed/api && ./gradlew publishToMavenLocal && cd ../..
# build DisableFlagSecure # build DisableFlagSecure
chmod +x gradlew chmod +x gradlew

View File

@ -1,6 +1,14 @@
# Enable Screenshot (formerly known as Disable FLAG_SECURE) # Enable Screenshot (formerly known as Disable FLAG_SECURE)
Enabling screenshots in apps that normally wouldn\'t allow it, and disabling screenshot(Android 14+) & screen record(Android 15+) detection. Enabling screenshots in apps that normally wouldn\'t allow it, and disabling screenshot(Android 14+) & screen record(Android 15+) detection.
**Unofficial LSPosed versions are not supported.**
## Supported OSes
- Android 12-16 Beta 3 (Custom ROMs are **not** supported)
- Xiaomi Hyper OS
- OPlus OS (Color OS/Realme UI/Oxygen OS)
- Samsung One UI
## Usage ## Usage
1. Enable the module 1. Enable the module
2. Select **ONLY** recommended apps 2. Select **ONLY** recommended apps

View File

@ -3,15 +3,15 @@ plugins {
} }
android { android {
compileSdk 35 compileSdk 36
buildToolsVersion "35.0.0" buildToolsVersion "36.0.0"
defaultConfig { defaultConfig {
applicationId "io.github.lsposed.disableflagsecure" applicationId "io.github.lsposed.disableflagsecure"
minSdkVersion 27 minSdkVersion 31
targetSdkVersion 35 targetSdkVersion 36
versionCode rootProject.ext.commitCount versionCode rootProject.ext.commitCount
versionName "4.1.1" versionName "4.2.0"
} }
Properties localProperties = new Properties() Properties localProperties = new Properties()
@ -42,14 +42,15 @@ android {
} else { } else {
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
} }
vcsInfo.include false
minifyEnabled true minifyEnabled true
proguardFiles 'proguard-rules.pro' proguardFiles 'proguard-rules.pro'
} }
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_21
} }
lint { lint {

View File

@ -1,18 +1,16 @@
package io.github.lsposed.disableflagsecure; package io.github.lsposed.disableflagsecure;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager;
import android.os.Build; import android.os.Build;
import android.util.Log;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
@ -48,7 +46,7 @@ public class DisableFlagSecure extends XposedModule {
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
// Screen record detection (V) // Screen record detection (V~Baklava)
try { try {
hookWindowManagerService(classLoader); hookWindowManagerService(classLoader);
} catch (Throwable t) { } catch (Throwable t) {
@ -57,14 +55,15 @@ public class DisableFlagSecure extends XposedModule {
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
// Screenshot detection (U~V) // Screenshot detection (U~Baklava)
try { try {
hookActivityTaskManagerService(classLoader); hookActivityTaskManagerService(classLoader);
} catch (Throwable t) { } catch (Throwable t) {
log("hook ActivityTaskManagerService failed", t); log("hook ActivityTaskManagerService failed", t);
} }
// Xiaomi HyperOS (U) // Xiaomi HyperOS (U~Baklava)
// OS2.0.250220.1.WOCCNXM.PRE
try { try {
hookHyperOS(classLoader); hookHyperOS(classLoader);
} catch (ClassNotFoundException ignored) { } catch (ClassNotFoundException ignored) {
@ -73,57 +72,53 @@ public class DisableFlagSecure extends XposedModule {
} }
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // ScreenCapture in WindowManagerService (S~Baklava)
// ScreenCapture in WindowManagerService (S~V) try {
try { hookScreenCapture(classLoader);
hookScreenCapture(classLoader); } catch (Throwable t) {
} catch (Throwable t) { log("hook ScreenCapture failed", t);
log("hook ScreenCapture failed", t); }
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
// Blackout permission check (S~T) // Blackout permission check (S~T)
try {
hookActivityManagerService(classLoader);
} catch (Throwable t) {
log("hook ActivityManagerService failed", t);
}
}
// WifiDisplay (S~V) / OverlayDisplay (S~V) / VirtualDisplay (U~V)
try { try {
hookDisplayControl(classLoader); hookActivityManagerService(classLoader);
} catch (Throwable t) { } catch (Throwable t) {
log("hook DisplayControl failed", t); log("hook ActivityManagerService failed", t);
}
// VirtualDisplay with MediaProjection (S~V)
try {
hookVirtualDisplayAdapter(classLoader);
} catch (Throwable t) {
log("hook VirtualDisplayAdapter failed", t);
} }
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // WifiDisplay (S~Baklava) / OverlayDisplay (S~Baklava) / VirtualDisplay (U~Baklava)
// OneUI try {
try { hookDisplayControl(classLoader);
hookScreenshotHardwareBuffer(classLoader); } catch (Throwable t) {
} catch (Throwable t) { log("hook DisplayControl failed", t);
if (!(t instanceof ClassNotFoundException)) { }
log("hook ScreenshotHardwareBuffer failed", t);
} // VirtualDisplay with MediaProjection (S~Baklava)
try {
hookVirtualDisplayAdapter(classLoader);
} catch (Throwable t) {
log("hook VirtualDisplayAdapter failed", t);
}
// OneUI
try {
hookScreenshotHardwareBuffer(classLoader);
} catch (Throwable t) {
if (!(t instanceof ClassNotFoundException)) {
log("hook ScreenshotHardwareBuffer failed", t);
} }
try { }
hookOneUI(classLoader); try {
} catch (Throwable t) { hookOneUI(classLoader);
if (!(t instanceof ClassNotFoundException)) { } catch (Throwable t) {
log("hook OneUI failed", t); if (!(t instanceof ClassNotFoundException)) {
} log("hook OneUI failed", t);
} }
} }
// secureLocked flag (S-) // secureLocked flag
try { try {
// Screenshot // Screenshot
hookWindowState(classLoader); hookWindowState(classLoader);
@ -135,8 +130,10 @@ public class DisableFlagSecure extends XposedModule {
// dumpsys window screenshot systemQuickTileScreenshotOut display_id=0 // dumpsys window screenshot systemQuickTileScreenshotOut display_id=0
try { try {
hookOplus(classLoader); hookOplus(classLoader);
} catch (Throwable ignored) { } catch (Throwable t) {
if (!(t instanceof ClassNotFoundException)) {
log("hook Oplus failed", t);
}
} }
} }
@ -173,9 +170,9 @@ public class DisableFlagSecure extends XposedModule {
case SYSTEMUI: case SYSTEMUI:
case MIUI_SCREENSHOT: case MIUI_SCREENSHOT:
if (OPLUS_APPPLATFORM.equals(pn) || OPLUS_SCREENSHOT.equals(pn) || if (OPLUS_APPPLATFORM.equals(pn) || OPLUS_SCREENSHOT.equals(pn) ||
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE)) { // ScreenCapture in App (S~T) (OPlus S~V)
// ScreenCapture in App (S~T) (OPlus S-V) // TODO: test Oplus Baklava
try { try {
hookScreenCapture(classLoader); hookScreenCapture(classLoader);
} catch (Throwable t) { } catch (Throwable t) {
@ -227,19 +224,12 @@ public class DisableFlagSecure extends XposedModule {
private void hookWindowState(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookWindowState(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var windowStateClazz = classLoader.loadClass("com.android.server.wm.WindowState"); var windowStateClazz = classLoader.loadClass("com.android.server.wm.WindowState");
Method isSecureLockedMethod; var isSecureLockedMethod = windowStateClazz.getDeclaredMethod("isSecureLocked");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
isSecureLockedMethod = windowStateClazz.getDeclaredMethod("isSecureLocked");
} else {
var windowManagerServiceClazz = classLoader.loadClass("com.android.server.wm.WindowManagerService");
isSecureLockedMethod = windowManagerServiceClazz.getDeclaredMethod("isSecureLocked", windowStateClazz);
}
hook(isSecureLockedMethod, SecureLockedHooker.class); hook(isSecureLockedMethod, SecureLockedHooker.class);
} }
private static Field captureSecureLayersField; private static Field captureSecureLayersField;
@TargetApi(Build.VERSION_CODES.S)
private void hookScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchFieldException { private void hookScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchFieldException {
var screenCaptureClazz = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ? var screenCaptureClazz = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ?
classLoader.loadClass("android.window.ScreenCapture") : classLoader.loadClass("android.window.ScreenCapture") :
@ -253,7 +243,6 @@ public class DisableFlagSecure extends XposedModule {
hookMethods(screenCaptureClazz, ScreenCaptureHooker.class, "nativeCaptureLayers"); hookMethods(screenCaptureClazz, ScreenCaptureHooker.class, "nativeCaptureLayers");
} }
@TargetApi(Build.VERSION_CODES.S)
private void hookDisplayControl(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookDisplayControl(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var displayControlClazz = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ? var displayControlClazz = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ?
classLoader.loadClass("com.android.server.display.DisplayControl") : classLoader.loadClass("com.android.server.display.DisplayControl") :
@ -265,13 +254,12 @@ public class DisableFlagSecure extends XposedModule {
hook(method, CreateDisplayHooker.class); hook(method, CreateDisplayHooker.class);
} }
@TargetApi(Build.VERSION_CODES.S)
private void hookVirtualDisplayAdapter(ClassLoader classLoader) throws ClassNotFoundException { private void hookVirtualDisplayAdapter(ClassLoader classLoader) throws ClassNotFoundException {
var displayControlClazz = classLoader.loadClass("com.android.server.display.VirtualDisplayAdapter"); var displayControlClazz = classLoader.loadClass("com.android.server.display.VirtualDisplayAdapter");
hookMethods(displayControlClazz, CreateVirtualDisplayLockedHooker.class, "createVirtualDisplayLocked"); hookMethods(displayControlClazz, CreateVirtualDisplayLockedHooker.class, "createVirtualDisplayLocked");
} }
@TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
private void hookActivityTaskManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookActivityTaskManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var activityTaskManagerServiceClazz = classLoader.loadClass("com.android.server.wm.ActivityTaskManagerService"); var activityTaskManagerServiceClazz = classLoader.loadClass("com.android.server.wm.ActivityTaskManagerService");
var iBinderClazz = classLoader.loadClass("android.os.IBinder"); var iBinderClazz = classLoader.loadClass("android.os.IBinder");
@ -280,7 +268,7 @@ public class DisableFlagSecure extends XposedModule {
hook(method, ReturnNullHooker.class); hook(method, ReturnNullHooker.class);
} }
@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
private void hookWindowManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookWindowManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var windowManagerServiceClazz = classLoader.loadClass("com.android.server.wm.WindowManagerService"); var windowManagerServiceClazz = classLoader.loadClass("com.android.server.wm.WindowManagerService");
var iScreenRecordingCallbackClazz = classLoader.loadClass("android.window.IScreenRecordingCallback"); var iScreenRecordingCallbackClazz = classLoader.loadClass("android.window.IScreenRecordingCallback");
@ -288,20 +276,18 @@ public class DisableFlagSecure extends XposedModule {
hook(method, ReturnFalseHooker.class); hook(method, ReturnFalseHooker.class);
} }
@TargetApi(Build.VERSION_CODES.S)
private void hookActivityManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookActivityManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var activityTaskManagerServiceClazz = classLoader.loadClass("com.android.server.am.ActivityManagerService"); var activityTaskManagerServiceClazz = classLoader.loadClass("com.android.server.am.ActivityManagerService");
var method = activityTaskManagerServiceClazz.getDeclaredMethod("checkPermission", String.class, int.class, int.class); var method = activityTaskManagerServiceClazz.getDeclaredMethod("checkPermission", String.class, int.class, int.class);
hook(method, CheckPermissionHooker.class); hook(method, CheckPermissionHooker.class);
} }
@TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
private void hookHyperOS(ClassLoader classLoader) throws ClassNotFoundException { private void hookHyperOS(ClassLoader classLoader) throws ClassNotFoundException {
var windowManagerServiceImplClazz = classLoader.loadClass("com.android.server.wm.WindowManagerServiceImpl"); var windowManagerServiceImplClazz = classLoader.loadClass("com.android.server.wm.WindowManagerServiceImpl");
hookMethods(windowManagerServiceImplClazz, ReturnFalseHooker.class, "notAllowCaptureDisplay"); hookMethods(windowManagerServiceImplClazz, ReturnFalseHooker.class, "notAllowCaptureDisplay");
} }
@TargetApi(Build.VERSION_CODES.S)
private void hookScreenshotHardwareBuffer(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookScreenshotHardwareBuffer(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var screenshotHardwareBufferClazz = classLoader.loadClass( var screenshotHardwareBufferClazz = classLoader.loadClass(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ? Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ?
@ -311,7 +297,7 @@ public class DisableFlagSecure extends XposedModule {
hook(method, ReturnFalseHooker.class); hook(method, ReturnFalseHooker.class);
} }
@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
private void hookOplusScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { private void hookOplusScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
var oplusScreenCaptureClazz = classLoader.loadClass("com.oplus.screenshot.OplusScreenCapture$CaptureArgs$Builder"); var oplusScreenCaptureClazz = classLoader.loadClass("com.oplus.screenshot.OplusScreenCapture$CaptureArgs$Builder");
var method = oplusScreenCaptureClazz.getDeclaredMethod("setUid", long.class); var method = oplusScreenCaptureClazz.getDeclaredMethod("setUid", long.class);
@ -324,7 +310,6 @@ public class DisableFlagSecure extends XposedModule {
hookMethods(longshotMainClazz, ReturnFalseHooker.class, "hasSecure"); hookMethods(longshotMainClazz, ReturnFalseHooker.class, "hasSecure");
} }
@TargetApi(Build.VERSION_CODES.S)
private void hookOneUI(ClassLoader classLoader) throws ClassNotFoundException { private void hookOneUI(ClassLoader classLoader) throws ClassNotFoundException {
var wmScreenshotControllerClazz = classLoader.loadClass("com.android.server.wm.WmScreenshotController"); var wmScreenshotControllerClazz = classLoader.loadClass("com.android.server.wm.WmScreenshotController");
hookMethods(wmScreenshotControllerClazz, ReturnTrueHooker.class, "canBeScreenshotTarget"); hookMethods(wmScreenshotControllerClazz, ReturnTrueHooker.class, "canBeScreenshotTarget");
@ -348,9 +333,12 @@ public class DisableFlagSecure extends XposedModule {
@BeforeInvocation @BeforeInvocation
public static void before(@NonNull BeforeHookCallback callback) { public static void before(@NonNull BeforeHookCallback callback) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
String stack = Log.getStackTraceString(new Throwable()); var stackTrace = new Throwable().getStackTrace();
if (stack.contains("createVirtualDisplayLocked")) { for (int i = 4; i < stackTrace.length && i < 8; i++) {
return; var name = stackTrace[i].getMethodName();
if (name.equals("createVirtualDisplayLocked")) {
return;
}
} }
} }
callback.getArgs()[1] = true; callback.getArgs()[1] = true;
@ -398,7 +386,7 @@ public class DisableFlagSecure extends XposedModule {
@BeforeInvocation @BeforeInvocation
public static void before(@NonNull BeforeHookCallback callback) { public static void before(@NonNull BeforeHookCallback callback) {
var caller = (int) callback.getArgs()[2]; var caller = (int) callback.getArgs()[2];
if (caller != 1000 && callback.getArgs()[1] == null) { if (caller >= 10000 && callback.getArgs()[1] == null) {
// not os and not media projection // not os and not media projection
return; return;
} }
@ -420,12 +408,22 @@ public class DisableFlagSecure extends XposedModule {
@BeforeInvocation @BeforeInvocation
public static void before(@NonNull BeforeHookCallback callback) { public static void before(@NonNull BeforeHookCallback callback) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
String stack = Log.getStackTraceString(new Throwable()); var walker = StackWalker.getInstance();
// don't change surface flags, but passing other checks var match = walker.walk(frames -> frames
if (stack.contains("setInitialSurfaceControlProperties") .map(StackWalker.StackFrame::getMethodName)
|| stack.contains("createSurfaceLocked")) { .limit(6)
return; .skip(2)
.anyMatch(s -> s.equals("setInitialSurfaceControlProperties") || s.equals("createSurfaceLocked")));
if (match) return;
} else {
var stackTrace = new Throwable().getStackTrace();
for (int i = 4; i < stackTrace.length && i < 8; i++) {
var name = stackTrace[i].getMethodName();
if (name.equals("setInitialSurfaceControlProperties") ||
name.equals("createSurfaceLocked")) {
return;
}
} }
} }
callback.returnAndSkip(false); callback.returnAndSkip(false);

View File

@ -1,10 +1,10 @@
plugins { plugins {
id 'com.android.application' version '8.7.2' apply false id 'com.android.application' version '8.9.1' apply false
id 'org.lsposed.lsplugin.jgit' version "1.1" id 'org.lsposed.lsplugin.jgit' version "1.1"
} }
tasks.register('clean', Delete) { tasks.register('clean', Delete) {
delete rootProject.buildDir delete rootProject.layout.buildDirectory
} }
var repo = jgit.repo(true) var repo = jgit.repo(true)

Binary file not shown.

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

5
gradlew vendored
View File

@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command: # Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped. # and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line. # treated as '${Hostname}' itself on the command line.

View File

@ -9,12 +9,10 @@ android {
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 35 targetSdk 35
versionCode 1
versionName "1.0"
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_21
} }
} }