A fork of NPatch allowing to patch API 101 plugins (gkms-localify only)
Go to file
AAGaming e4657377b5
Fix Map.of crash on certain Motorola devices (#186)
Using Map.of here results in compiler optimization generating a class
`a.a` with a method `a` that returns the Map.

The class looks like this (jadx decompilation):
```java
package a;

import java.util.AbstractMap;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/* loaded from: classes.dex */
public abstract /* synthetic */ class a {
    public static /* synthetic */ Map a() {
        Map.Entry[] entryArr = {new AbstractMap.SimpleEntry("arm", "armeabi-v7a"), new AbstractMap.SimpleEntry("arm64", "arm64-v8a"), new AbstractMap.SimpleEntry("x86", "x86"), new AbstractMap.SimpleEntry("x86_64", "x86_64")};
        HashMap hashMap = new HashMap(4);
        for (int i = 0; i < 4; i++) {
            Map.Entry entry = entryArr[i];
            Object key = entry.getKey();
            Objects.requireNonNull(key);
            Object value = entry.getValue();
            Objects.requireNonNull(value);
            if (hashMap.put(key, value) != null) {
                throw new IllegalArgumentException("duplicate key: " + key);
            }
        }
        return Collections.unmodifiableMap(hashMap);
    }
}
```

For whatever ridiculous reason, on a moto g stylus 5G (2022), when this
method is called in `LSPAppComponentFactoryStub`, the app crashes with
`java.lang.NoSuchMethodError: No static method a()Ljava/util/Map; in
class La/a; or its super classes`. Using a normal HashMap here instead
prevents this optimization from occurring, which prevents the crash.
2023-05-01 23:56:24 +08:00
.github [skip ci] Update bugreport template 2023-01-28 17:59:07 +08:00
apkzlib Update proguard 2022-04-06 11:17:19 +08:00
core@5666dca1e3 Update core to 1.8.6 (#168) 2023-01-28 11:54:06 +08:00
gradle/wrapper Update core to 1.8.6 (#168) 2023-01-28 11:54:06 +08:00
jar Support bootstrapping loader dynamically for local mode (#118) 2022-10-21 15:24:16 +08:00
manager Update core to 1.8.6 (#168) 2023-01-28 11:54:06 +08:00
meta-loader Fix Map.of crash on certain Motorola devices (#186) 2023-05-01 23:56:24 +08:00
patch Remove mandatory original signature check (#185) 2023-04-21 21:21:25 +08:00
patch-loader Update core to 1.8.6 (#168) 2023-01-28 11:54:06 +08:00
share Fix modules missing after update loader for integrated mode 2022-11-13 22:43:39 +08:00
.gitattributes normalize eol 2021-06-02 17:20:50 +08:00
.gitignore done with project structure refine 2021-04-07 12:06:30 +08:00
.gitmodules Compare AXML attribute name by resource ID 2022-09-04 16:21:08 +08:00
LICENSE Create LICENSE 2021-04-09 11:48:53 +08:00
README.md [skip ci] Update badge 2022-12-19 22:43:17 +08:00
build.gradle.kts Fix core version display 2023-01-28 17:08:26 +08:00
crowdin.yml Create crowdin.yml 2022-03-08 10:54:31 +08:00
gradle.properties Update core to 1.8.6 (#168) 2023-01-28 11:54:06 +08:00
gradlew Update deps 2022-09-22 17:52:59 +08:00
gradlew.bat Update deps 2022-09-22 17:52:59 +08:00
settings.gradle.kts Fixing Manifest Parsing - Shifting from axmlprinter to axmlparser (#180) 2023-04-09 22:58:48 +08:00

README.md

LSPatch Framework

Build Crowdin Download Total

Introduction

Rootless implementation of LSPosed framework, integrating Xposed API by inserting dex and so into the target APK.

Supported Versions

  • Min: Android 9
  • Max: In theory, same with LSPosed

Download

For stable releases, please go to Github Releases page
For canary build, please check Github Actions
Note: debug builds are only available in Github Actions

Usage

  • Through jar
  1. Download lspatch.jar
  2. Run java -jar lspatch.jar
  • Through manager
  1. Download and install manager.apk on an Android device
  2. Follow the instructions of the manager app

Translation Contributing

You can contribute translation here.

Credits

License

LSPatch is licensed under the GNU General Public License v3 (GPL-3) (http://www.gnu.org/copyleft/gpl.html).