├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── dependabot.yml └── workflows │ ├── core.yml │ └── crowdin.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ ├── common │ └── res │ │ ├── drawable-nodpi │ │ └── ic_launcher.xml │ │ ├── drawable │ │ ├── ic_launcher_foreground.xml │ │ └── ic_outline_extension_24.xml │ │ ├── mipmap-anydpi-v26 │ │ └── ic_launcher.xml │ │ ├── values-night-v31 │ │ └── colors.xml │ │ ├── values-night │ │ └── colors.xml │ │ ├── values-v31 │ │ └── colors.xml │ │ └── values │ │ └── colors.xml │ ├── debug │ └── java │ │ └── org │ │ └── lsposed │ │ └── manager │ │ └── util │ │ └── Telemetry.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── webview │ │ │ ├── colors_dark.css │ │ │ ├── colors_light.css │ │ │ ├── markdown.css │ │ │ ├── syntax.css │ │ │ ├── syntax_dark.css │ │ │ ├── template.html │ │ │ └── template_dark.html │ ├── java │ │ ├── com │ │ │ └── google │ │ │ │ └── android │ │ │ │ └── material │ │ │ │ ├── appbar │ │ │ │ └── SubtitleCollapsingToolbarLayout.java │ │ │ │ └── internal │ │ │ │ └── SubtitleCollapsingTextHelper.java │ │ └── org │ │ │ └── lsposed │ │ │ └── manager │ │ │ ├── App.java │ │ │ ├── ConfigManager.java │ │ │ ├── Constants.java │ │ │ ├── adapters │ │ │ ├── AppHelper.java │ │ │ └── ScopeAdapter.java │ │ │ ├── receivers │ │ │ └── LSPManagerServiceHolder.java │ │ │ ├── repo │ │ │ ├── RepoLoader.java │ │ │ └── model │ │ │ │ ├── Collaborator.java │ │ │ │ ├── OnlineModule.java │ │ │ │ ├── Release.java │ │ │ │ └── ReleaseAsset.java │ │ │ ├── ui │ │ │ ├── activity │ │ │ │ ├── CrashReportActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── base │ │ │ │ │ └── BaseActivity.java │ │ │ ├── dialog │ │ │ │ ├── BlurBehindDialogBuilder.java │ │ │ │ ├── FlashDialogBuilder.java │ │ │ │ └── ShortcutDialog.java │ │ │ ├── fragment │ │ │ │ ├── AppListFragment.java │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── CompileDialogFragment.java │ │ │ │ ├── HomeFragment.java │ │ │ │ ├── LogsFragment.java │ │ │ │ ├── ModulesFragment.java │ │ │ │ ├── RecyclerViewDialogFragment.java │ │ │ │ ├── RepoFragment.java │ │ │ │ ├── RepoItemFragment.java │ │ │ │ └── SettingsFragment.java │ │ │ └── widget │ │ │ │ ├── EmptyStateRecyclerView.java │ │ │ │ ├── ExpandableTextView.java │ │ │ │ ├── LinkifyTextView.java │ │ │ │ ├── ScrollWebView.java │ │ │ │ └── StatefulRecyclerView.java │ │ │ └── util │ │ │ ├── AppIconModelLoader.java │ │ │ ├── AppModule.java │ │ │ ├── BackupUtils.java │ │ │ ├── DoHDNS.java │ │ │ ├── EmptyAccessibilityDelegate.java │ │ │ ├── ModuleUtil.java │ │ │ ├── NavUtil.java │ │ │ ├── SimpleStatefulAdaptor.java │ │ │ ├── ThemeUtil.java │ │ │ ├── UpdateUtil.java │ │ │ └── chrome │ │ │ ├── CustomTabsURLSpan.java │ │ │ └── LinkTransformationMethod.java │ └── res │ │ ├── anim │ │ ├── fragment_enter.xml │ │ ├── fragment_enter_pop.xml │ │ ├── fragment_exit.xml │ │ └── fragment_exit_pop.xml │ │ ├── color │ │ ├── switchbar_text_dark.xml │ │ └── switchbar_text_light.xml │ │ ├── drawable │ │ ├── ic_assignment_checkable.xml │ │ ├── ic_attach_file.xml │ │ ├── ic_baseline_add_24.xml │ │ ├── ic_baseline_arrow_back_24.xml │ │ ├── ic_baseline_assignment_24.xml │ │ ├── ic_baseline_chat_24.xml │ │ ├── ic_baseline_extension_24.xml │ │ ├── ic_baseline_get_app_24.xml │ │ ├── ic_baseline_home_24.xml │ │ ├── ic_baseline_info_24.xml │ │ ├── ic_baseline_search_24.xml │ │ ├── ic_baseline_settings_24.xml │ │ ├── ic_baseline_settings_backup_restore_24.xml │ │ ├── ic_extension_checkable.xml │ │ ├── ic_get_app_checkable.xml │ │ ├── ic_home_checkable.xml │ │ ├── ic_keyboard_arrow_down.xml │ │ ├── ic_open_in_browser.xml │ │ ├── ic_outline_add_to_home_screen_24.xml │ │ ├── ic_outline_android_24.xml │ │ ├── ic_outline_app_shortcut_24.xml │ │ ├── ic_outline_assignment_24.xml │ │ ├── ic_outline_dark_mode_24.xml │ │ ├── ic_outline_dns_24.xml │ │ ├── ic_outline_format_color_fill_24.xml │ │ ├── ic_outline_get_app_24.xml │ │ ├── ic_outline_groups_24.xml │ │ ├── ic_outline_home_24.xml │ │ ├── ic_outline_invert_colors_24.xml │ │ ├── ic_outline_language_24.xml │ │ ├── ic_outline_merge_type_24.xml │ │ ├── ic_outline_palette_24.xml │ │ ├── ic_outline_restore_24.xml │ │ ├── ic_outline_science_24.xml │ │ ├── ic_outline_settings_24.xml │ │ ├── ic_outline_shield_24.xml │ │ ├── ic_outline_translate_24.xml │ │ ├── ic_refresh.xml │ │ ├── ic_round_bug_report_24.xml │ │ ├── ic_round_check_circle_24.xml │ │ ├── ic_round_error_outline_24.xml │ │ ├── ic_round_send_24.xml │ │ ├── ic_round_settings_24.xml │ │ ├── ic_round_update_24.xml │ │ ├── ic_round_warning_24.xml │ │ ├── ic_save.xml │ │ ├── ic_settings_checkable.xml │ │ ├── shortcut_ic_logs.xml │ │ ├── shortcut_ic_modules.xml │ │ ├── shortcut_ic_repo.xml │ │ ├── shortcut_ic_settings.xml │ │ └── simple_menu_background.xml │ │ ├── layout-sw600dp │ │ └── activity_main.xml │ │ ├── layout │ │ ├── activity_crash_report.xml │ │ ├── activity_main.xml │ │ ├── dialog_about.xml │ │ ├── dialog_item.xml │ │ ├── dialog_title.xml │ │ ├── fragment_app_list.xml │ │ ├── fragment_compile_dialog.xml │ │ ├── fragment_home.xml │ │ ├── fragment_pager.xml │ │ ├── fragment_repo.xml │ │ ├── fragment_settings.xml │ │ ├── item_log_textview.xml │ │ ├── item_master_switch.xml │ │ ├── item_module.xml │ │ ├── item_onlinemodule.xml │ │ ├── item_repo_loadmore.xml │ │ ├── item_repo_readme.xml │ │ ├── item_repo_recyclerview.xml │ │ ├── item_repo_release.xml │ │ ├── item_repo_title_description.xml │ │ ├── preference_recyclerview.xml │ │ ├── scrollable_dialog.xml │ │ └── swiperefresh_recyclerview.xml │ │ ├── menu-sw600dp │ │ └── navigation_menu.xml │ │ ├── menu │ │ ├── context_menu_modules.xml │ │ ├── menu_app_item.xml │ │ ├── menu_app_list.xml │ │ ├── menu_home.xml │ │ ├── menu_logs.xml │ │ ├── menu_modules.xml │ │ ├── menu_repo.xml │ │ ├── menu_repo_item.xml │ │ └── navigation_menu.xml │ │ ├── navigation │ │ ├── main_nav.xml │ │ ├── modules_nav.xml │ │ └── repo_nav.xml │ │ ├── values-af │ │ └── strings.xml │ │ ├── values-ar │ │ └── strings.xml │ │ ├── values-bg │ │ └── strings.xml │ │ ├── values-bn │ │ └── strings.xml │ │ ├── values-ca │ │ └── strings.xml │ │ ├── values-cs │ │ └── strings.xml │ │ ├── values-da │ │ └── strings.xml │ │ ├── values-de │ │ └── strings.xml │ │ ├── values-el │ │ └── strings.xml │ │ ├── values-en │ │ └── strings.xml │ │ ├── values-es │ │ └── strings.xml │ │ ├── values-et │ │ └── strings.xml │ │ ├── values-fa │ │ └── strings.xml │ │ ├── values-fi │ │ └── strings.xml │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-hi │ │ └── strings.xml │ │ ├── values-hr │ │ └── strings.xml │ │ ├── values-hu │ │ └── strings.xml │ │ ├── values-in │ │ └── strings.xml │ │ ├── values-it │ │ └── strings.xml │ │ ├── values-iw │ │ └── strings.xml │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-ko │ │ └── strings.xml │ │ ├── values-ku │ │ └── strings.xml │ │ ├── values-lt │ │ └── strings.xml │ │ ├── values-night │ │ ├── colors.xml │ │ └── styles.xml │ │ ├── values-nl │ │ └── strings.xml │ │ ├── values-no │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ └── strings.xml │ │ ├── values-pt │ │ └── strings.xml │ │ ├── values-ro │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ ├── values-sv │ │ └── strings.xml │ │ ├── values-sw600dp │ │ └── integer.xml │ │ ├── values-th │ │ └── strings.xml │ │ ├── values-tr │ │ └── strings.xml │ │ ├── values-uk │ │ └── strings.xml │ │ ├── values-ur │ │ └── strings.xml │ │ ├── values-v28 │ │ └── dimens.xml │ │ ├── values-v29 │ │ └── settings.xml │ │ ├── values-vi │ │ └── strings.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rHK │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ ├── values │ │ ├── arrays.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── colors_google.xml │ │ ├── dimens.xml │ │ ├── integer.xml │ │ ├── settings.xml │ │ ├── strings.xml │ │ ├── strings_untranslatable.xml │ │ ├── styles.xml │ │ ├── themes.xml │ │ ├── themes_custom.xml │ │ ├── themes_overlay.xml │ │ └── themes_override.xml │ │ └── xml │ │ ├── prefs.xml │ │ └── shortcuts.xml │ └── release │ └── java │ └── org │ └── lsposed │ └── manager │ └── util │ └── Telemetry.java ├── build.gradle.kts ├── core ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── java │ ├── android │ │ ├── app │ │ │ └── AndroidAppHelper.java │ │ └── content │ │ │ └── res │ │ │ ├── XModuleResources.java │ │ │ ├── XResForwarder.java │ │ │ └── XResources.java │ ├── de │ │ └── robv │ │ │ └── android │ │ │ └── xposed │ │ │ ├── IXposedHookCmdInit.java │ │ │ ├── IXposedHookInitPackageResources.java │ │ │ ├── IXposedHookLoadPackage.java │ │ │ ├── IXposedHookZygoteInit.java │ │ │ ├── IXposedMod.java │ │ │ ├── SELinuxHelper.java │ │ │ ├── XC_MethodHook.java │ │ │ ├── XC_MethodReplacement.java │ │ │ ├── XRemotePreference.java │ │ │ ├── XSharedPreferences.java │ │ │ ├── XposedBridge.java │ │ │ ├── XposedHelpers.java │ │ │ ├── XposedInit.java │ │ │ ├── callbacks │ │ │ ├── IXUnhook.java │ │ │ ├── XC_InitPackageResources.java │ │ │ ├── XC_LayoutInflated.java │ │ │ ├── XC_LoadPackage.java │ │ │ └── XCallback.java │ │ │ └── services │ │ │ ├── BaseService.java │ │ │ ├── DirectAccessService.java │ │ │ └── FileResult.java │ └── org │ │ ├── apache │ │ └── commons │ │ │ └── lang3 │ │ │ └── reflect │ │ │ └── MemberUtilsX.java │ │ └── lsposed │ │ └── lspd │ │ ├── core │ │ ├── ApplicationServiceClient.java │ │ └── Startup.java │ │ ├── deopt │ │ ├── InlinedMethodCallers.java │ │ └── PrebuiltMethodsDeopter.java │ │ ├── hooker │ │ ├── CrashDumpHooker.java │ │ ├── HandleSystemServerProcessHooker.java │ │ ├── LoadedApkCtorHooker.java │ │ ├── LoadedApkGetCLHooker.java │ │ ├── OpenDexFileHooker.java │ │ └── StartBootstrapServicesHooker.java │ │ ├── nativebridge │ │ ├── HookBridge.java │ │ ├── NativeAPI.java │ │ └── ResourcesHook.java │ │ └── util │ │ ├── ClassPathURLStreamHandler.java │ │ ├── CompoundEnumeration.java │ │ ├── Handler.java │ │ ├── Hookers.java │ │ ├── InstallerVerifier.java │ │ ├── LspModuleClassLoader.java │ │ └── MetaDataReader.java │ └── jni │ ├── CMakeLists.txt │ ├── include │ ├── config.h │ ├── config_bridge.h │ ├── context.h │ ├── elf_util.h │ ├── framework │ │ └── androidfw │ │ │ └── resource_types.h │ ├── logging.h │ ├── macros.h │ ├── native_util.h │ ├── symbol_cache.h │ └── utils.h │ ├── src │ ├── context.cpp │ ├── elf_util.cpp │ ├── jni │ │ ├── hook_bridge.cpp │ │ ├── hook_bridge.h │ │ ├── native_api.cpp │ │ ├── native_api.h │ │ ├── resources_hook.cpp │ │ └── resources_hook.h │ ├── native_api.cpp │ ├── native_api.h │ └── symbol_cache.cpp │ └── template │ └── config.cpp ├── crowdin.yml ├── daemon ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── lsposed │ │ └── lspd │ │ ├── Main.java │ │ ├── service │ │ ├── ActivityManagerService.java │ │ ├── BridgeService.java │ │ ├── ConfigFileManager.java │ │ ├── ConfigManager.java │ │ ├── Dex2OatService.java │ │ ├── LSPApplicationService.java │ │ ├── LSPManagerService.java │ │ ├── LSPModuleService.java │ │ ├── LSPSystemServerService.java │ │ ├── LSPosedService.java │ │ ├── LogcatService.java │ │ ├── ObfuscationManager.java │ │ ├── PackageService.java │ │ ├── ServiceManager.java │ │ └── UserService.java │ │ └── util │ │ ├── FakeContext.java │ │ └── InstallerVerifier.java │ ├── jni │ ├── CMakeLists.txt │ ├── dex2oat.cpp │ ├── logcat.cpp │ ├── logcat.h │ ├── logging.h │ ├── obfuscation.cpp │ ├── obfuscation.h │ └── utils.h │ └── res │ ├── values-af │ └── strings.xml │ ├── values-ar │ └── strings.xml │ ├── values-bg │ └── strings.xml │ ├── values-bn │ └── strings.xml │ ├── values-ca │ └── strings.xml │ ├── values-cs │ └── strings.xml │ ├── values-da │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-el │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-et │ └── strings.xml │ ├── values-fa │ └── strings.xml │ ├── values-fi │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-hi │ └── strings.xml │ ├── values-hr │ └── strings.xml │ ├── values-hu │ └── strings.xml │ ├── values-in │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-iw │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-ko │ └── strings.xml │ ├── values-ku │ └── strings.xml │ ├── values-lt │ └── strings.xml │ ├── values-nl │ └── strings.xml │ ├── values-no │ └── strings.xml │ ├── values-pl │ └── strings.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-pt │ └── strings.xml │ ├── values-ro │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-sv │ └── strings.xml │ ├── values-th │ └── strings.xml │ ├── values-tr │ └── strings.xml │ ├── values-uk │ └── strings.xml │ ├── values-ur │ └── strings.xml │ ├── values-vi │ └── strings.xml │ ├── values-zh-rCN │ └── strings.xml │ ├── values-zh-rHK │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ └── values │ └── strings.xml ├── dex2oat ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── cpp │ ├── CMakeLists.txt │ ├── dex2oat.c │ └── logging.h ├── external └── CMakeLists.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── hiddenapi ├── bridge │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── hidden │ │ ├── ByteBufferDexClassLoader.java │ │ └── HiddenApiBridge.java └── stubs │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── main │ └── java │ ├── android │ ├── annotation │ │ ├── NonNull.java │ │ └── Nullable.java │ ├── app │ │ ├── ActivityThread.java │ │ ├── Application.java │ │ ├── ContentProviderHolder.java │ │ ├── ContextImpl.java │ │ ├── IActivityController.java │ │ ├── IActivityManager.java │ │ ├── IApplicationThread.java │ │ ├── INotificationManager.java │ │ ├── IServiceConnection.java │ │ ├── LoadedApk.java │ │ ├── Notification.java │ │ ├── NotificationChannel.java │ │ ├── ProfilerInfo.java │ │ └── ResourcesManager.java │ ├── content │ │ ├── AttributionSource.java │ │ ├── BroadcastReceiver.java │ │ ├── ComponentName.java │ │ ├── Context.java │ │ ├── IContentProvider.java │ │ ├── IIntentReceiver.java │ │ ├── IIntentSender.java │ │ ├── Intent.java │ │ ├── IntentFilter.java │ │ ├── IntentSender.java │ │ ├── pm │ │ │ ├── ApplicationInfo.java │ │ │ ├── BaseParceledListSlice.java │ │ │ ├── IPackageInstaller.java │ │ │ ├── IPackageManager.java │ │ │ ├── IShortcutService.java │ │ │ ├── PackageInfo.java │ │ │ ├── PackageInstaller.java │ │ │ ├── PackageManager.java │ │ │ ├── PackageParser.java │ │ │ ├── ParceledListSlice.java │ │ │ ├── ResolveInfo.java │ │ │ ├── ShortcutInfo.java │ │ │ ├── UserInfo.java │ │ │ └── VersionedPackage.java │ │ └── res │ │ │ ├── AssetManager.java │ │ │ ├── CompatibilityInfo.java │ │ │ ├── Configuration.java │ │ │ ├── Resources.java │ │ │ ├── ResourcesImpl.java │ │ │ ├── ResourcesKey.java │ │ │ └── TypedArray.java │ ├── ddm │ │ └── DdmHandleAppName.java │ ├── graphics │ │ ├── Movie.java │ │ └── drawable │ │ │ └── Drawable.java │ ├── os │ │ ├── Binder.java │ │ ├── Build.java │ │ ├── Bundle.java │ │ ├── Environment.java │ │ ├── Handler.java │ │ ├── IBinder.java │ │ ├── IInterface.java │ │ ├── IPowerManager.java │ │ ├── IServiceCallback.java │ │ ├── IServiceManager.java │ │ ├── IUserManager.java │ │ ├── Parcel.java │ │ ├── Parcelable.java │ │ ├── PersistableBundle.java │ │ ├── RemoteException.java │ │ ├── ResultReceiver.java │ │ ├── SELinux.java │ │ ├── ServiceManager.java │ │ ├── ShellCallback.java │ │ ├── ShellCommand.java │ │ ├── SystemProperties.java │ │ ├── UserHandle.java │ │ └── UserManager.java │ ├── system │ │ ├── ErrnoException.java │ │ ├── Int32Ref.java │ │ └── Os.java │ ├── util │ │ ├── DisplayMetrics.java │ │ ├── MutableInt.java │ │ └── TypedValue.java │ ├── view │ │ └── IWindowManager.java │ └── webkit │ │ ├── WebViewDelegate.java │ │ ├── WebViewFactory.java │ │ └── WebViewFactoryProvider.java │ ├── androidx │ └── annotation │ │ ├── IntRange.java │ │ └── RequiresApi.java │ ├── com │ └── android │ │ ├── internal │ │ ├── os │ │ │ ├── BinderInternal.java │ │ │ └── ZygoteInit.java │ │ └── util │ │ │ └── XmlUtils.java │ │ └── server │ │ ├── LocalServices.java │ │ ├── SystemService.java │ │ ├── SystemServiceManager.java │ │ └── am │ │ ├── ActivityManagerService.java │ │ └── ProcessRecord.java │ ├── dalvik │ ├── annotation │ │ └── optimization │ │ │ └── FastNative.java │ └── system │ │ ├── BaseDexClassLoader.java │ │ └── VMRuntime.java │ ├── org │ └── xmlpull │ │ └── v1 │ │ └── XmlPullParserException.java │ ├── sun │ └── net │ │ └── www │ │ └── ParseUtil.java │ └── xposed │ └── dummy │ ├── XResourcesSuperClass.java │ └── XTypedArraySuperClass.java ├── magisk-loader ├── .gitignore ├── build.gradle.kts ├── magisk_module │ ├── META-INF │ │ └── com │ │ │ └── google │ │ │ └── android │ │ │ ├── update-binary │ │ │ └── updater-script │ ├── customize.sh │ ├── daemon │ ├── module.prop │ ├── post-fs-data.sh │ ├── riru.sh │ ├── sepolicy.rule │ ├── service.sh │ ├── system.prop │ ├── uninstall.sh │ ├── util_functions.sh │ └── verify.sh ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── lsposed │ │ └── lspd │ │ ├── core │ │ └── Main.java │ │ ├── service │ │ ├── ActivityController.java │ │ ├── BridgeService.java │ │ └── ParcelUtils.java │ │ └── util │ │ └── ParasiticManagerHooker.java │ └── jni │ ├── CMakeLists.txt │ ├── api │ ├── riru.h │ ├── riru_main.cpp │ ├── zygisk.h │ └── zygisk_main.cpp │ ├── include │ └── loader.h │ ├── src │ ├── config_impl.h │ ├── magisk_loader.cpp │ ├── magisk_loader.h │ ├── service.cpp │ └── service.h │ └── template │ └── loader.cpp ├── services ├── daemon-service │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── aidl │ │ └── org │ │ │ └── lsposed │ │ │ └── lspd │ │ │ ├── models │ │ │ ├── Module.aidl │ │ │ └── PreLoadedApk.aidl │ │ │ └── service │ │ │ ├── ILSPApplicationService.aidl │ │ │ ├── ILSPSystemServerService.aidl │ │ │ └── ILSPosedService.aidl │ │ └── java │ │ └── org │ │ └── lsposed │ │ └── lspd │ │ └── util │ │ └── Utils.java └── manager-service │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── aidl │ └── org │ └── lsposed │ └── lspd │ ├── ILSPManagerService.aidl │ └── models │ ├── Application.aidl │ └── UserInfo.aidl └── settings.gradle.kts /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto eol=lf 3 | 4 | # Declare files that will always have CRLF line endings on checkout. 5 | *.cmd text eol=crlf 6 | *.bat text eol=crlf 7 | 8 | # Denote all files that are truly binary and should not be modified. 9 | *.so binary 10 | *.dex binary 11 | *.jar binary 12 | *.png binary 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Ask a question/提问 4 | url: https://github.com/LSPosed/LSPosed/discussions/new?category=Q-A 5 | about: Please ask and answer questions here./如果有任何疑问请在这里提问 6 | - name: Official Telegram Channel/官方 Telegram 频道 7 | url: https://t.me/LSPosed 8 | about: Subscribe for notifications and releases/可以订阅通知和发行版 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request/新特性请求 3 | description: Suggest an idea./提出建议 4 | labels: [enhancement] 5 | title: "[Feature Request] " 6 | body: 7 | - type: textarea 8 | attributes: 9 | label: Is your feature request related to a problem?/你的请求是否与某个问题相关? 10 | placeholder: A clear and concise description of what the problem is./请清晰准确表述该问题。 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: Describe the solution you'd like/描述你想要的解决方案 16 | placeholder: A clear and concise description of what you want to happen./请清晰准确描述新特性的预期行为 17 | validations: 18 | required: true 19 | - type: textarea 20 | attributes: 21 | label: Additional context/其他信息 22 | placeholder: Add any other context or screenshots about the feature request here./其他关于新特性的信息或者截图 23 | validations: 24 | required: false 25 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: gradle 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "21:00" 8 | open-pull-requests-limit: 10 9 | target-branch: master 10 | -------------------------------------------------------------------------------- /.github/workflows/crowdin.yml: -------------------------------------------------------------------------------- 1 | name: Crowdin Action 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: [ master ] 7 | paths: 8 | - app/src/main/res/values/strings.xml 9 | - daemon/src/main/res/values/strings.xml 10 | 11 | jobs: 12 | synchronize-with-crowdin: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v2 17 | 18 | - name: crowdin action 19 | uses: crowdin/github-action@master 20 | with: 21 | upload_translations: false 22 | download_translations: false 23 | upload_sources: true 24 | config: 'crowdin.yml' 25 | crowdin_branch_name: master 26 | env: 27 | CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} 28 | CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "services/xposed-service"] 2 | path = services/xposed-service 3 | url = https://github.com/libxposed/XposedService.git 4 | [submodule "external/cxx"] 5 | path = external/cxx 6 | url = https://github.com/LSPosed/libcxx.git 7 | [submodule "external/lsplant"] 8 | path = external/lsplant 9 | url = https://github.com/LSPosed/LSPlant.git 10 | [submodule "external/dobby"] 11 | path = external/dobby 12 | url = https://github.com/LSPosed/Dobby.git 13 | [submodule "external/fmt"] 14 | path = external/fmt 15 | url = https://github.com/fmtlib/fmt.git 16 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keep class org.lsposed.manager.Constants { 2 | public static boolean setBinder(android.os.IBinder); 3 | } 4 | -assumenosideeffects class kotlin.jvm.internal.Intrinsics { 5 | public static void check*(...); 6 | public static void throw*(...); 7 | } 8 | -assumenosideeffects class android.util.Log { 9 | public static *** v(...); 10 | public static *** d(...); 11 | } 12 | 13 | -keepclasseswithmembers,allowobfuscation class * { 14 | @com.google.gson.annotations.SerializedName ; 15 | } 16 | 17 | -repackageclasses 18 | -allowaccessmodification 19 | -overloadaggressively 20 | 21 | # Gson uses generic type information stored in a class file when working with fields. Proguard 22 | # removes such information by default, so configure it to keep all of it. 23 | -keepattributes Signature,InnerClasses,EnclosingMethod 24 | 25 | -dontwarn org.jetbrains.annotations.NotNull 26 | -dontwarn org.jetbrains.annotations.Nullable 27 | -dontwarn org.bouncycastle.jsse.BCSSLParameters 28 | -dontwarn org.bouncycastle.jsse.BCSSLSocket 29 | -dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider 30 | -dontwarn org.conscrypt.Conscrypt* 31 | -dontwarn org.conscrypt.ConscryptHostnameVerifier 32 | -dontwarn org.openjsse.javax.net.ssl.SSLParameters 33 | -dontwarn org.openjsse.javax.net.ssl.SSLSocket 34 | -dontwarn org.openjsse.net.ssl.OpenJSSE 35 | -------------------------------------------------------------------------------- /app/src/common/res/drawable/ic_outline_extension_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/common/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/common/res/values-night-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_800 4 | @android:color/system_accent1_200 5 | 6 | -------------------------------------------------------------------------------- /app/src/common/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #F06292 3 | #E1F5FE 4 | 5 | -------------------------------------------------------------------------------- /app/src/common/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_0 4 | @android:color/system_accent1_600 5 | 6 | -------------------------------------------------------------------------------- /app/src/common/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #FFFFFF 3 | #F48FB1 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/assets/webview/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
@body@
13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/assets/webview/template_dark.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
@body@
13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/lsposed/manager/Constants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2020 EdXposed Contributors 18 | * Copyright (C) 2021 LSPosed Contributors 19 | */ 20 | 21 | package org.lsposed.manager; 22 | 23 | import android.os.IBinder; 24 | 25 | import org.lsposed.manager.receivers.LSPManagerServiceHolder; 26 | 27 | public class Constants { 28 | public static boolean setBinder(IBinder binder) { 29 | LSPManagerServiceHolder.init(binder); 30 | return LSPManagerServiceHolder.getService().asBinder().isBinderAlive(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_enter.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 25 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_enter_pop.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 25 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_exit.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 25 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_exit_pop.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 25 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/color/switchbar_text_dark.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/color/switchbar_text_light.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_assignment_checkable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_add_24.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_back_24.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_assignment_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_chat_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_extension_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_get_app_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_home_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_info_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_search_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_settings_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_settings_backup_restore_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_extension_checkable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_get_app_checkable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_checkable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_open_in_browser.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_add_to_home_screen_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_android_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_app_shortcut_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_assignment_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_format_color_fill_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_get_app_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_groups_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_home_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_invert_colors_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_language_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_merge_type_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_restore_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_science_24.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_shield_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_translate_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_bug_report_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_check_circle_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_error_outline_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_send_24.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_settings_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_warning_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings_checkable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shortcut_ic_logs.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shortcut_ic_modules.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shortcut_ic_repo.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shortcut_ic_settings.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/simple_menu_background.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_title.xml: -------------------------------------------------------------------------------- 1 | 19 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_log_textview.xml: -------------------------------------------------------------------------------- 1 | 19 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_master_switch.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_modules.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_repo_item.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 23 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/values-en/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/integer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0x50 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-v28/dimens.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 12dp 22 | 8dp 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values-v29/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors_google.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | #1A73E8 23 | #8AB4F8 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 48dp 23 | 48dp 24 | 25 | 6dp 26 | 2dp 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/values/integer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0x00800007 4 | 0x30 5 | 0 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings_untranslatable.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | LSPosed 22 | https://github.com/LSPosed/LSPosed/ 23 | https://github.com/LSPosed/LSPosed#install 24 | @string/module_repo 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes_overlay.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/release/java/org/lsposed/manager/util/Telemetry.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.manager.util; 2 | 3 | import android.app.Application; 4 | 5 | import java.util.Map; 6 | 7 | public class Telemetry { 8 | public static void start(Application application) { 9 | } 10 | 11 | public static void trackEvent(String name, Map properties) { 12 | } 13 | 14 | public static void trackError(Throwable throwable, Map properties) { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.cxx 3 | -------------------------------------------------------------------------------- /core/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keep class de.robv.android.xposed.** {*;} 2 | -keep class android.** { *; } 3 | -keepclasseswithmembers,includedescriptorclasses class * { 4 | native ; 5 | } 6 | 7 | -assumenosideeffects class android.util.Log { 8 | public static *** v(...); 9 | public static *** d(...); 10 | } 11 | -repackageclasses 12 | -allowaccessmodification 13 | -dontwarn org.slf4j.impl.StaticLoggerBinder 14 | -------------------------------------------------------------------------------- /core/src/main/java/de/robv/android/xposed/IXposedMod.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2020 EdXposed Contributors 18 | * Copyright (C) 2021 LSPosed Contributors 19 | */ 20 | 21 | package de.robv.android.xposed; 22 | 23 | /** 24 | * Marker interface for Xposed modules. Cannot be implemented directly. 25 | */ 26 | /* package */ interface IXposedMod { 27 | } 28 | -------------------------------------------------------------------------------- /core/src/main/java/org/lsposed/lspd/hooker/CrashDumpHooker.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.hooker; 2 | 3 | import android.util.Log; 4 | 5 | import de.robv.android.xposed.XC_MethodHook; 6 | import de.robv.android.xposed.XposedBridge; 7 | 8 | public class CrashDumpHooker extends XC_MethodHook { 9 | @Override 10 | protected void beforeHookedMethod(MethodHookParam param) throws Throwable { 11 | try { 12 | var e = (Throwable) param.args[0]; 13 | XposedBridge.log("Crash unexpectedly: " + Log.getStackTraceString(e)); 14 | } catch (Throwable ignored) { 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/org/lsposed/lspd/hooker/OpenDexFileHooker.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.hooker; 2 | 3 | import android.os.Build; 4 | 5 | import org.lsposed.lspd.nativebridge.HookBridge; 6 | 7 | import de.robv.android.xposed.XC_MethodHook; 8 | import de.robv.android.xposed.XposedHelpers; 9 | 10 | public class OpenDexFileHooker extends XC_MethodHook { 11 | @Override 12 | protected void afterHookedMethod(MethodHookParam param) throws Throwable { 13 | ClassLoader classLoader = null; 14 | for (var arg : param.args) { 15 | if (arg instanceof ClassLoader) { 16 | classLoader = (ClassLoader) arg; 17 | } 18 | } 19 | if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P && classLoader == null) { 20 | classLoader = XposedHelpers.class.getClassLoader(); 21 | } 22 | while (classLoader != null) { 23 | if (classLoader == XposedHelpers.class.getClassLoader()) { 24 | HookBridge.setTrusted(param.getResult()); 25 | return; 26 | } else { 27 | classLoader = classLoader.getParent(); 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /core/src/main/java/org/lsposed/lspd/nativebridge/HookBridge.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.nativebridge; 2 | 3 | import java.lang.reflect.Executable; 4 | import java.lang.reflect.InvocationTargetException; 5 | 6 | import dalvik.annotation.optimization.FastNative; 7 | 8 | public class HookBridge { 9 | public static native boolean hookMethod(Executable hookMethod, Class hooker, int priority, Object callback); 10 | public static native boolean unhookMethod(Executable hookMethod, Object callback); 11 | 12 | public static native boolean deoptimizeMethod(Executable method); 13 | 14 | public static native Object invokeOriginalMethod(Executable method, Object thisObject, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException; 15 | 16 | @FastNative 17 | public static native boolean instanceOf(Object obj, Class clazz); 18 | 19 | @FastNative 20 | public static native boolean setTrusted(Object cookie); 21 | 22 | public static native Object[] callbackSnapshot(Executable method); 23 | } 24 | -------------------------------------------------------------------------------- /core/src/main/java/org/lsposed/lspd/nativebridge/NativeAPI.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2020 EdXposed Contributors 18 | * Copyright (C) 2021 LSPosed Contributors 19 | */ 20 | 21 | package org.lsposed.lspd.nativebridge; 22 | 23 | public class NativeAPI { 24 | public static native void recordNativeEntrypoint(String library_name); 25 | } 26 | -------------------------------------------------------------------------------- /core/src/main/java/org/lsposed/lspd/util/CompoundEnumeration.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.util; 2 | 3 | import java.util.Enumeration; 4 | import java.util.NoSuchElementException; 5 | 6 | public class CompoundEnumeration implements Enumeration { 7 | private final Enumeration[] enums; 8 | private int index = 0; 9 | 10 | public CompoundEnumeration(Enumeration[] enums) { 11 | this.enums = enums; 12 | } 13 | 14 | private boolean next() { 15 | while (index < enums.length) { 16 | if (enums[index] != null && enums[index].hasMoreElements()) { 17 | return true; 18 | } 19 | index++; 20 | } 21 | return false; 22 | } 23 | 24 | public boolean hasMoreElements() { 25 | return next(); 26 | } 27 | 28 | public E nextElement() { 29 | if (!next()) { 30 | throw new NoSuchElementException(); 31 | } 32 | return enums[index].nextElement(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /core/src/main/jni/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(core) 2 | cmake_minimum_required(VERSION 3.4.1) 3 | 4 | add_subdirectory(${EXTERNAL_ROOT} external) 5 | 6 | configure_file(template/config.cpp src/config.cpp) 7 | 8 | aux_source_directory(src SRC_LIST) 9 | aux_source_directory(src/jni SRC_LIST) 10 | 11 | add_library(${PROJECT_NAME} STATIC ${SRC_LIST} ${CMAKE_CURRENT_BINARY_DIR}/src/config.cpp) 12 | 13 | target_include_directories(${PROJECT_NAME} PUBLIC include) 14 | target_include_directories(${PROJECT_NAME} PRIVATE src) 15 | 16 | target_link_libraries(${PROJECT_NAME} PUBLIC dobby lsplant_static log fmt-header-only) 17 | target_link_libraries(${PROJECT_NAME} PRIVATE dex_builder_static) 18 | -------------------------------------------------------------------------------- /core/src/main/jni/include/macros.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include // for size_t 4 | #include // for TEMP_FAILURE_RETRY 5 | #include 6 | // The arraysize(arr) macro returns the # of elements in an array arr. 7 | // The expression is a compile-time constant, and therefore can be 8 | // used in defining new arrays, for example. If you use arraysize on 9 | // a pointer by mistake, you will get a compile-time error. 10 | template 11 | [[gnu::always_inline]] constexpr inline size_t arraysize(T(&)[N]) { 12 | return N; 13 | } 14 | -------------------------------------------------------------------------------- /core/src/main/jni/src/jni/hook_bridge.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by loves on 3/13/2022. 3 | // 4 | 5 | #pragma once 6 | 7 | #include 8 | 9 | namespace lspd { 10 | void RegisterHookBridge(JNIEnv* env); 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/jni/src/jni/native_api.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2020 EdXposed Contributors 18 | * Copyright (C) 2021 LSPosed Contributors 19 | */ 20 | 21 | // 22 | // Created by 双草酸酯 on 2/7/21. 23 | // 24 | 25 | #ifndef LSPOSED_JNI_NATIVE_API_H 26 | #define LSPOSED_JNI_NATIVE_API_H 27 | 28 | #include 29 | 30 | namespace lspd { 31 | void RegisterNativeAPI(JNIEnv *); 32 | } 33 | 34 | 35 | #endif //LSPOSED_JNI_NATIVE_API_H 36 | -------------------------------------------------------------------------------- /core/src/main/jni/src/jni/resources_hook.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2020 EdXposed Contributors 18 | * Copyright (C) 2021 - 2022 LSPosed Contributors 19 | */ 20 | 21 | #pragma once 22 | 23 | #include "jni.h" 24 | 25 | namespace lspd { 26 | void RegisterResourcesHook(JNIEnv *); 27 | 28 | } // namespace lspd 29 | -------------------------------------------------------------------------------- /core/src/main/jni/template/config.cpp: -------------------------------------------------------------------------------- 1 | #include "config.h" 2 | 3 | namespace lspd { 4 | const int versionCode = ${VERSION_CODE}; 5 | const char* const versionName = "${VERSION_NAME}"; 6 | } 7 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Your Crowdin credentials 3 | # 4 | "project_id_env": "CROWDIN_PROJECT_ID" 5 | "api_token_env": "CROWDIN_API_TOKEN" 6 | "base_path": "." 7 | "base_url": "https://lsposed.crowdin.com/api/v2" 8 | "pull_request_title": "[translation] Update translation from Crowdin" 9 | # 10 | # Choose file structure in Crowdin 11 | # e.g. true or false 12 | # 13 | "preserve_hierarchy": true 14 | 15 | # 16 | # Files configuration 17 | # 18 | files: [ 19 | { 20 | "source": "/app/src/main/res/values/strings.xml", 21 | "translation": "/app/src/main/res/values-%two_letters_code%/%original_file_name%", 22 | "type": "android", 23 | "dest": "/app/strings.xml", 24 | "skip_untranslated_strings": true 25 | }, 26 | { 27 | "source": "/daemon/src/main/res/values/strings.xml", 28 | "translation": "/daemon/src/main/res/values-%two_letters_code%/%original_file_name%", 29 | "type": "android", 30 | "dest": "/daemon/strings.xml", 31 | "skip_untranslated_strings": true 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /daemon/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.cxx 3 | -------------------------------------------------------------------------------- /daemon/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keepclasseswithmembers,includedescriptorclasses class * { 2 | native ; 3 | } 4 | -keepclasseswithmembers class org.lsposed.lspd.Main { 5 | public static void main(java.lang.String[]); 6 | } 7 | -keepclasseswithmembers class org.lsposed.lspd.service.Dex2OatService { 8 | private java.lang.String devTmpDir; 9 | private java.lang.String magiskPath; 10 | private java.lang.String fakeBin32; 11 | private java.lang.String fakeBin64; 12 | private java.lang.String[] dex2oatBinaries; 13 | } 14 | -keepclasseswithmembers class org.lsposed.lspd.service.LogcatService { 15 | private int refreshFd(boolean); 16 | } 17 | -keepclassmembers class ** implements android.content.ContextWrapper { 18 | public int getUserId(); 19 | public android.os.UserHandle getUser(); 20 | } 21 | -assumenosideeffects class android.util.Log { 22 | public static *** v(...); 23 | public static *** d(...); 24 | } 25 | -repackageclasses 26 | -allowaccessmodification 27 | -------------------------------------------------------------------------------- /daemon/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /daemon/src/main/java/org/lsposed/lspd/Main.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd; 2 | 3 | import org.lsposed.lspd.service.ServiceManager; 4 | 5 | public class Main { 6 | 7 | public static void main(String[] args) { 8 | ServiceManager.start(args); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /daemon/src/main/java/org/lsposed/lspd/service/LSPModuleService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | package org.lsposed.lspd.service; 21 | 22 | import android.os.IBinder; 23 | 24 | import org.lsposed.daemon.BuildConfig; 25 | 26 | import io.github.xposed.xposedservice.IXposedService; 27 | 28 | public class LSPModuleService extends IXposedService.Stub { 29 | 30 | final private String name; 31 | 32 | public LSPModuleService(String name) { 33 | this.name = name; 34 | } 35 | 36 | @Override 37 | public IBinder asBinder() { 38 | return this; 39 | } 40 | 41 | @Override 42 | public int getVersion() { 43 | return BuildConfig.API_CODE; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /daemon/src/main/java/org/lsposed/lspd/service/ObfuscationManager.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.service; 2 | 3 | import android.os.SharedMemory; 4 | 5 | import java.util.HashMap; 6 | 7 | public class ObfuscationManager { 8 | // For module dexes 9 | static native SharedMemory obfuscateDex(SharedMemory memory); 10 | 11 | // generates signature 12 | static native HashMap getSignatures(); 13 | } 14 | -------------------------------------------------------------------------------- /daemon/src/main/java/org/lsposed/lspd/util/InstallerVerifier.java: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.util; 2 | 3 | import com.android.apksig.ApkVerifier; 4 | 5 | import java.io.File; 6 | import java.util.Arrays; 7 | 8 | import static org.lsposed.lspd.util.SignInfo.CERTIFICATE; 9 | 10 | public class InstallerVerifier { 11 | 12 | public static boolean verifyInstallerSignature(String path) { 13 | ApkVerifier verifier = new ApkVerifier.Builder(new File(path)) 14 | .setMinCheckedPlatformVersion(27) 15 | .build(); 16 | try { 17 | ApkVerifier.Result result = verifier.verify(); 18 | if (!result.isVerified()) { 19 | return false; 20 | } 21 | boolean ret = Arrays.equals(result.getSignerCertificates().get(0).getEncoded(), CERTIFICATE); 22 | Utils.logI("verifyInstallerSignature: " + ret); 23 | return ret; 24 | } catch (Throwable t) { 25 | Utils.logE("verifyInstallerSignature: ", t); 26 | return false; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /daemon/src/main/jni/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(daemon) 2 | cmake_minimum_required(VERSION 3.4.1) 3 | 4 | add_subdirectory(${EXTERNAL_ROOT} external) 5 | 6 | set(SOURCES 7 | dex2oat.cpp 8 | logcat.cpp 9 | obfuscation.cpp 10 | ) 11 | 12 | add_library(${PROJECT_NAME} SHARED ${SOURCES}) 13 | 14 | target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 15 | 16 | target_link_libraries(${PROJECT_NAME} PRIVATE lsplant_static dex_builder_static android log) 17 | 18 | if (DEFINED DEBUG_SYMBOLS_PATH) 19 | message(STATUS "Debug symbols will be placed at ${DEBUG_SYMBOLS_PATH}") 20 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 21 | COMMAND ${CMAKE_COMMAND} -E make_directory ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI} 22 | COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ 23 | ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI}/${PROJECT_NAME}.debug 24 | COMMAND ${CMAKE_STRIP} --strip-all $ 25 | COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI}/${PROJECT_NAME}.debug 26 | $) 27 | endif() 28 | -------------------------------------------------------------------------------- /daemon/src/main/jni/utils.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2022 LSPosed Contributors 18 | */ 19 | 20 | // 21 | // Created by Nullptr on 2022/4/20. 22 | // 23 | 24 | #pragma once 25 | 26 | inline int32_t GetAndroidApiLevel() { 27 | static int32_t api_level = []() { 28 | char prop_value[PROP_VALUE_MAX]; 29 | __system_property_get("ro.build.version.sdk", prop_value); 30 | int base = atoi(prop_value); 31 | __system_property_get("ro.build.version.preview_sdk", prop_value); 32 | return base + atoi(prop_value); 33 | }(); 34 | return api_level; 35 | } 36 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-af/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed module is not activated yet 5 | %1$s is geïnstalleer, maar is nog nie geaktiveer nie 6 | %1$s 已為用戶 %2$s 安裝,但尚未激活 7 | %d module enabled 8 | %s is opgedateer, forseer asseblief stop en herbegin programme binne die omvang daarvan 9 | Xposed-module is opgedateer, stelselherlaai vereis 10 | %s is opgedateer, aangesien die omvang System Framework bevat, vereis herlaai om veranderinge toe te pas 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | وحدة Xposed لم يتم تفعيلها بعد 5 | %1$s تم التثبيت ولكنه لم يفعل بعد 6 | %1$s تم تثبيته للمستخدم %2$s ولكن لم يتم تفعيله بعد 7 | وحدة Xposed تم تحديثها 8 | %s تم تحديثه، يرجى فرض إيقاف وإعادة تشغيل التطبيقات في نطاقه 9 | تم تحديث وحدة Xposed، مطلوب إعادة تشغيل النظام 10 | %s تم تحديثه، نظراً لأن النطاق يحتوي على إطار النظام، يتطلب إعادة التشغيل لتطبيق التغييرات 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-bg/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Модулът Xposed все още не е активиран 5 | %1$s е инсталиран, но все още не е активиран 6 | %1$s е инсталиран на потребител %2$s, но все още не е активиран 7 | Актуализиран модул Xposed 8 | %s е актуализиран, моля, спрете принудително и рестартирайте приложенията в неговия обхват 9 | Актуализиран модул Xposed, изисква се рестартиране на системата 10 | %s е актуализиран, тъй като обхватът съдържа System Framework, необходимо е рестартиране, за да се приложат промените 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-bn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed মডিউল এখনও সক্রিয় করা হয় নি 5 | %1$s ইনস্টল করা হয়েছে, কিন্তু এখনও সক্রিয় করা হয়নি 6 | %1$s ব্যবহারকারী %2$sএ ইনস্টল করা হয়েছে, কিন্তু এখনও সক্রিয় করা হয়নি 7 | এক্সপোজড মডিউল আপডেট করা হয়েছে 8 | %s আপডেট করা হয়েছে, অনুগ্রহ করে এর সুযোগে অ্যাপগুলিকে জোর করে থামান এবং পুনরায় চালু করুন 9 | Xposed মডিউল আপডেট করা হয়েছে, সিস্টেম রিবুট প্রয়োজন 10 | %s আপডেট করা হয়েছে, যেহেতু সুযোগে সিস্টেম ফ্রেমওয়ার্ক রয়েছে, পরিবর্তনগুলি প্রয়োগ করার জন্য রিবুট প্রয়োজন 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ca/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | El mòdul Xposed encara no està activat 5 | %1$s s\'ha instal·lat, però encara no està activat 6 | %1$s s\'ha instal·lat a l\'usuari %2$s, però encara no està activat 7 | Mòdul Xposed actualitzat 8 | %s s\'ha actualitzat, si us plau, força l\'aturada i reinici de les aplicacions del seu abast 9 | Mòdul Xposed actualitzat, cal reiniciar el sistema 10 | %s s\'ha actualitzat, ja que l\'abast conté System Framework, cal reiniciar per aplicar els canvis 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modul ještě není aktivován 5 | %1$s byl nainstalován, ale ještě není aktivován 6 | %1$s byl nainstalován uživateli %2$s, ale ještě není aktivován 7 | Xposed modul byl aktualizován 8 | %s byl aktualizován, prosím, násilně zastavte aplikace a restartujte je 9 | Xposed modul aktualizován, je vyžadován restart systému 10 | %s byl aktualizován, a protože se provedly změny v souvislosti se Systémovým Frameworkem, je vyžadován restart pro aplikaci změn 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-da/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modul er endnu ikke aktiveret 5 | %1$s er blevet installeret, men er ikke aktiveret endnu 6 | %1$s er blevet installeret på brugeren %2$s, men er endnu ikke aktiveret 7 | Xposed modul opdateret 8 | %s er blevet opdateret, gennemtving stop og genstart apps i dets anvendelsesområde 9 | Xposed modul opdateret, system genstart kræves 10 | %s er blevet opdateret, da anvendelsesområdet indeholder System Framework, krævede genstart for at anvende ændringer 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Das LSPosed-Modul wurde noch nicht aktiviert 5 | %1$s wurde installiert, ist aber noch nicht aktiviert 6 | %1$s wurde unter dem Benutzer %2$sinstalliert, ist aber noch nicht aktiviert 7 | Xposed-Modul aktualisiert 8 | %s wurde aktualisiert, bitte Stopp erzwingen und die Apps in deren Scope neu starten 9 | Xposed-Modul aktualisiert, Systemneustart erforderlich 10 | %s wurde aktualisiert, da der Geltungsbereich System-Framework enthält, ist ein Neustart erforderlich, damit die Änderungen übernommen werden 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-el/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Το Xposed πρόσθετο δεν έχει ενεργοποιηθεί ακόμα 5 | %1$s έχει εγκατασταθεί, αλλά δεν έχει ενεργοποιηθεί ακόμα 6 | %1$s έχει εγκατασταθεί στον χρήστη %2$s, αλλά δεν έχει ενεργοποιηθεί ακόμη 7 | Το πρόσθετο Xposed ενημερώθηκε 8 | %s ενημερώθηκε, παρακαλώ κλείστε εξαναγκαστικά και επανεκκινήστε τις εφαρμογές στο πεδίο εφαρμογής της 9 | Το πρόσθετο Xposed ενημερώθηκε, απαιτείται επανεκκίνηση συστήματος 10 | %s έχει ενημερωθεί, δεδομένου ότι το πεδίο εφαρμογής περιέχει Πλαίσιο Συστήματος, απαιτείται επανεκκίνηση για να εφαρμοστούν οι αλλαγές 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | El módulo Xposed no se encuentra activo 5 | %1$s has been installed, but is not activated yet 6 | %1$s has been installed to user %2$s, but is not activated yet 7 | Módulo Xposed actualizado 8 | %s ha sido actualizado, por favor fuerza el cierre y reinicia las apps que le afectan 9 | Módulo de Xposed actualizado, es necesario reiniciar el sistema 10 | %s ha sido actualizado, ya que afecta al System Framework, es necesario reiniciar para aplicar cambios 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-et/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed moodul ei ole aktiveeritud 5 | %1$s on paigaldatud, kuid ei ole aktiveeritud 6 | %1$s on paigaldatud kasutajale %2$s, kuid ei ole aktiveeritud 7 | Xposed moodul uuendatud 8 | %s on uuendatud, siis peatage ja taaskäivitage rakendused, mis kuuluvad selle kohaldamisalasse. 9 | Xposed moodul uuendatud, süsteemi taaskäivitamine vajalik 10 | %s on uuendatud, kuna reguleerimisala sisaldab System Framework, vajalik taaskäivitamine, et rakendada muudatusi 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-fa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ماژول Xposed هنوز فعال نشده است 5 | %1$s نصب شده است اما هنوز فعال نشده است 6 | %1$s برای کاربر %2$s نصب شده است اما هنوز فعال نشده است 7 | ماژول Xposed به روز رسانی شده 8 | %s به‌روزرسانی شده است لطفا برنامه‌ ها را متوقف کرده و سپس دوباره اجرا کنید 9 | ماژول Xposed به روز رسانی شد سیستم به خاموش و روشن کردن دستگاه نیاز دارد 10 | %s به‌روزرسانی شده است و چون شامل محدوده فریمورک سیستم است برای انجام تغییرات به خاموش و روشن کردن دستگاه نیاز دارد 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-fi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed moduuli ei ole vielä aktivoitu 5 | %1$s on asennettu, mutta sitä ei ole vielä aktivoitu. 6 | %1$s on asennettu käyttäjälle %2$s, mutta sitä ei ole vielä aktivoitu. 7 | Xposed moduuli päivitetty 8 | %s on päivitetty, paina pysäytä ja käynnistä sovellukset uudelleen sen laajuudessa 9 | Xposed moduuli päivitetty, järjestelmän uudelleenkäynnistys vaaditaan 10 | %s on päivitetty, koska soveltamisala sisältää järjestelmän kehyksen, vaaditaan uudelleenkäynnistys muutosten käyttöön 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Le module LSPosed n\’est pas encore actif 5 | %1$s a été installé, mais n\'a pas été encore activé 6 | %1$s a été installé pour l\'utilisateur %2$s, mais n\'a pas été encore activé 7 | Module Xposed mis à jour 8 | %s a été mis à jour, merci de forcer l\’arrêt ou de redémarrer les applis dans leurs champs d\’application 9 | Module Xposed mis à jour, redémarrage du système requis 10 | %s a été mis à jour, étant donné que le champ d\'application est étendu au sous système, un redémarrage est nécessaire pour appliquer les changements 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | एक्सपोज़ड मॉड्यूल अभी तक सक्रिय नहीं है 5 | %1$s इंस्टॉल कर दिया गया है, लेकिन अब तक एक्टिवेट नही किया गया 6 | %1$s को %2$s यूजर में इंस्टॉल कर दिया गया है, लेकिन अब तक एक्टिवेट नही किया गया है 7 | एक्सपोज़ड मॉड्यूल अपडेट किया गया 8 | %s अपडेट कर दिया गया है, कृपया बलपूर्वक रोकें और इसके दायरे में ऐप्स को पुनरारंभ करें 9 | एक्सपोज़ड मॉड्यूल अपडेट किया गया, सिस्टम रीबूट की आवश्यकता है 10 | %s को अपडेट कर दिया गया है, क्योंकि स्कोप में सिस्टम फ्रेमवर्क है, परिवर्तनों को लागू करने के लिए रीबूट की आवश्यकता है 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-hr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modul još nije aktiviran 5 | %1$s je instaliran, ali još nije aktiviran 6 | %1$s je instaliran korisniku %2$s, ali još nije aktiviran 7 | Modul Xposed ažuriran 8 | %s je ažuriran, prisilno zaustavite i ponovno pokrenite aplikacije u njegovom opsegu 9 | Xposed modul je ažuriran, potrebno je ponovno pokretanje sustava 10 | %s je ažuriran, budući da opseg sadrži System Framework, potrebno je ponovno pokretanje za primjenu promjena 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-hu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Az Xposed modul még nincs aktiválva 5 | %1$s telepítve lett, de még nincs aktiválva. 6 | %1$s telepítve lett a %2$sfelhasználóhoz, de még nincs aktiválva. 7 | Xposed modul frissítve 8 | %s frissítésre került, kérjük, kényszerítse az alkalmazások leállítását és újraindítását a hatókörében. 9 | Xposed modul frissítve, rendszer újraindítás szükséges 10 | %s frissítve lett, mivel a hatókör tartalmazza a System Framework-et, a változások alkalmazásához szükséges újraindítás szükséges. 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Modul Xposed belum diaktifkan 5 | %1$s sudah terinstall, tapi belum diaktifkan 6 | %1$s telah diinstal ke pengguna %2$s, tetapi belum diaktifkan 7 | Modul xposed diperbarui 8 | %s telah diperbarui, harap paksa berhenti dan mulai ulang aplikasi dalam cakupannya 9 | Modul Xposed diperbarui, mulai ulang sistem diperlukan 10 | %s telah diperbarui, karena cakupannya berisi Kerangka Sistem, diperlukan mulai ulang untuk menerapkan perubahan 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-it/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Il modulo Xposed non è ancora attivo 5 | %1$s è stato installato, ma non è ancora attivo 6 | %1$s è stato installato sull\'utente %2$s, ma non è ancora attivo 7 | Modulo Xposed aggiornato 8 | %s è stato aggiornato, arresta e riavvia le applicazioni per le quali è abilitato 9 | Modulo Xposed aggiornato, è necessario il riavvio del sistema 10 | %s è stato aggiornato. Poiché è abilitato per il framework di sistema, è necessario riavviare per applicare le modifiche 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-iw/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | מודול LSPosed עדיין לא הופעל 5 | %1$s הותקן, אך אינו מופעל עדיין 6 | %1$s הותקן למשתמש %2$s, אך אינו מופעל עדיין 7 | מודול LSPosed עודכן 8 | %s עודכן 9 | מודול Xposed עודכן, נדרש אתחול המערכת 10 | %s עודכן, מכיוון שההיקף מכיל System Framework, נדרש אתחול כדי להחיל שינויים 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposedモジュールが有効化されていません 5 | %1$s はインストールされましたが、 まだ有効になっていません。 6 | %1$s は ユーザー %2$sにインストールされましたが、 まだ有効になっていません。 7 | Xposedモジュールが更新されました 8 | %s が更新されました。スコープ内のアプリを強制停止してから再起動してください 9 | Xposedモジュールを更新しました。システム再起動が必要です 10 | %s が更新されました。スコープにシステムフレームワークが含まれているため、変更を適用するには再起動が必要です 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed 모듈이 아직 활성화되지 않았습니다. 5 | %1$s이(가) 설치되었지만 아직 활성화되지 않았습니다. 6 | 사용자 %2$s님에게 %1$s 이(가) 설치되었지만 아직 활성화되지 않았습니다. 7 | Xposed 모듈 업데이트 8 | %s이(가) 업데이트되었습니다. 9 | Xposed 모듈이 업데이트되었습니다, 재부팅이 필요합니다. 10 | 범위에 시스템 프레임워크가 포함되어 있으므로 %s 이 업데이트되었습니다. 변경 사항을 적용하려면 재부팅해야 합니다. 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ku/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Modula Xposed hîn nehatiye çalak kirin 5 | %1$s hatiye saz kirin, lê hîn nehatiye aktîfkirin 6 | %1$s ji bikarhêner %2$sre hate saz kirin, lê hêj nehatiye çalak kirin 7 | Modula Xposed hate nûve kirin 8 | %s hate nûve kirin, ji kerema xwe bi zorê sepanan rawestînin û di çarçoveya wê de ji nû ve bidin destpêkirin 9 | Modula Xposed hate nûve kirin, pêdivî ye ku pergalê ji nû ve dest pê bike 10 | %s hate nûve kirin, ji ber ku çarçove Çarçoveya Pergalê dihewîne, ji bo sepandina guhertinan ji nû ve destpêkirinê hewce dike 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-lt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modulis dar nėra aktyvuotas 5 | \"%1$s\" buvo įdiegta, tačiau liko dar nesuaktyvuota 6 | \"%1$s\" buvo įdiegta vartotojui \"%2$s\", tačiau liko dar nesuaktyvuota 7 | Atnaujintas Xposed modulis 8 | %s buvo atnaujintas, priverstinai sustabdykite ir iš naujo paleiskite jo taikymo srityje esančias programas 9 | Atnaujintas \"Xposed\" modulis, reikalingas sistemos perkrovimas 10 | %s buvo atnaujintas, nes srityje yra System Framework, reikalingas perkrovimas, kad būtų galima taikyti pakeitimus 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | LSPosed module is nog niet geactiveerd 5 | %1$s is geïnstalleerd, maar nog niet geactiveerd 6 | %1$s is geïnstalleerd bij gebruiker %2$s, maar is nog niet geactiveerd 7 | LSPosed module bijgewerkt 8 | %1$s is geupdate 9 | Xposed-module bijgewerkt, systeem opnieuw opstarten vereist 10 | %s is bijgewerkt, omdat het bereik een systeemkader bevat, moet je opnieuw opstarten om wijzigingen toe te passen 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-no/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modul er ikke aktivert enda 5 | %1$s er installert, men er ikke aktivert ennå 6 | %1$s har blitt installert til bruker %2$s, men er ikke aktivert ennå 7 | Xposed modul er oppdatert 8 | %s har blitt oppdatert, vennligst tvang-stopp og start apper på nytt i virkeområdet 9 | Xposed modul oppdatert, system-omstart kreves 10 | %s er blitt oppdatert, siden omfanget inneholder systemramme, nødvendig for omstart av endringene 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Moduł Xposed nie jest jeszcze aktywowany 5 | %1$s został zainstalowany, ale nie jest jeszcze aktywny 6 | %1$s został zainstalowany na użytkowniku %2$s, ale nie jest jeszcze aktywowany 7 | Moduł Xposed zaktualizowany 8 | %s został zaktualizowany, wymuś zatrzymanie i ponownie uruchom aplikacje w jego zakresie 9 | Zaktualizowano moduł Xposed, wymagane ponowne uruchomienie systemu 10 | %s został zaktualizowany, ponieważ zakres zawiera System Framework, wymagany restart aby zastosować zmiany 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-pt-rBR/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | O módulo ainda não está ativo 5 | %1$s foi instalado, mas ainda não está ativo 6 | %1$s foi instalado no usuário %2$s, mas ainda não está ativo 7 | Módulo Atualizado 8 | %s foi atualizado. Force a parada do módulo e reinicie os apps que estão em seu escopo 9 | Módulo Atualizado. É necessário reiniciar o sistema 10 | %s foi atualizado. Como o escopo contém o Framework do Sistema, é necessário reiniciar para aplicar as mudanças 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | O módulo ainda não está ativo 5 | %1$s foi instalado, mas ainda está inativo 6 | %1$s foi instalado no usuário %2$s, mas ainda está inativo 7 | Módulo Atualizado 8 | %s foi atualizado. Force a parada do módulo e reinicie os apps que estão em seu escopo 9 | Módulo Atualizado. É necessário reiniciar o sistema 10 | %s foi atualizado. Como o escopo contém o Framework do Sistema, é necessário reiniciar para aplicar as mudanças 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ro/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Modulul Xposed nu este inca activat 5 | %1$s a fost instalat, dar nu este încă activat 6 | %1$s a fost instalat la utilizatorul %2$s, dar nu este încă activat 7 | Modulul Xposed actualizat 8 | %s a fost actualizat, vă rugăm să forțați oprirea și repornirea aplicațiilor din domeniul său de aplicare 9 | Modulul Xposed a fost actualizat, este necesară repornirea sistemului 10 | %s a fost actualizat, deoarece domeniul de aplicare conține System Framework, necesară repornirea pentru a aplica modificările 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Модуль не включен 5 | Модуль %1$s установлен, но еще не включен 6 | Модуль %1$s установлен для пользователя %2$s, но еще не включен 7 | Модуль обновлен 8 | Модуль %s обновлен, остановите и запустите приложения выбранные для модуля 9 | Модуль обновлен, требуется перезагрузка 10 | Модуль %s обновлен, так как выбран системный фреймворк для модуля, требуется перезагрузка для применения изменений 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-sv/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modul är inte aktiverad än 5 | %1$s har installerats, men är ännu inte aktiverad. 6 | %1$s har installerats för användaren %2$s, men är ännu inte aktiverad. 7 | Xposed modul uppdaterad 8 | %s har uppdaterats. Tvinga stopp och starta om appar i dess omfattning 9 | Xposed modul uppdaterad, systemomstart krävs 10 | %s har uppdaterats, eftersom omfattningen innehåller Systemramverk, krävs omstart för att tillämpa ändringar 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | โมดูล Xposed ยังไม่ได้เปิดใช้งาน 5 | ติดตั้ง %1$s แล้ว แต่ยังไม่เปิดใช้งาน 6 | ติดตั้ง %1$s ให้กับผู้ใช้แล้ว %2$sแต่ยังไม่ได้เปิดใช้งาน 7 | โมดูล Xposed อัปเดตแล้ว 8 | %s ได้รับการอัปเดตแล้ว โปรดบังคับหยุดและรีสตาร์ทแอปที่อยู่ในขอบเขต 9 | อัปเดตโมดูล Xposed จำเป็นต้องรีบูตระบบ 10 | %s ได้รับการอัปเดตแล้ว เนื่องจากขอบเขตมี System Framework จำเป็นต้องรีบูตเพื่อใช้การเปลี่ยนแปลง 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-tr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed modülü henüz etkinleştirilmedi 5 | %1$s kuruldu, ancak henüz etkinleştirilmedi 6 | %1$s, kullanıcıya %2$syüklendi, ancak henüz etkinleştirilmedi 7 | Xposed modül güncellemesi 8 | %s güncellendi, lütfen kapsamındaki uygulamaları durdurmaya ve yeniden başlatmaya zorlayın 9 | Xposed modülü güncellendi, sistemin yeniden başlatılması gerekiyor 10 | %s Güncelleme kapsamı Sistem Çerçevesi içerdiğinden, değişiklikleri uygulamak için yeniden başlatma gereklidir 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-uk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Модуль Xposed ще не активований 5 | %1$s було встановлено, але ще не активовано 6 | %1$s було встановлено до користувача %2$s, але ще не активовано 7 | Модуль Xposed оновлено 8 | %s було оновлено, будь ласка, примусово перезапустіть програми з області модуля 9 | Модуль Xposed оновлено, потрібно перезавантаження системи 10 | %s було оновлено, оскільки область містить System Framework, необхідне перезавантаження для застосування змін 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-ur/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed ماڈیول ابھی تک چالو نہیں ہوا ہے۔ 5 | %1$s انسٹال ہو چکا ہے، لیکن ابھی تک چالو نہیں ہوا ہے۔ 6 | %1$s کو صارف %2$sپر انسٹال کر دیا گیا ہے، لیکن ابھی تک فعال نہیں ہوا ہے۔ 7 | Xposed ماڈیول کو اپ ڈیٹ کر دیا گیا۔ 8 | %s کو اپ ڈیٹ کر دیا گیا ہے، براہ کرم اس کے دائرہ کار میں ایپس کو زبردستی روکنے اور دوبارہ شروع کریں۔ 9 | Xposed ماڈیول کو اپ ڈیٹ کر دیا گیا، سسٹم ریبوٹ درکار ہے۔ 10 | %s کو اپ ڈیٹ کر دیا گیا ہے، چونکہ دائرہ کار میں سسٹم فریم ورک ہے، تبدیلیاں لاگو کرنے کے لیے ریبوٹ کی ضرورت ہے۔ 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mô-đun Xposed chưa được kích hoạt 5 | %1$s đã được cài đặt, nhưng chưa được kích hoạt 6 | %1$s vừa được cài đặt cho người dùng %2$s, nhưng chưa được kích hoạt 7 | Mô-đun Xposed đã được cập nhật 8 | %s đã được cập nhật, xin hãy buộc dừng và khởi động lại ứng dụng liên quan 9 | Mô-đun Xposed đã được cập nhật, yêu cầu khởi động lại hệ thống 10 | %s đã được cập nhật, vì phạm vi bao gồm Framework Hệ thống, thì khởi động lại là cần thiết để áp dụng các thay đổi 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed 模块尚未激活 5 | %1$s 已安装,但尚未激活 6 | %1$s 已安装到用户 %2$s,但尚未激活 7 | Xposed 模块已更新 8 | %s 已更新,请强行停止并重新打开其作用域内的应用 9 | Xposed 模块已更新,需要重新启动 10 | %s 已更新,由于作用域包含系统框架,需重启以应用更改 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-zh-rHK/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed 模組尚未啟動 5 | %1$s 已安裝, 但尚未啟動 6 | %1$s 已安裝, 但尚未啟動 7 | Xposed 模組已更新 8 | %s 已更新 9 | Xposed模組已更新,需要重啟系統。 10 | %s 已更新,由於作用域中包含系統框架,需要重啟系統。 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Xposed 模組尚未啟用 5 | %1$s 已安裝,但尚未啟用 6 | %1$s 已安裝到使用者 %2$s,但尚未啟用 7 | Xposed 模組已更新 8 | %s 已更新,請強制停止並重新打開其作用域內的程式 9 | Xposed 模組已更新,需要重新啟動。 10 | %s 已更新,由於作用域包含系統框架,需要重新啟動以套用修改。 11 | 12 | -------------------------------------------------------------------------------- /daemon/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Xposed module is not activated yet 4 | %1$s has been installed, but is not activated yet 5 | %1$s has been installed to user %2$s, but is not activated yet 6 | Xposed module updated 7 | %s has been updated, please force stop and restart apps in its scope 8 | Xposed module updated, system reboot required 9 | %s has been updated, since the scope contains System Framework, required reboot to apply changes 10 | 11 | -------------------------------------------------------------------------------- /dex2oat/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.cxx 3 | -------------------------------------------------------------------------------- /dex2oat/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2022 LSPosed Contributors 18 | */ 19 | 20 | plugins { 21 | id("com.android.library") 22 | } 23 | 24 | android { 25 | namespace = "org.lsposed.dex2oat" 26 | 27 | buildFeatures { 28 | androidResources = false 29 | buildConfig = false 30 | prefab = true 31 | } 32 | 33 | defaultConfig { 34 | minSdk = 29 35 | } 36 | 37 | externalNativeBuild { 38 | cmake { 39 | path("src/main/cpp/CMakeLists.txt") 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /dex2oat/src/main/cpp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dex2oat) 2 | cmake_minimum_required(VERSION 3.4.1) 3 | 4 | add_executable(dex2oat dex2oat.c) 5 | 6 | target_link_libraries(dex2oat log) 7 | 8 | if (DEFINED DEBUG_SYMBOLS_PATH) 9 | message(STATUS "Debug symbols will be placed at ${DEBUG_SYMBOLS_PATH}") 10 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 11 | COMMAND ${CMAKE_COMMAND} -E make_directory ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI} 12 | COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ 13 | ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI}/${PROJECT_NAME}.debug 14 | COMMAND ${CMAKE_STRIP} --strip-all $ 15 | COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink ${DEBUG_SYMBOLS_PATH}/${ANDROID_ABI}/${PROJECT_NAME}.debug 16 | $) 17 | endif() 18 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | ## For more details on how to configure your build environment visit 2 | # http://www.gradle.org/docs/current/userguide/build_environment.html 3 | # 4 | # Specifies the JVM arguments used for the daemon process. 5 | # The setting is particularly useful for tweaking memory settings. 6 | # Default value: -Xmx1024m -XX:MaxPermSize=256m 7 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 8 | # 9 | # When configured, Gradle will run in incubating parallel mode. 10 | # This option should only be used with decoupled projects. More details, visit 11 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 12 | # org.gradle.parallel=true 13 | 14 | android.experimental.enableNewResourceShrinker=true 15 | android.experimental.enableNewResourceShrinker.preciseShrinking=true 16 | android.enableAppCompileTimeRClass=true 17 | android.nonTransitiveRClass=true 18 | android.enableR8.fullMode=true 19 | android.useAndroidX=true 20 | 21 | agpVersion=7.3.0 22 | navVersion=2.5.2 23 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/5ec1cff/LSPosed/65136dc5ff07510e8462e792bb394d2365e6ef9c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /hiddenapi/bridge/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /hiddenapi/bridge/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | plugins { 21 | `java-library` 22 | } 23 | 24 | dependencies { 25 | compileOnly(projects.hiddenapi.stubs) 26 | } 27 | -------------------------------------------------------------------------------- /hiddenapi/bridge/src/main/java/hidden/ByteBufferDexClassLoader.java: -------------------------------------------------------------------------------- 1 | package hidden; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | import dalvik.system.BaseDexClassLoader; 6 | 7 | public class ByteBufferDexClassLoader extends BaseDexClassLoader { 8 | 9 | public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { 10 | super(dexFiles, parent); 11 | } 12 | 13 | public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { 14 | super(dexFiles, librarySearchPath, parent); 15 | } 16 | 17 | public String getLdLibraryPath() { 18 | return super.getLdLibraryPath(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hiddenapi/stubs/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /hiddenapi/stubs/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | plugins { 21 | `java-library` 22 | } 23 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/Application.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class Application { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.IContentProvider; 4 | 5 | public class ContentProviderHolder { 6 | public IContentProvider provider; 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/ContextImpl.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.Context; 4 | 5 | public class ContextImpl extends Context { 6 | } 7 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | package android.app; 21 | 22 | import android.os.Binder; 23 | import android.os.IBinder; 24 | import android.os.IInterface; 25 | 26 | public interface IApplicationThread extends IInterface { 27 | abstract class Stub extends Binder implements IApplicationThread { 28 | public static IApplicationThread asInterface(IBinder obj) { 29 | throw new UnsupportedOperationException(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/INotificationManager.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.pm.ParceledListSlice; 4 | import android.os.Binder; 5 | import android.os.IBinder; 6 | import android.os.IInterface; 7 | import android.os.RemoteException; 8 | 9 | import androidx.annotation.RequiresApi; 10 | 11 | public interface INotificationManager extends IInterface { 12 | void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id, 13 | Notification notification, int userId) throws RemoteException; 14 | 15 | void cancelNotificationWithTag(String pkg, String tag, int id, int userId) throws RemoteException; 16 | 17 | @RequiresApi(30) 18 | void cancelNotificationWithTag(String pkg, String opPkg, String tag, int id, int userId) throws RemoteException; 19 | 20 | void createNotificationChannels(String pkg, ParceledListSlice channelsList) throws RemoteException; 21 | 22 | abstract class Stub extends Binder implements INotificationManager { 23 | public static INotificationManager asInterface(IBinder obj) { 24 | throw new UnsupportedOperationException(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.ComponentName; 4 | import android.os.Binder; 5 | import android.os.IBinder; 6 | import android.os.IInterface; 7 | 8 | public interface IServiceConnection extends IInterface { 9 | void connected(ComponentName name, IBinder service, boolean dead); 10 | 11 | abstract class Stub extends Binder implements IServiceConnection { 12 | 13 | public static IServiceConnection asInterface(IBinder obj) { 14 | throw new UnsupportedOperationException(); 15 | } 16 | 17 | @Override 18 | public IBinder asBinder() { 19 | throw new UnsupportedOperationException(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/LoadedApk.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.pm.ApplicationInfo; 4 | 5 | public final class LoadedApk { 6 | public ApplicationInfo getApplicationInfo() { 7 | throw new UnsupportedOperationException("STUB"); 8 | } 9 | 10 | public ClassLoader getClassLoader() { 11 | throw new UnsupportedOperationException("STUB"); 12 | } 13 | 14 | public String getPackageName() { 15 | throw new UnsupportedOperationException("STUB"); 16 | } 17 | 18 | public String getResDir() { 19 | throw new UnsupportedOperationException("STUB"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/Notification.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class Notification { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class NotificationChannel { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | package android.app; 21 | 22 | public class ProfilerInfo { 23 | } 24 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class ResourcesManager { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/AttributionSource.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public class AttributionSource { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public abstract class BroadcastReceiver { 4 | public abstract void onReceive(Context context, Intent intent); 5 | } 6 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/ComponentName.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public final class ComponentName { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/Context.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | import android.os.Handler; 4 | import android.os.IBinder; 5 | import android.os.UserHandle; 6 | 7 | public class Context { 8 | public IBinder getActivityToken() { 9 | throw new UnsupportedOperationException("STUB"); 10 | } 11 | public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, 12 | IntentFilter filter, String broadcastPermission, Handler scheduler) { 13 | throw new UnsupportedOperationException("STUB"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/IContentProvider.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | import android.os.Bundle; 4 | import android.os.IInterface; 5 | import android.os.RemoteException; 6 | 7 | import androidx.annotation.RequiresApi; 8 | 9 | public interface IContentProvider extends IInterface { 10 | @RequiresApi(29) 11 | Bundle call(String callingPkg, String authority, String method, 12 | String arg, Bundle extras) throws RemoteException; 13 | 14 | @RequiresApi(30) 15 | Bundle call(String callingPkg, String attributionTag, String authority, 16 | String method, String arg, Bundle extras) throws RemoteException; 17 | 18 | @RequiresApi(31) 19 | Bundle call(AttributionSource attributionSource, String authority, 20 | String method, String arg, Bundle extras) throws RemoteException; 21 | } 22 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/IIntentSender.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | import android.os.Binder; 4 | import android.os.Bundle; 5 | import android.os.IBinder; 6 | import android.os.IInterface; 7 | 8 | import androidx.annotation.RequiresApi; 9 | 10 | public interface IIntentSender extends IInterface { 11 | 12 | int send(int code, Intent intent, String resolvedType, 13 | IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); 14 | 15 | @RequiresApi(26) 16 | void send(int code, Intent intent, String resolvedType, IBinder whitelistToken, 17 | IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); 18 | 19 | abstract class Stub extends Binder implements IIntentSender { 20 | 21 | public Stub() { 22 | throw new UnsupportedOperationException(); 23 | } 24 | 25 | @Override 26 | public android.os.IBinder asBinder() { 27 | throw new UnsupportedOperationException(); 28 | } 29 | 30 | public static IIntentSender asInterface(IBinder binder) { 31 | throw new UnsupportedOperationException(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/Intent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | package android.content; 21 | 22 | public class Intent { 23 | } 24 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/IntentFilter.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public class IntentFilter { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/IntentSender.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public class IntentSender { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/ApplicationInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import androidx.annotation.RequiresApi; 4 | 5 | public class ApplicationInfo { 6 | public String credentialProtectedDataDir; 7 | 8 | public String[] resourceDirs; 9 | 10 | @RequiresApi(31) 11 | public String[] overlayPaths; 12 | } 13 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/BaseParceledListSlice.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import java.util.List; 4 | 5 | abstract class BaseParceledListSlice { 6 | 7 | public List getList() { 8 | throw new RuntimeException("STUB"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/IPackageInstaller.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import android.os.Binder; 4 | import android.os.IBinder; 5 | import android.os.IInterface; 6 | 7 | public interface IPackageInstaller extends IInterface { 8 | 9 | void uninstall(android.content.pm.VersionedPackage versionedPackage, java.lang.String callerPackageName, int flags, android.content.IntentSender statusReceiver, int userId) throws android.os.RemoteException; 10 | 11 | abstract class Stub extends Binder implements IPackageInstaller { 12 | public static IPackageInstaller asInterface(IBinder obj) { 13 | throw new UnsupportedOperationException(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/IShortcutService.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import android.content.IntentSender; 4 | import android.os.Binder; 5 | import android.os.IBinder; 6 | import android.os.IInterface; 7 | import android.os.RemoteException; 8 | 9 | public interface IShortcutService extends IInterface { 10 | boolean isRequestPinItemSupported(int user, int requestType) throws RemoteException; 11 | ParceledListSlice getShortcuts(String packageName, int matchFlags, int userId) throws RemoteException; 12 | ParceledListSlice getPinnedShortcuts(String packageName, int userId) throws RemoteException; 13 | boolean requestPinShortcut(String packageName, ShortcutInfo shortcut, 14 | IntentSender resultIntent, int userId) throws RemoteException; 15 | 16 | boolean updateShortcuts(String packageName, ParceledListSlice shortcuts, int userId) throws RemoteException; 17 | 18 | abstract class Stub extends Binder implements IShortcutService { 19 | 20 | public static IShortcutService asInterface(IBinder obj) { 21 | throw new RuntimeException("STUB"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class PackageInfo { 4 | 5 | public String overlayTarget; 6 | } 7 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class PackageInstaller { 4 | public static class SessionParams { 5 | public int installFlags = 0; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import java.util.List; 4 | 5 | public class PackageManager { 6 | public List getInstalledPackagesAsUser(int flags, int userId) { 7 | throw new UnsupportedOperationException("STUB"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import java.io.File; 4 | 5 | public class PackageParser { 6 | public static class PackageLite { 7 | public final String packageName = null; 8 | } 9 | 10 | /** Before SDK21 */ 11 | public static PackageLite parsePackageLite(String packageFile, int flags) { 12 | throw new UnsupportedOperationException("STUB"); 13 | } 14 | 15 | /** Since SDK21 */ 16 | public static PackageLite parsePackageLite(File packageFile, int flags) throws PackageParserException { 17 | throw new UnsupportedOperationException("STUB"); 18 | } 19 | 20 | /** Since SDK21 */ 21 | @SuppressWarnings("serial") 22 | public static class PackageParserException extends Exception { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/ParceledListSlice.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import java.util.List; 4 | 5 | public class ParceledListSlice extends BaseParceledListSlice { 6 | public ParceledListSlice(List list) { 7 | throw new IllegalArgumentException("STUB"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/ResolveInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class ResolveInfo { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/ShortcutInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public class ShortcutInfo implements Parcelable { 7 | public static final Creator CREATOR = new Creator<>() { 8 | @Override 9 | public ShortcutInfo createFromParcel(Parcel in) { 10 | throw new IllegalArgumentException("STUB"); 11 | } 12 | 13 | @Override 14 | public ShortcutInfo[] newArray(int size) { 15 | throw new IllegalArgumentException("STUB"); 16 | } 17 | }; 18 | 19 | @Override 20 | public void writeToParcel(Parcel dest, int flags) { 21 | throw new IllegalArgumentException("STUB"); 22 | } 23 | 24 | @Override 25 | public int describeContents() { 26 | throw new IllegalArgumentException("STUB"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/UserInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class UserInfo { 4 | public int id; 5 | public String name; 6 | } 7 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/pm/VersionedPackage.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class VersionedPackage { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | public final class AssetManager { 7 | public final int addAssetPath(String path) { 8 | throw new UnsupportedOperationException("STUB"); 9 | } 10 | 11 | public void close() { 12 | throw new UnsupportedOperationException("STUB"); 13 | } 14 | 15 | public final InputStream open(String fileName) throws IOException { 16 | throw new UnsupportedOperationException("STUB"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class CompatibilityInfo { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/Configuration.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class Configuration { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/Resources.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | import android.util.DisplayMetrics; 4 | 5 | public class Resources { 6 | public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) { 7 | throw new UnsupportedOperationException("STUB"); 8 | } 9 | 10 | public Resources(ClassLoader classLoader) { 11 | throw new UnsupportedOperationException("STUB"); 12 | } 13 | 14 | public void setImpl(ResourcesImpl impl) { 15 | throw new UnsupportedOperationException("STUB"); 16 | } 17 | 18 | public CompatibilityInfo getCompatibilityInfo() { 19 | throw new UnsupportedOperationException("STUB"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class ResourcesImpl { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class ResourcesKey { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class TypedArray { 4 | protected TypedArray(Resources resources) { 5 | throw new UnsupportedOperationException("STUB"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java: -------------------------------------------------------------------------------- 1 | package android.ddm; 2 | 3 | public class DdmHandleAppName { 4 | public static void setAppName(String name, int userId) { 5 | throw new RuntimeException("STUB"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/graphics/Movie.java: -------------------------------------------------------------------------------- 1 | package android.graphics; 2 | 3 | public class Movie { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java: -------------------------------------------------------------------------------- 1 | package android.graphics.drawable; 2 | 3 | public class Drawable { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Build.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Build { 4 | public static class VERSION { 5 | public final static int SDK_INT = SystemProperties.getInt( 6 | "ro.build.version.sdk", 0); 7 | } 8 | public static class VERSION_CODES { 9 | public static final int O_MR1 = 27; 10 | public static final int P = 28; 11 | public static final int Q = 29; 12 | public static final int R = 30; 13 | public static final int S = 31; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Bundle.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | package android.os; 21 | 22 | public class Bundle { 23 | } 24 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Environment.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import java.io.File; 4 | 5 | public class Environment { 6 | public static File getDataProfilesDePackageDirectory(int userId, String packageName) { 7 | throw new IllegalArgumentException("STUB"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Handler.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Handler { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IBinder.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.annotation.NonNull; 4 | import android.annotation.Nullable; 5 | 6 | import java.io.FileDescriptor; 7 | 8 | public interface IBinder { 9 | 10 | boolean transact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags); 11 | 12 | @Nullable 13 | String getInterfaceDescriptor(); 14 | 15 | boolean pingBinder(); 16 | 17 | boolean isBinderAlive(); 18 | 19 | @Nullable 20 | IInterface queryLocalInterface(@NonNull String descriptor); 21 | 22 | void dump(@NonNull FileDescriptor fd, @Nullable String[] args); 23 | 24 | void dumpAsync(@NonNull FileDescriptor fd, @Nullable String[] args); 25 | 26 | void linkToDeath(@NonNull DeathRecipient recipient, int flags); 27 | 28 | boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags); 29 | 30 | interface DeathRecipient { 31 | void binderDied(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IInterface.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public interface IInterface { 4 | 5 | IBinder asBinder(); 6 | } 7 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IPowerManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public interface IPowerManager extends IInterface { 4 | void reboot(boolean confirm, String reason, boolean wait) throws RemoteException; 5 | 6 | abstract class Stub extends Binder implements IPowerManager { 7 | 8 | public static IPowerManager asInterface(IBinder obj) { 9 | throw new UnsupportedOperationException(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | public interface IServiceCallback extends IInterface 3 | { 4 | public static abstract class Stub extends android.os.Binder implements android.os.IServiceCallback { 5 | } 6 | /** 7 | * Called when a service is registered. 8 | * 9 | * @param name the service name that has been registered with 10 | * @param binder the binder that is registered 11 | */ 12 | public void onRegistration(java.lang.String name, android.os.IBinder binder) throws android.os.RemoteException; 13 | } 14 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IServiceManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public interface IServiceManager extends IInterface { 4 | 5 | void tryUnregisterService(java.lang.String name, android.os.IBinder service); 6 | 7 | IBinder getService(String name); 8 | 9 | public void registerForNotifications(String name, IServiceCallback cb); 10 | 11 | abstract class Stub extends Binder implements IServiceManager { 12 | public static IServiceManager asInterface(IBinder obj) { 13 | throw new UnsupportedOperationException(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/IUserManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.content.pm.UserInfo; 4 | 5 | import androidx.annotation.RequiresApi; 6 | 7 | import java.util.List; 8 | 9 | public interface IUserManager extends IInterface { 10 | @RequiresApi(26) 11 | boolean isUserUnlocked(int userId) 12 | throws RemoteException; 13 | 14 | List getUsers(boolean excludeDying) 15 | throws RemoteException; 16 | 17 | List getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated) 18 | throws RemoteException; 19 | 20 | UserInfo getUserInfo(int userHandle); 21 | 22 | UserInfo getProfileParent(int userId) throws RemoteException; 23 | 24 | boolean isUserUnlockingOrUnlocked(int userId) throws RemoteException; 25 | 26 | abstract class Stub extends Binder implements IUserManager { 27 | 28 | public static IUserManager asInterface(IBinder obj) { 29 | throw new RuntimeException("STUB"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Parcel.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Parcel { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/Parcelable.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public interface Parcelable { 4 | interface Creator{ 5 | public T createFromParcel(Parcel source); 6 | public T[] newArray(int size); 7 | } 8 | void writeToParcel(Parcel dest, int flags); 9 | int describeContents(); 10 | } 11 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class PersistableBundle { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/RemoteException.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class RemoteException extends Exception { 4 | 5 | public RemoteException(String message) { 6 | throw new RuntimeException("STUB"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class ResultReceiver { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/SELinux.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class SELinux { 4 | public static boolean checkSELinuxAccess(String scon, String tcon, String tclass, String perm) { 5 | throw new UnsupportedOperationException("Stub"); 6 | } 7 | 8 | public static boolean setFileContext(String path, String context) { 9 | throw new UnsupportedOperationException("Stub"); 10 | } 11 | 12 | public static boolean setFSCreateContext(String context){ 13 | throw new UnsupportedOperationException("Stub"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/ServiceManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.annotation.Nullable; 4 | 5 | public class ServiceManager { 6 | 7 | /** 8 | * Returns a reference to a service with the given name. 9 | * 10 | * @param name the name of the service to get 11 | * @return a reference to the service, or null if the service doesn't exist 12 | */ 13 | @Nullable 14 | public static IBinder getService(String name) { 15 | throw new RuntimeException("STUB"); 16 | } 17 | 18 | /** 19 | * Place a new @a service called @a name into the service 20 | * manager. 21 | * 22 | * @param name the name of the new service 23 | * @param service the service object 24 | */ 25 | public static void addService(String name, IBinder service) { 26 | throw new RuntimeException("STUB"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/ShellCallback.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class ShellCallback implements Parcelable { 4 | public static final Parcelable.Creator CREATOR = new Creator<>() { 5 | @Override 6 | public ShellCallback createFromParcel(Parcel source) { 7 | throw new IllegalArgumentException("STUB"); 8 | } 9 | 10 | @Override 11 | public ShellCallback[] newArray(int size) { 12 | throw new IllegalArgumentException("STUB"); 13 | } 14 | }; 15 | 16 | @Override 17 | public void writeToParcel(Parcel dest, int flags) { 18 | throw new IllegalArgumentException("STUB"); 19 | } 20 | 21 | @Override 22 | public int describeContents() { 23 | throw new IllegalArgumentException("STUB"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/ShellCommand.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import java.io.FileDescriptor; 4 | import java.io.InputStream; 5 | import java.io.PrintWriter; 6 | 7 | public abstract class ShellCommand { 8 | public int exec(Binder target, FileDescriptor in, FileDescriptor out, FileDescriptor err, 9 | String[] args, ShellCallback callback, ResultReceiver resultReceiver) { 10 | throw new IllegalArgumentException("STUB!"); 11 | } 12 | 13 | public abstract int onCommand(String cmd); 14 | public abstract void onHelp(); 15 | 16 | public String getNextOption(){ 17 | throw new IllegalArgumentException("STUB!"); 18 | } 19 | 20 | public String getNextArgRequired() { 21 | throw new IllegalArgumentException("STUB!"); 22 | } 23 | 24 | public PrintWriter getErrPrintWriter() { 25 | throw new IllegalArgumentException("STUB!"); 26 | } 27 | public PrintWriter getOutPrintWriter() { 28 | throw new IllegalArgumentException("STUB!"); 29 | } 30 | public InputStream getRawInputStream() { 31 | throw new IllegalArgumentException("STUB!"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/SystemProperties.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.annotation.NonNull; 4 | import android.annotation.Nullable; 5 | 6 | public class SystemProperties { 7 | public static String get(@NonNull String key) { 8 | throw new UnsupportedOperationException("Stub"); 9 | } 10 | 11 | public static String get(@NonNull String key, @Nullable String def) { 12 | throw new UnsupportedOperationException("Stub"); 13 | } 14 | 15 | public static void set(@NonNull String key, @Nullable String val) { 16 | throw new UnsupportedOperationException("Stub"); 17 | } 18 | 19 | public static boolean getBoolean(@NonNull String key, boolean def) { 20 | throw new UnsupportedOperationException("Stub"); 21 | } 22 | 23 | public static int getInt(@NonNull String key, int def) { 24 | throw new UnsupportedOperationException("Stub"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/UserHandle.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.annotation.NonNull; 4 | 5 | public class UserHandle { 6 | 7 | public UserHandle(int h) { 8 | throw new RuntimeException("STUB"); 9 | } 10 | 11 | public int getIdentifier() { 12 | throw new RuntimeException("STUB"); 13 | } 14 | 15 | public static final @NonNull 16 | UserHandle ALL = null; 17 | } 18 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/os/UserManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import android.content.pm.UserInfo; 4 | 5 | import java.util.List; 6 | 7 | public class UserManager { 8 | public List getUsers() { 9 | throw new UnsupportedOperationException("STUB"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/system/ErrnoException.java: -------------------------------------------------------------------------------- 1 | package android.system; 2 | 3 | public final class ErrnoException extends Exception { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/system/Int32Ref.java: -------------------------------------------------------------------------------- 1 | package android.system; 2 | 3 | import java.util.Objects; 4 | 5 | public class Int32Ref { 6 | public int value; 7 | 8 | public Int32Ref(int value) { 9 | this.value = value; 10 | } 11 | 12 | @Override public String toString() { 13 | return Objects.toString(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/system/Os.java: -------------------------------------------------------------------------------- 1 | package android.system; 2 | 3 | import android.util.MutableInt; 4 | 5 | import androidx.annotation.RequiresApi; 6 | 7 | import java.io.FileDescriptor; 8 | 9 | public class Os { 10 | public static int ioctlInt(FileDescriptor fd, int cmd, MutableInt arg) throws ErrnoException { 11 | throw new ErrnoException(); 12 | } 13 | 14 | @RequiresApi(27) 15 | public static int ioctlInt(FileDescriptor fd, int cmd, Int32Ref arg) throws ErrnoException { 16 | throw new ErrnoException(); 17 | } 18 | 19 | @RequiresApi(31) 20 | public static int ioctlInt(FileDescriptor fd, int cmd) throws ErrnoException { 21 | throw new ErrnoException(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java: -------------------------------------------------------------------------------- 1 | package android.util; 2 | 3 | public class DisplayMetrics { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/util/MutableInt.java: -------------------------------------------------------------------------------- 1 | package android.util; 2 | 3 | public final class MutableInt { 4 | public int value; 5 | 6 | public MutableInt(int value) { 7 | this.value = value; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/util/TypedValue.java: -------------------------------------------------------------------------------- 1 | package android.util; 2 | 3 | public class TypedValue { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/view/IWindowManager.java: -------------------------------------------------------------------------------- 1 | package android.view; 2 | 3 | import android.app.IActivityManager; 4 | import android.os.Binder; 5 | import android.os.Bundle; 6 | import android.os.IBinder; 7 | import android.os.IInterface; 8 | 9 | public interface IWindowManager extends IInterface { 10 | void lockNow(Bundle options); 11 | 12 | abstract class Stub extends Binder implements IWindowManager { 13 | public static IWindowManager asInterface(IBinder obj) { 14 | throw new UnsupportedOperationException(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java: -------------------------------------------------------------------------------- 1 | package android.webkit; 2 | 3 | public class WebViewDelegate { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java: -------------------------------------------------------------------------------- 1 | package android.webkit; 2 | 3 | public class WebViewFactory { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java: -------------------------------------------------------------------------------- 1 | package android.webkit; 2 | 3 | public class WebViewFactoryProvider { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java: -------------------------------------------------------------------------------- 1 | package com.android.internal.os; 2 | 3 | import android.os.IBinder; 4 | 5 | public class BinderInternal { 6 | public static final native IBinder getContextObject(); 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java: -------------------------------------------------------------------------------- 1 | package com.android.internal.os; 2 | 3 | public class ZygoteInit { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java: -------------------------------------------------------------------------------- 1 | package com.android.internal.util; 2 | 3 | import org.xmlpull.v1.XmlPullParserException; 4 | 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.util.HashMap; 8 | 9 | public class XmlUtils { 10 | @SuppressWarnings("rawtypes") 11 | public static final HashMap readMapXml(InputStream in) throws XmlPullParserException, IOException { 12 | throw new UnsupportedOperationException("STUB"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java: -------------------------------------------------------------------------------- 1 | package com.android.server; 2 | 3 | public class LocalServices { 4 | 5 | public static T getService(Class type) { 6 | throw new UnsupportedOperationException("STUB"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/server/SystemService.java: -------------------------------------------------------------------------------- 1 | package com.android.server; 2 | 3 | public abstract class SystemService { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java: -------------------------------------------------------------------------------- 1 | package com.android.server; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class SystemServiceManager { 6 | private final ArrayList mServices = new ArrayList<>(); 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java: -------------------------------------------------------------------------------- 1 | package com.android.server.am; 2 | 3 | import com.android.server.SystemService; 4 | 5 | public class ActivityManagerService { 6 | public static final class Lifecycle extends SystemService { 7 | public ActivityManagerService getService() { 8 | throw new UnsupportedOperationException("STUB"); 9 | } 10 | private ProcessRecord findProcessLocked(String process, int userId, String callName) { 11 | throw new UnsupportedOperationException("STUB"); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java: -------------------------------------------------------------------------------- 1 | package com.android.server.am; 2 | 3 | public class ProcessRecord { 4 | String processName = null; 5 | } 6 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/dalvik/annotation/optimization/FastNative.java: -------------------------------------------------------------------------------- 1 | package dalvik.annotation.optimization; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.CLASS) 9 | @Target(ElementType.METHOD) 10 | public @interface FastNative { 11 | } 12 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java: -------------------------------------------------------------------------------- 1 | package dalvik.system; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | public class BaseDexClassLoader extends ClassLoader { 6 | public BaseDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { 7 | throw new RuntimeException("Stub!"); 8 | } 9 | 10 | public BaseDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { 11 | throw new RuntimeException("Stub!"); 12 | } 13 | 14 | public String getLdLibraryPath() { 15 | throw new RuntimeException("Stub!"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java: -------------------------------------------------------------------------------- 1 | package dalvik.system; 2 | 3 | public class VMRuntime { 4 | 5 | public static VMRuntime getRuntime() { 6 | throw new RuntimeException("Stub!"); 7 | } 8 | 9 | // Use `Process.is64Bit()` instead 10 | public native boolean is64Bit(); 11 | 12 | public native String vmInstructionSet(); 13 | 14 | public native boolean isJavaDebuggable(); 15 | } 16 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java: -------------------------------------------------------------------------------- 1 | package org.xmlpull.v1; 2 | 3 | public class XmlPullParserException extends Throwable { 4 | } 5 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java: -------------------------------------------------------------------------------- 1 | package sun.net.www; 2 | 3 | public class ParseUtil { 4 | public static String encodePath(String path, boolean flag) { 5 | throw new RuntimeException("Stub!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java: -------------------------------------------------------------------------------- 1 | package xposed.dummy; 2 | 3 | import android.content.res.Resources; 4 | 5 | /** 6 | * This class is used as super class of XResources. 7 | * 8 | * This implementation isn't included in the .dex file. Instead, it's created on the device. 9 | * Usually, it will extend Resources, but some ROMs use their own Resources subclass. 10 | * In that case, XResourcesSuperClass will extend the ROM's subclass in an attempt to increase 11 | * compatibility. 12 | */ 13 | public class XResourcesSuperClass extends Resources { 14 | /** Dummy, will never be called (objects are transferred to this class only). */ 15 | protected XResourcesSuperClass() { 16 | super(null, null, null); 17 | throw new UnsupportedOperationException(); 18 | } 19 | 20 | protected XResourcesSuperClass(ClassLoader classLoader) { 21 | super(classLoader); 22 | throw new UnsupportedOperationException(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java: -------------------------------------------------------------------------------- 1 | package xposed.dummy; 2 | 3 | import android.content.res.Resources; 4 | import android.content.res.TypedArray; 5 | 6 | /** 7 | * This class is used as super class of XResources.XTypedArray. 8 | * 9 | * This implementation isn't included in the .dex file. Instead, it's created on the device. 10 | * Usually, it will extend TypedArray, but some ROMs use their own TypedArray subclass. 11 | * In that case, XTypedArraySuperClass will extend the ROM's subclass in an attempt to increase 12 | * compatibility. 13 | */ 14 | public class XTypedArraySuperClass extends TypedArray { 15 | /** Dummy, will never be called (objects are transferred to this class only). */ 16 | protected XTypedArraySuperClass(Resources resources) { 17 | super(resources); 18 | throw new UnsupportedOperationException(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /magisk-loader/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /release 3 | /.cxx 4 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | ################# 2 | # Initialization 3 | ################# 4 | 5 | umask 022 6 | 7 | # echo before loading util_functions 8 | ui_print() { echo "$1"; } 9 | 10 | require_new_magisk() { 11 | ui_print "*******************************" 12 | ui_print " Please install Magisk v20.4+! " 13 | ui_print "*******************************" 14 | exit 1 15 | } 16 | 17 | ######################### 18 | # Load util_functions.sh 19 | ######################### 20 | 21 | OUTFD=$2 22 | ZIPFILE=$3 23 | 24 | [ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk 25 | . /data/adb/magisk/util_functions.sh 26 | [ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk 27 | 28 | install_module 29 | exit 0 30 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/module.prop: -------------------------------------------------------------------------------- 1 | id=${moduleId} 2 | name=${api} - LSPosed 3 | version=${versionName} (${versionCode}) 4 | versionCode=${versionCode} 5 | author=${authorList} 6 | description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 13. ${requirement}. 7 | updateJson=${updateJson} 8 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/post-fs-data.sh: -------------------------------------------------------------------------------- 1 | # 2 | # This file is part of LSPosed. 3 | # 4 | # LSPosed is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # LSPosed is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with LSPosed. If not, see . 16 | # 17 | # Copyright (C) 2021 LSPosed Contributors 18 | # 19 | 20 | MODDIR=${0%/*} 21 | 22 | rm -f "/data/local/tmp/daemon.apk" 23 | cd "$MODDIR" 24 | 25 | unshare -m sh -c "$MODDIR/daemon $@&" 26 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/sepolicy.rule: -------------------------------------------------------------------------------- 1 | allow system_server system_server process execmem 2 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/service.sh: -------------------------------------------------------------------------------- 1 | # 2 | # This file is part of LSPosed. 3 | # 4 | # LSPosed is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # LSPosed is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with LSPosed. If not, see . 16 | # 17 | # Copyright (C) 2021 LSPosed Contributors 18 | # 19 | 20 | MODDIR=${0%/*} 21 | cd "$MODDIR" 22 | # post-fs-data.sh may be blocked by other modules. retry to start this 23 | unshare -m sh -c "$MODDIR/daemon --from-service $@&" 24 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/system.prop: -------------------------------------------------------------------------------- 1 | dalvik.vm.dex2oat-flags=--inline-max-code-units=0 2 | -------------------------------------------------------------------------------- /magisk-loader/magisk_module/uninstall.sh: -------------------------------------------------------------------------------- 1 | # 2 | # This file is part of LSPosed. 3 | # 4 | # LSPosed is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # LSPosed is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with LSPosed. If not, see . 16 | # 17 | # Copyright (C) 2021 LSPosed Contributors 18 | # 19 | 20 | MODDIR=${0%/*} 21 | MODSDIR=$(dirname "$MODDIR") 22 | if [ -d "$MODSDIR/riru_lsposed" ] && [ -d "$MODSDIR/zygisk_lsposed" ]; then 23 | if [ -f "$MODSDIR/riru_lsposed/remove" ] && [ -f "$MODSDIR/zygisk_lsposed/remove" ]; then 24 | rm -rf /data/adb/lspd 25 | fi 26 | else 27 | rm -rf /data/adb/lspd 28 | fi 29 | 30 | rm -rf /data/adb/riru/modules/lspd 31 | -------------------------------------------------------------------------------- /magisk-loader/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keepclasseswithmembers class org.lsposed.lspd.core.Main { 2 | public static void forkCommon(boolean, java.lang.String, android.os.IBinder); 3 | } 4 | -keepclasseswithmembers,includedescriptorclasses class * { 5 | native ; 6 | } 7 | -keepclasseswithmembers class org.lsposed.lspd.service.BridgeService { 8 | public static boolean *(android.os.IBinder, int, long, long, int); 9 | } 10 | 11 | -assumenosideeffects class android.util.Log { 12 | public static *** v(...); 13 | public static *** d(...); 14 | } 15 | -repackageclasses 16 | -allowaccessmodification 17 | -dontwarn org.slf4j.impl.StaticLoggerBinder 18 | -------------------------------------------------------------------------------- /magisk-loader/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /magisk-loader/src/main/jni/include/loader.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2022 LSPosed Contributors 18 | */ 19 | 20 | // 21 | // Created by Nullptr on 2022/3/16. 22 | // 23 | 24 | #pragma once 25 | 26 | #include "config.h" 27 | 28 | namespace lspd { 29 | extern const int apiVersion; 30 | extern const char* const moduleName; 31 | } 32 | -------------------------------------------------------------------------------- /magisk-loader/src/main/jni/template/loader.cpp: -------------------------------------------------------------------------------- 1 | #include "loader.h" 2 | 3 | namespace lspd { 4 | const int apiVersion = ${API_VERSION}; 5 | const char* const moduleName = "${MODULE_NAME}"; 6 | } 7 | -------------------------------------------------------------------------------- /services/daemon-service/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /services/daemon-service/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | plugins { 21 | id("com.android.library") 22 | } 23 | 24 | android { 25 | defaultConfig { 26 | consumerProguardFiles("proguard-rules.pro") 27 | } 28 | 29 | buildTypes { 30 | release { 31 | isMinifyEnabled = false 32 | } 33 | } 34 | 35 | aidlPackagedList += "org/lsposed/lspd/models/Module.aidl" 36 | aidlPackagedList += "org/lsposed/lspd/models/PreloadedApk.aidl" 37 | namespace = "org.lsposed.lspd.daemonservice" 38 | } 39 | 40 | dependencies { 41 | compileOnly(projects.hiddenapi.stubs) 42 | } 43 | -------------------------------------------------------------------------------- /services/daemon-service/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 -------------------------------------------------------------------------------- /services/daemon-service/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /services/daemon-service/src/main/aidl/org/lsposed/lspd/models/Module.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.models; 2 | import org.lsposed.lspd.models.PreLoadedApk; 3 | 4 | parcelable Module { 5 | String packageName; 6 | int appId; 7 | String apkPath; 8 | PreLoadedApk file; 9 | } 10 | -------------------------------------------------------------------------------- /services/daemon-service/src/main/aidl/org/lsposed/lspd/models/PreLoadedApk.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.models; 2 | 3 | parcelable PreLoadedApk { 4 | List preLoadedDexes; 5 | List moduleClassNames; 6 | List moduleLibraryNames; 7 | } 8 | -------------------------------------------------------------------------------- /services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPApplicationService.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.service; 2 | 3 | import org.lsposed.lspd.models.Module; 4 | 5 | interface ILSPApplicationService { 6 | IBinder requestModuleBinder(String name); 7 | 8 | List getModulesList(); 9 | 10 | String getPrefsPath(String packageName); 11 | 12 | Bundle requestRemotePreference(String packageName, int userId, IBinder callback); 13 | 14 | ParcelFileDescriptor requestInjectedManagerBinder(out List binder); 15 | } 16 | -------------------------------------------------------------------------------- /services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPSystemServerService.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.service; 2 | 3 | import org.lsposed.lspd.service.ILSPApplicationService; 4 | 5 | interface ILSPSystemServerService { 6 | ILSPApplicationService requestApplicationService(int uid, int pid, String processName, IBinder heartBeat); 7 | } 8 | -------------------------------------------------------------------------------- /services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPosedService.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.service; 2 | 3 | import org.lsposed.lspd.service.ILSPApplicationService; 4 | 5 | interface ILSPosedService { 6 | ILSPApplicationService requestApplicationService(int uid, int pid, String processName, IBinder heartBeat); 7 | 8 | oneway void dispatchSystemServerContext(in IBinder activityThread, in IBinder activityToken, String api); 9 | 10 | boolean preStartManager(String pkgName, in Intent intent); 11 | } 12 | -------------------------------------------------------------------------------- /services/manager-service/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /services/manager-service/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of LSPosed. 3 | * 4 | * LSPosed is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * LSPosed is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with LSPosed. If not, see . 16 | * 17 | * Copyright (C) 2021 LSPosed Contributors 18 | */ 19 | 20 | plugins { 21 | id("com.android.library") 22 | } 23 | 24 | android { 25 | defaultConfig { 26 | consumerProguardFiles("proguard-rules.pro") 27 | } 28 | 29 | buildTypes { 30 | release { 31 | isMinifyEnabled = false 32 | } 33 | } 34 | namespace = "org.lsposed.lspd.managerservice" 35 | } 36 | 37 | dependencies { 38 | api(projects.services.xposedService.`interface`) 39 | } 40 | -------------------------------------------------------------------------------- /services/manager-service/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /services/manager-service/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /services/manager-service/src/main/aidl/org/lsposed/lspd/models/Application.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.models; 2 | 3 | parcelable Application { 4 | String packageName; 5 | int userId; 6 | } 7 | -------------------------------------------------------------------------------- /services/manager-service/src/main/aidl/org/lsposed/lspd/models/UserInfo.aidl: -------------------------------------------------------------------------------- 1 | package org.lsposed.lspd.models; 2 | 3 | parcelable UserInfo { 4 | int id; 5 | String name; 6 | } 7 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") 2 | 3 | pluginManagement { 4 | val navVersion: String by settings 5 | val agpVersion: String by settings 6 | repositories { 7 | gradlePluginPortal() 8 | google() 9 | mavenCentral() 10 | } 11 | plugins { 12 | id("com.android.library") version agpVersion 13 | id("com.android.application") version agpVersion 14 | id("androidx.navigation.safeargs") version navVersion 15 | id("dev.rikka.tools.autoresconfig") version "1.2.1" 16 | id("dev.rikka.tools.materialthemebuilder") version "1.3.3" 17 | } 18 | } 19 | 20 | dependencyResolutionManagement { 21 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 22 | repositories { 23 | google() 24 | mavenCentral() 25 | } 26 | } 27 | 28 | rootProject.name = "LSPosed" 29 | include( 30 | ":app", 31 | ":core", 32 | ":daemon", 33 | ":dex2oat", 34 | ":hiddenapi:stubs", 35 | ":hiddenapi:bridge", 36 | ":magisk-loader", 37 | ":services:manager-service", 38 | ":services:daemon-service", 39 | ":services:xposed-service:interface", 40 | ) 41 | --------------------------------------------------------------------------------