├── framework-compile
├── .gitignore
├── consumer-rules.pro
├── src
│ └── main
│ │ ├── java
│ │ └── android
│ │ │ ├── app
│ │ │ ├── LoadedApk.java
│ │ │ └── ActivityThread.java
│ │ │ └── content
│ │ │ └── res
│ │ │ └── CompatibilityInfo.java
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── assets
│ │ │ └── xposed_init
│ │ ├── cpp
│ │ │ ├── hook
│ │ │ │ ├── hook_time.h
│ │ │ │ ├── hook_dlfcn.h
│ │ │ │ ├── hook_env.h
│ │ │ │ ├── hook_io.h
│ │ │ │ ├── hook_string.h
│ │ │ │ ├── hook_vfs.h
│ │ │ │ ├── hook_properties.h
│ │ │ │ ├── hook_syscall.h
│ │ │ │ ├── canonicalize.h
│ │ │ │ ├── hook_unistd.h
│ │ │ │ ├── hook_exec.h
│ │ │ │ ├── hook_stat.h
│ │ │ │ ├── hook_java_native.h
│ │ │ │ ├── hook_common.cpp
│ │ │ │ ├── hook_env.cpp
│ │ │ │ ├── hook_string.cpp
│ │ │ │ ├── hook_time.cpp
│ │ │ │ ├── hook_jni_native_interface.h
│ │ │ │ ├── hook.map.txt
│ │ │ │ ├── hook_vfs.cpp
│ │ │ │ ├── hook_properties.cpp
│ │ │ │ └── hook_stat.cpp
│ │ │ ├── common
│ │ │ │ ├── module_config.h
│ │ │ │ ├── gtype.h
│ │ │ │ ├── alog.h
│ │ │ │ ├── maps_util.h
│ │ │ │ ├── scoped_local_ref.h
│ │ │ │ └── scoped_utf_chars.h
│ │ │ ├── module_config.h.in
│ │ │ └── interface
│ │ │ │ └── variable_length_object.h
│ │ ├── ic_launcher-playstore.png
│ │ ├── res
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── menu
│ │ │ │ ├── menu_setting.xml
│ │ │ │ ├── navigation.xml
│ │ │ │ └── menu_edit.xml
│ │ │ ├── values
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── arrays.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── shape.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── type.xml
│ │ │ ├── drawable
│ │ │ │ ├── ic_arrow_24dp.xml
│ │ │ │ ├── ic_add_black_24dp.xml
│ │ │ │ ├── ic_state_warning_24dp.xml
│ │ │ │ ├── ic_modify_24dp.xml
│ │ │ │ ├── ic_state_normal_24dp.xml
│ │ │ │ ├── ic_descriptor_24dp.xml
│ │ │ │ ├── ic_sync_24dp.xml
│ │ │ │ ├── ic_wechat_public_24dp.xml
│ │ │ │ ├── ic_delete_24dp.xml
│ │ │ │ ├── ic_shared_24dp.xml
│ │ │ │ ├── ic_github_24dp.xml
│ │ │ │ ├── ic_open_file_24dp.xml
│ │ │ │ ├── ic_donate_24dp.xml
│ │ │ │ ├── ic_wechat_24dp.xml
│ │ │ │ └── ic_setting_24dp.xml
│ │ │ ├── layout
│ │ │ │ ├── fragment_recycler_view.xml
│ │ │ │ ├── item_switch_layout.xml
│ │ │ │ ├── select_add_view.xml
│ │ │ │ ├── recycle_progress_layout.xml
│ │ │ │ ├── appcompat_app_bar.xml
│ │ │ │ ├── settings_activity.xml
│ │ │ │ ├── main_fragment_item.xml
│ │ │ │ ├── recycle_add_item_layout.xml
│ │ │ │ ├── edit_item_dialog_fragment.xml
│ │ │ │ ├── fragment_string_item.xml
│ │ │ │ ├── edit_string_view.xml
│ │ │ │ ├── item_card_view.xml
│ │ │ │ ├── package_add_item_layout.xml
│ │ │ │ ├── key_value_add_view_layout.xml
│ │ │ │ └── item_fragment.xml
│ │ │ └── xml
│ │ │ │ └── setting_preferences.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── sanfengandroid
│ │ │ │ ├── xp
│ │ │ │ ├── hooks
│ │ │ │ │ ├── IHook.java
│ │ │ │ │ ├── XposedFilter.java
│ │ │ │ │ ├── HookSettingContentProvider.java
│ │ │ │ │ ├── HookDebugCheck.java
│ │ │ │ │ └── HookNativeMethodChecked.java
│ │ │ │ ├── ProcessMode.java
│ │ │ │ ├── XpDataMode.java
│ │ │ │ ├── ObservableMap.java
│ │ │ │ └── RemoteCall.java
│ │ │ │ ├── common
│ │ │ │ ├── model
│ │ │ │ │ ├── StackElementModel.java
│ │ │ │ │ ├── base
│ │ │ │ │ │ ├── DataModelFilterable.java
│ │ │ │ │ │ ├── ShowDataModel.java
│ │ │ │ │ │ ├── EditDataModel.java
│ │ │ │ │ │ ├── BaseShowDataModel.java
│ │ │ │ │ │ ├── BaseKeyValueEditDataModel.java
│ │ │ │ │ │ └── BaseKeyValueModel.java
│ │ │ │ │ ├── SymbolBlacklistModel.java
│ │ │ │ │ ├── ComponentKeywordModel.java
│ │ │ │ │ ├── FileBlacklistModel.java
│ │ │ │ │ ├── SystemPropertyModel.java
│ │ │ │ │ └── LoadClassModel.java
│ │ │ │ ├── Const.java
│ │ │ │ ├── proxy
│ │ │ │ │ ├── ProxyInputStream.java
│ │ │ │ │ └── ProxyOutStream.java
│ │ │ │ ├── util
│ │ │ │ │ └── NetUtil.java
│ │ │ │ └── bean
│ │ │ │ │ └── EnvBean.java
│ │ │ │ ├── fakeinterface
│ │ │ │ ├── NativeHookStatus.java
│ │ │ │ ├── MapsMode.java
│ │ │ │ ├── FileAccessMask.java
│ │ │ │ ├── NativeCall.java
│ │ │ │ ├── NativeOption.java
│ │ │ │ ├── NativeConfig.java
│ │ │ │ └── Installer.java
│ │ │ │ └── datafilter
│ │ │ │ ├── listener
│ │ │ │ ├── ICallExternal.java
│ │ │ │ ├── DataModelItemClickListener.java
│ │ │ │ ├── OnItemClickListener.java
│ │ │ │ └── AppFilterable.java
│ │ │ │ ├── viewmodel
│ │ │ │ ├── SingleLiveData.java
│ │ │ │ └── AppBean.java
│ │ │ │ ├── XpApplication.java
│ │ │ │ ├── ui
│ │ │ │ ├── FileBrowseLayout.java
│ │ │ │ ├── activties
│ │ │ │ │ └── EditItemDialogActivity.java
│ │ │ │ └── ViewAnimation.java
│ │ │ │ └── XPContentProvider.java
│ │ └── AndroidManifest.xml
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── sanfengandroid
│ │ │ └── datafilter
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── sanfengandroid
│ │ └── datafilter
│ │ └── ExampleInstrumentedTest.java
└── proguard-rules.pro
├── capture
├── cn
│ ├── home.png
│ ├── dlsym_hidden.png
│ ├── package_hidden.png
│ └── package_configuration.png
└── en
│ ├── home.png
│ ├── dlsym_hidden.png
│ ├── package_hidden.png
│ └── package_configuration.png
├── .gitmodules
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── local.properties.sample
├── docs
├── cn
│ └── app_changes.md
└── en
│ └── app_changes.md
├── settings.gradle
├── gradle.properties
├── .github
└── workflows
│ └── android.yml
└── gradlew.bat
/framework-compile/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/framework-compile/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /src/main/libs
--------------------------------------------------------------------------------
/app/src/main/assets/xposed_init:
--------------------------------------------------------------------------------
1 | com.sanfengandroid.xp.XposedEntry
--------------------------------------------------------------------------------
/capture/cn/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/cn/home.png
--------------------------------------------------------------------------------
/capture/en/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/en/home.png
--------------------------------------------------------------------------------
/capture/cn/dlsym_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/cn/dlsym_hidden.png
--------------------------------------------------------------------------------
/capture/en/dlsym_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/en/dlsym_hidden.png
--------------------------------------------------------------------------------
/capture/cn/package_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/cn/package_hidden.png
--------------------------------------------------------------------------------
/capture/en/package_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/en/package_hidden.png
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "fake-linker"]
2 | path = fake-linker
3 | url = https://github.com/sanfengAndroid/fake-linker.git
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/capture/cn/package_configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/cn/package_configuration.png
--------------------------------------------------------------------------------
/capture/en/package_configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/capture/en/package_configuration.png
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_time.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/cpp/common/module_config.h:
--------------------------------------------------------------------------------
1 |
2 | #define HOOK_LOG_LEVEL 2
3 | #define MODULE_VERSION 1500
4 | #define MODULE_VERSION_NAME "1.5"
5 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_dlfcn.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_env.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2021/2/19.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_io.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_string.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_vfs.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_properties.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2021/2/19.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/cpp/module_config.h.in:
--------------------------------------------------------------------------------
1 |
2 | #define HOOK_LOG_LEVEL @HOOK_LOG_LEVEL@
3 | #define MODULE_VERSION @MODULE_VERSION@
4 | #define MODULE_VERSION_NAME @MODULE_VERSION_NAME@
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sanfengAndroid/FakeXposed/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_syscall.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 | #include "hook_common.h"
7 |
8 | HOOK_DECLARE(long, syscall, long number, ...);
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/canonicalize.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/27.
3 | //
4 |
5 | #pragma once
6 |
7 |
8 | extern "C" int canonicalize(const char *original, char *resolved, int len);
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_unistd.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
9 |
10 | HOOK_DECLARE(int, unlink, const char *path);
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_exec.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
9 | HOOK_DECLARE(int, execvp, const char *name, char *const *argv);
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_stat.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
9 |
10 | HOOK_DECLARE(int, stat, const char *path, struct stat *buf);
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_java_native.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2021/2/26.
3 | //
4 |
5 | #pragma once
6 |
7 | #include "hook_common.h"
8 |
9 | class JNHook{
10 | public:
11 | static bool InitJavaNativeHook(JNIEnv *env);
12 | };
13 |
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | .idea
4 | /local.properties
5 | /.idea/caches
6 | /.idea/libraries
7 | /.idea/modules.xml
8 | /.idea/workspace.xml
9 | /.idea/navEditor.xml
10 | /.idea/assetWizardSettings.xml
11 | .DS_Store
12 | /build
13 | /captures
14 | .externalNativeBuild
15 | .cxx
16 | local.properties
17 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_common.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #include "hook_common.h"
6 | #include
7 |
8 | int force_O_LARGEFILE(int flags) {
9 | #if defined(__LP64__)
10 | return flags; // No need, and aarch64's strace gets confused.
11 | #else
12 | return flags | O_LARGEFILE;
13 | #endif
14 | }
--------------------------------------------------------------------------------
/app/src/main/cpp/common/gtype.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by lenovo-s on 2019/4/15.
3 | //
4 | #pragma once
5 |
6 | #include
7 |
8 | #define LINE_MAX 4096
9 |
10 | typedef void *gpointer;
11 | typedef intptr_t gssize;
12 | typedef uintptr_t gsize;
13 | typedef uint64_t gaddress;
14 | #define GSIZE_TO_POINTER(s) ((gpointer) (gsize) (s))
15 | #define GPOINTER_TO_SIZE(p) ((gsize) (p))
16 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_env.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2021/2/19.
3 | //
4 |
5 | #include "hook_env.h"
6 |
7 | FUN_INTERCEPT HOOK_DEF(char*, getenv, const char *name) {
8 | LOGMV("Monitor: getenv name: %s", name);
9 | char *value = get_orig_getenv()(name);
10 | if (value == nullptr) {
11 | return value;
12 | }
13 | char *result = FXHandler::EnvironmentReplace(name, value);
14 | return result == nullptr ? value : result;
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_string.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #include "hook_string.h"
6 |
7 |
8 | FUN_INTERCEPT HOOK_DEF(int, strcasecmp, const char *s1, const char *s2) {
9 | LOGMV("s1: %s, s2: %s\n", s1, s2);
10 | return get_orig_strcasecmp()(s1, s2);
11 | }
12 |
13 | FUN_INTERCEPT HOOK_DEF_CPP(const char *, strcasestr, const char *haystack, const char *needle) {
14 | LOGMV("haystack: %s, needle: %s", haystack, needle);
15 | return get_orig_strcasestr()(haystack, needle);
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/local.properties.sample:
--------------------------------------------------------------------------------
1 | ## This is the build configuration file
2 |
3 | # Android sign file path
4 | storeFile=string
5 | # Android sign file password
6 | storePassword=string
7 | # Android sign configuration key alias
8 | keyAlias=string
9 | # Android sign key password
10 | keyPassword=string
11 |
12 | # Android build target SDK
13 | targetSdk=int
14 | # Specify the currently build api level, the default is the latest version 30
15 | buildApi=int
16 | # Configure the lowest level of native library to print log, the default is 2
17 | logLevel=int
--------------------------------------------------------------------------------
/docs/cn/app_changes.md:
--------------------------------------------------------------------------------
1 | # FakeXposed 更新日志
2 |
3 | ### v1.1
4 |
5 | - 修复低版本创建ContextImpl错误导致后面无法继续
6 | - 修复Android7以下libcutil.so查找属性时导致循环依赖递归调用问题
7 | - 修复Android7以下Java Hook System类问题
8 | - 修复maps规则不生效
9 | - 修复环境变量不生效问题
10 | - 修复重定向路径反向读取问题
11 | - 修复遗漏的syscall open调用号
12 | - 更改新的Runtime.exec匹配规则并生效
13 | - 添加Android 25支持
14 |
15 | ### v1.3
16 | - 修改数据读取模式,调整targetSdk为23,旧版本需要卸载安装,Android9以下直接使用XsharedPreference
17 | - 更改部分Java Hook为Native Java Hook,更加通用稳定和防检测
18 | - 默认添加Edxposed包名到黑名单,解决自身无法访问时其它应用可以访问
19 | - 部分代码优化
20 |
21 | ### v1.4
22 | - 修改包名和应用介绍
23 | - 添加测试选项
24 |
25 | ### v1.5
26 | - 修复Android7以下循环依赖问题
27 | - 修复部分动态代理出错
28 | - 修复部分情况下Android11读取不到文件路径
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_time.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/28.
3 | //
4 |
5 | #include "hook_time.h"
6 | #include
7 |
8 | #include "io_redirect.h"
9 |
10 | FUN_INTERCEPT HOOK_DEF(int, utimes, const char *path, const timeval tv[2]) {
11 | IS_BLACKLIST_FILE(path);
12 | return get_orig_utimes()(IoRedirect::GetRedirect(path), tv);
13 | }
14 |
15 | FUN_INTERCEPT HOOK_DEF(int, utime, const char *path, const void *times) {
16 | IS_BLACKLIST_FILE(path);
17 | return get_orig_utime()(IoRedirect::GetRedirect(path), times);
18 | }
19 |
20 |
21 | FUN_INTERCEPT HOOK_DEF(int, lutimes, const char *path, const struct timeval times[2]) {
22 | IS_BLACKLIST_FILE(path);
23 | return get_orig_lutimes()(IoRedirect::GetRedirect(path), times);
24 | }
--------------------------------------------------------------------------------
/app/src/main/cpp/common/alog.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/11/6.
3 | //
4 | #pragma once
5 |
6 | #include
7 |
8 | #define LOG_TAG "HookLog"
9 |
10 | extern int g_log_level;
11 |
12 | #define _PRINT(v, format, ...) \
13 | do { \
14 | if(g_log_level <= (v)) __android_log_print(v, LOG_TAG, format, ##__VA_ARGS__); \
15 | }while(0)
16 |
17 | #define LOGV(format, ...) _PRINT(ANDROID_LOG_VERBOSE, format, ##__VA_ARGS__)
18 | #define LOGD(format, ...) _PRINT(ANDROID_LOG_DEBUG, format, ##__VA_ARGS__)
19 | #define LOGI(format, ...) _PRINT(ANDROID_LOG_INFO, format, ##__VA_ARGS__)
20 | #define LOGW(format, ...) _PRINT(ANDROID_LOG_WARN, format, ##__VA_ARGS__)
21 | #define LOGE(format, ...) _PRINT(ANDROID_LOG_ERROR, format, ##__VA_ARGS__)
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_setting.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
--------------------------------------------------------------------------------
/framework-compile/src/main/java/android/app/LoadedApk.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package android.app;
19 |
20 | public class LoadedApk {
21 | }
22 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | include ':framework-compile'
19 | include ':app'
20 | rootProject.name = "FakeXposed"
21 | include ':fake-linker'
22 |
--------------------------------------------------------------------------------
/framework-compile/src/main/java/android/content/res/CompatibilityInfo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package android.content.res;
19 |
20 | public class CompatibilityInfo {
21 | }
22 |
--------------------------------------------------------------------------------
/framework-compile/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/framework-compile/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/xp/hooks/IHook.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.xp.hooks;
19 |
20 | public interface IHook {
21 | void hook(ClassLoader loader) throws Throwable;
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/xp/ProcessMode.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.xp;
19 |
20 | public enum ProcessMode {
21 | /**
22 | * 运行在自身进程
23 | */
24 | SELF,
25 | /*
26 | * 运行在Hook App的进程
27 | * */
28 | HOOK_APP,
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/navigation.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | #
16 | #
17 |
18 | #Fri Oct 30 09:33:11 CST 2020
19 | distributionBase=GRADLE_USER_HOME
20 | distributionPath=wrapper/dists
21 | zipStoreBase=GRADLE_USER_HOME
22 | zipStorePath=wrapper/dists
23 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/xp/XpDataMode.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.xp;
19 |
20 | /**
21 | * 数据可访问的模式
22 | *
23 | * @author sanfengAndroid
24 | */
25 |
26 | public enum XpDataMode {
27 | /**
28 | * 使用XSharedPreference,自身可访问也使用XSharedPreference
29 | */
30 | X_SP,
31 | /**
32 | * App ContentProvider模式
33 | */
34 | APP_CALL
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 | - Reply
22 | - Reply to all
23 |
24 |
25 |
26 | - reply
27 | - reply_all
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/common/model/StackElementModel.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.common.model;
19 |
20 | public class StackElementModel extends LoadClassModel {
21 |
22 | @Override
23 | public boolean equals(Object o) {
24 | return super.equals(o);
25 | }
26 |
27 | @Override
28 | public int hashCode() {
29 | return super.hashCode();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 | 20dp
20 | 16dp
21 | 16dp
22 | 260dp
23 | 55dp
24 | 105dp
25 | 8dp
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_state_warning_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_recycler_view.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/fakeinterface/NativeHookStatus.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.fakeinterface;
19 |
20 | public enum NativeHookStatus {
21 | /*
22 | * 关闭
23 | * */
24 | DISABLE(0),
25 | /**
26 | * 开启
27 | */
28 | OPEN(1);
29 |
30 | private final int option;
31 |
32 | NativeHookStatus(int i) {
33 | this.option = i;
34 | }
35 |
36 | public int getOption() {
37 | return option;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
23 | -dontusemixedcaseclassnames
24 |
25 | -keep public class com.sanfengandroid.fakeinterface.* {
26 | *;
27 | }
28 | -keep public class com.sanfengandroid.xp.XposedEntry{
29 |
30 | }
31 |
32 | -keep public class com.sanfengandroid.datafilter.ui.fragments.MainFragment{
33 | public static boolean isActive();
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/common/model/base/DataModelFilterable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.common.model.base;
19 |
20 | public interface DataModelFilterable {
21 | /**
22 | * 查询是否匹配
23 | *
24 | * @param condition 过滤添加
25 | * @return 是否过滤
26 | */
27 | boolean filter(String condition);
28 |
29 | /**
30 | * 查询系统App
31 | *
32 | * @return 是否是系统App
33 | */
34 | boolean isSystemApp();
35 |
36 | boolean isXposedApp();
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/datafilter/listener/ICallExternal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.datafilter.listener;
19 |
20 | import android.content.Intent;
21 |
22 | public interface ICallExternal {
23 |
24 | default void callExternalIntent(Intent intent, int code) {
25 | }
26 |
27 | default void setExternalCallback(ICallExternal listener) {
28 | }
29 |
30 | default void callbackExternalResult(int requestCode, int resultCode, Intent data) {
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sanfengandroid/common/Const.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.common;
19 |
20 | import android.net.Uri;
21 |
22 | import com.sanfengandroid.datafilter.BuildConfig;
23 |
24 | public class Const {
25 | public static final String GLOBAL_PACKAGE = "all";
26 | public static final int JAVA_MONITOR_STATE = 1;
27 | private static final String XP_REMOTE_PATH = "xp";
28 | public static final Uri XP_CONTENT_URI = Uri.parse("content://" + BuildConfig.APPLICATION_ID + "/" + XP_REMOTE_PATH);
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/test/java/com/sanfengandroid/datafilter/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 FakeXposed by sanfengAndroid.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | *
16 | */
17 |
18 | package com.sanfengandroid.datafilter;
19 |
20 | import org.junit.Test;
21 |
22 | import static org.junit.Assert.*;
23 |
24 | /**
25 | * Example local unit test, which will execute on the development machine (host).
26 | *
27 | * @see Testing documentation
28 | */
29 | public class ExampleUnitTest {
30 | @Test
31 | public void addition_isCorrect() {
32 | assertEquals(4, 2 + 2);
33 | }
34 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_modify_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_state_normal_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_switch_layout.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/cpp/hook/hook_jni_native_interface.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by beich on 2020/12/18.
3 | //
4 |
5 | #pragma once
6 |
7 | #include
8 | #include