diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index c0a3d55ce..560be80a0 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -1,10 +1,10 @@
-name: Core
+name: Vector-PL
on:
workflow_dispatch:
push:
- branches: [ master ]
- tags: [ v* ]
+ branches: [ PL ]
+ tags: [ 2.0 ]
pull_request:
merge_group:
@@ -68,7 +68,10 @@ jobs:
- name: Setup Android SDK
uses: android-actions/setup-android@v3
-
+
+ - name: Install SDK components
+ run: sdkmanager "build-tools;34.0.0" "platforms;android-34" "cmake;3.22.1"
+
- name: Remove Android's cmake
shell: bash
run: rm -rf $ANDROID_HOME/cmake
@@ -81,10 +84,10 @@ jobs:
if: success()
id: prepareArtifact
run: |
- zygiskReleaseName=`ls zygisk/release/Vector-v*-Release.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskReleaseName=$zygiskReleaseName" >> $GITHUB_OUTPUT
- zygiskDebugName=`ls zygisk/release/Vector-v*-Debug.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskDebugName=$zygiskDebugName" >> $GITHUB_OUTPUT
- unzip zygisk/release/Vector-v*-Release.zip -d Vector-Release
- unzip zygisk/release/Vector-v*-Debug.zip -d Vector-Debug
+ zygiskReleaseName=`ls zygisk/release/Vector-*-Release.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskReleaseName=$zygiskReleaseName" >> $GITHUB_OUTPUT
+ zygiskDebugName=`ls zygisk/release/Vector-*-Debug.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskDebugName=$zygiskDebugName" >> $GITHUB_OUTPUT
+ unzip zygisk/release/Vector-*-Release.zip -d Vector-Release
+ unzip zygisk/release/Vector-*-Debug.zip -d Vector-Debug
- name: Upload zygisk release
uses: actions/upload-artifact@v6
diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml
deleted file mode 100644
index ad1ef4c53..000000000
--- a/.github/workflows/crowdin.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-name: Crowdin Action
-
-on:
- workflow_dispatch:
- push:
- branches: [ master ]
- paths:
- - app/src/main/res/values/strings.xml
- - daemon/src/main/res/values/strings.xml
-
-jobs:
- synchronize-with-crowdin:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@main
-
- - name: crowdin action
- uses: crowdin/github-action@master
- with:
- upload_translations: true
- download_translations: false
- upload_sources: true
- config: 'crowdin.yml'
- crowdin_branch_name: master
- env:
- CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
- CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 000000000..e774c7362
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,85 @@
+name: Vector-PL-Release
+
+on:
+ workflow_dispatch:
+ push:
+ branches: [ PL ]
+ tags: [ 2.0 ]
+ pull_request:
+ merge_group:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ fetch-depth: 0
+
+ - name: Write key
+ if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/PL' ) || github.ref_type == 'tag' }}
+ run: |
+ if [ ! -z "${{ secrets.KEY_STORE }}" ]; then
+ echo androidStorePassword='${{ secrets.KEY_STORE_PASSWORD }}' >> gradle.properties
+ echo androidKeyAlias='${{ secrets.ALIAS }}' >> gradle.properties
+ echo androidKeyPassword='${{ secrets.KEY_PASSWORD }}' >> gradle.properties
+ echo androidStoreFile='key.jks' >> gradle.properties
+ echo ${{ secrets.KEY_STORE }} | base64 --decode > key.jks
+ fi
+
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: 21
+
+ - name: Setup Android SDK & NDK
+ uses: android-actions/setup-android@v3
+ with:
+ packages: 'ndk-bundle'
+
+ - name: Install latest system Ninja and force override SDK
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y ninja-build
+
+ # Brutalne nadpisanie starego ninja w Android SDK najnowszą wersją systemową
+ NINJA_SYSTEM_PATH=$(which ninja)
+ SDK_NINJA_PATH="/usr/local/lib/android/sdk/cmake/3.31.5/bin/ninja"
+
+ if [ -f "$SDK_NINJA_PATH" ]; then
+ rm "$SDK_NINJA_PATH"
+ ln -s "$NINJA_SYSTEM_PATH" "$SDK_NINJA_PATH"
+ echo "Sukces: Nadpisano Ninja w SDK wersją systemową."
+ else
+ # Jeśli ścieżka się różni, tworzymy folder i link na zapas
+ mkdir -p "$(dirname "$SDK_NINJA_PATH")"
+ ln -s "$NINJA_SYSTEM_PATH" "$SDK_NINJA_PATH"
+ echo "Utworzono link awaryjny dla Ninja w SDK."
+ fi
+
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v4
+
+ - name: Configure Gradle properties
+ run: |
+ echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties
+ echo 'org.gradle.parallel=true' >> ~/.gradle/gradle.properties
+ echo 'org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties
+
+ - name: Build
+ run: ./gradlew zipAll
+
+ - name: Vector-PL-2.0.3043
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: "2.0"
+ name: Vector-PL-2.0.3043
+ files: |
+ zygisk/release/Vector-PL-2.0.3043-Release.zip
+ zygisk/release/Vector-PL-2.0.3043-Debug.zip
+ force: true
\ No newline at end of file
diff --git a/README.md b/README.md
index fed0b6a1d..e0595a041 100644
--- a/README.md
+++ b/README.md
@@ -1,120 +1,99 @@
-# Vector Framework
+# Zygisk Vector 2.0
-**A high-performance ART hooking framework for modern Android**
-
-[](https://github.com/JingMatrix/Vector/actions/workflows/core.yml?query=event%3Apush+branch%3Amaster+is%3Acompleted)
+[](https://github.com/Kuchta2100/Vector-PL/actions/workflows/core.yml?query=event%3Apush+branch%3APL+is%3Acompleted)
[](https://crowdin.com/project/lsposed_jingmatrix)
-[](https://github.com/JingMatrix/Vector/releases/latest)
-[](https://github.com/JingMatrix/Vector/releases)
-
+[](https://github.com/Kuchta2100/Vector-PL/releases/latest)
---
-### Introduction
+### Wprowadzenie
+
+Mój fork ma pełne i dokładniejsze polskie tłumaczenie.
+Naprawiłem też problem z nieładującą się listą modułów.
-Vector is a Zygisk module providing an ART hooking framework that maintains API consistency with the original Xposed. It is engineered on top of [LSPlant](https://github.com/JingMatrix/LSPlant) to deliver a stable, native-level instrumentation environment.
+Vector to moduł zygisk, który zapewnia strukturę do tworzenia zaczepów, zachowując spójność API z oryginalnym xposed. Został on opracowany na bazie [LSPlant](https://github.com/JingMatrix/LSPlant), aby zapewnić stabilne środowisko instrumentacji na poziomie natywnym.
-The framework allows modules to modify system and application behavior in-memory. Because no APK files are modified, changes are non-destructive, easily reversible via reboot, and compatible across various ROMs and Android versions.
+Vector umożliwia modułom modyfikację działania systemu i aplikacji w pamięci. Ponieważ pliki APK nie są modyfikowane, zmiany są nieniszczące, łatwo odwracalne poprzez ponowne uruchomienie i kompatybilne z różnymi ROM-ami i wersjami Androida.
---
-### Compatibility
+### Zgodność
-Vector supports devices running **Android 8.1 through Android 17 Beta**.
+Vector obsługuje urządzenia z systemem **Android 8.1 do Androida 17 Beta**.
> [!TIP]
-> This framework requires a recent installation of Magisk or KernelSU with Zygisk enabled.
+> Vector wymaga zainstalowania najnowszej wersji Magisk lub KernelSU z włączonym zygiskiem.
---
-### Installation
+### Instalacja
-1. Download the latest release as a system module.
-2. Install the module via your root manager (Magisk/KernelSU).
-3. Ensure a Zygisk environment (e.g., [NeoZygisk](https://github.com/JingMatrix/NeoZygisk)).
-4. Reboot the device.
-5. Access management settings via the system notification.
+1. Pobierz najnowszą wersję jako moduł systemowy.
+2. Zainstaluj moduł za pomocą menedżera root (magisk/kernelsu).
+3. Upewnij się, że środowisko zygisk (np. [Nyazygisk](https://github.com/HSSkyBoy/NyaZygisk/releases/tag/v2.3).
+4. Zrestartuj urządzenie.
+5. Uzyskaj dostęp do ustawień zarządzania za pomocą powiadomienia systemowego.
----
+--
-### Downloads
+### Pobieranie
-| Channel | Source |
+| Kanał | Źródło |
| :--- | :--- |
-| **Stable Releases** | [GitHub Releases](https://github.com/JingMatrix/Vector/releases) |
-| **Canary (CI) Builds** | [GitHub Actions](https://github.com/JingMatrix/Vector/actions/workflows/core.yml?query=branch%3Amaster) |
+| **Wersje stabilne** | [Wersje GitHub](https://github.com/Kuchta2100/Vector-PL/releases/tag/2.0) |
+| **Wersje testowe** | [Akcje GitHub](https://github.com/Kuchta2100/Vector-PL/actions/workflows/core.yml?query=branch%3APL) |
> [!NOTE]
-> Debug builds are recommended for users encountering issues or performing troubleshooting.
-> We encourage users to test CI builds to help us identify bugs and accelerate development.
+> Wersje debugowe są zalecane użytkownikom napotykającym problemy lub rozwiązującym problemy.
+> Zachęcamy użytkowników do testowania wersji testowej, aby pomóc nam identyfikować błędy i przyspieszać rozwój.
> [!CAUTION]
-> GitHub requires users to be **logged in** to download CI artifacts.
+> GitHub wymaga od użytkowników **zalogowania się**, aby mogli pobrać artefakty CI.
>
-> The link above is filtered to show only `master` branch builds.
-> Please note that builds from Pull Requests (PRs) are often unstable and potentially unsafe (depending on the authors); we recommend staying on the `master` branch for verified builds, unless you are asked to help our debugging sessions.
+> Powyższy link jest filtrowany i wyświetla tylko kompilacje z gałęzi `PL`.
+> Należy pamiętać, że kompilacje z żądań ściągnięcia (PR) są często niestabilne i potencjalnie niebezpieczne (w zależności od autorów); zalecamy pozostanie na gałęzi `PL` w przypadku zweryfikowanych kompilacji, chyba że zostaniesz poproszony o pomoc w naszych sesjach debugowania.
---
-### Support and Contribution
+### Wsparcie i wkład
-If you encounter issues or wish to help improve the project, please refer to the resources below.
+Jeśli napotkasz problemy lub chcesz pomóc w ulepszeniu projektu, zapoznaj się z poniższymi zasobami.
-* **Troubleshooting:** Consult the [guide](https://github.com/JingMatrix/Vector/issues/123) before reporting bugs.
-* **Discussions:** Join our community on [GitHub Discussions](https://github.com/JingMatrix/Vector/discussions).
-* **Localization:** Help translate the project via [Crowdin](https://crowdin.com/project/lsposed_jingmatrix).
+* **Rozwiązywanie problemów:** Przed zgłoszeniem błędów zapoznaj się z [poradnikiem](https://github.com/JingMatrix/Vector/issues/123).
+* **Dyskusje:** Dołącz do naszej społeczności w [Dyskusjach GitHub](https://github.com/JingMatrix/Vector/discussions).
+* **Lokalizacja:** Pomóż w tłumaczeniu projektu za pośrednictwem [Crowdin](https://crowdin.com/project/lsposed_jingmatrix)
-> [!IMPORTANT]
-> Bug reports are only accepted if they are based on the **latest debug build**.
->
-> *Notice for Chinese speakers:*
->
-> 为了提高沟通效率,本项目仅接受英文 Issue。请使用 [DeepL](https://www.deepl.com/zh/translator) 或其他翻译工具提交您的反馈。
+### Zasoby dla programistów
----
-
-### Developer Resources
-
-Vector supports both legacy and modern hooking standards to ensure broad module compatibility.
+Vector obsługuje zarówno starsze, jak i nowsze standardy przechwytywania, aby zapewnić szeroką kompatybilność modułów.
-* [Legacy Xposed API](https://api.xposed.info/)
-* [Modern libxposed API](https://libxposed.github.io/api/)
-* [Xposed Module Repository](https://github.com/Xposed-Modules-Repo)
+* [Nowoczesne API libxposed](https://libxposed.github.io/api/)
+* [Repozytorium modułów Xposed](https://github.com/Xposed-Modules-Repo)
> [!NOTE]
-> Vector supports the `libxposed` API via two git submodules: the [module API](./xposed/) and the [service API](./services/).
+>Vector obsługuje API `libxposed` za pośrednictwem dwóch podmodułów Git: [API modułów](./xposed/) i [API usług](./services/).
>
-> A successful GitHub Actions build of the [master](https://github.com/JingMatrix/Vector/tree/master) branch indicates that Vector fully supports these APIs at those specific commits.
-> Developers are suggested to check out the same commits as Vector.
+> Udana kompilacja gałęzi [master](https://github.com/JingMatrix/Vector/tree/master) w GitHub Actions wskazuje, że Vector w pełni obsługuje te API w tych konkretnych commitach.
+> Zaleca się, aby programiści sprawdzili te same commity, co Vector.
---
-### Credits
-
-This project is made possible by the following open-source contributions:
-
-* [Magisk](https://github.com/topjohnwu/Magisk/): The foundation of Android customization.
-* [LSPlant](https://github.com/JingMatrix/LSPlant): The core ART hooking engine.
-* [XposedBridge](https://github.com/rovo89/XposedBridge): The standard Xposed APIs.
-* [Dobby](https://github.com/JingMatrix/Dobby): Inline hooking implementation.
-* [LSPosed](https://github.com/LSPosed/LSPosed): Upstream source.
-* [xz-embedded](https://github.com/tukaani-project/xz-embedded): Library decompression utilities.
+### Podziękowania
-
-Legacy and Historical Dependencies
+Ten projekt jest możliwy dzięki następującym wkładom open source:
-- ~~[Riru](https://github.com/RikkaApps/Riru)~~
-- ~~[SandHook](https://github.com/ganyao114/SandHook/)~~
-- ~~[YAHFA](https://github.com/rk700/YAHFA)~~
-- ~~[dexmaker](https://github.com/linkedin/dexmaker)~~
-- ~~[DexBuilder](https://github.com/LSPosed/DexBuilder)~~
-
+* [Magisk](https://github.com/topjohnwu/Magisk/): Podstawa personalizacji Androida.
+* [LSPlant](https://github.com/JingMatrix/LSPlant): Główny silnik przechwytywania ART.
+ * [XposedBridge](https://github.com/rovo89/XposedBridge): Standardowe API Xposed.
+* [Dobby](https://github.com/JingMatrix/Dobby): Implementacja przechwytywania inline.
+* [LSPosed](https://github.com/LSPosed/LSPosed): Źródło źródłowe.
+* [xz-embedded](https://github.com/tukaani-project/xz-embedded): Narzędzia do dekompresji bibliotek.
---
-### License
+### Licencja
-Vector is licensed under the [GNU General Public License v3](http://www.gnu.org/copyleft/gpl.html).
+Vector jest licencjonowany na podstawie [Ogólnej Licencji Publicznej v3](http://www.gnu.org/copyleft/gpl.html).
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index b883c23b7..a99c38265 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,20 +1,20 @@
/*
- * This file is part of LSPosed.
- *
- * LSPosed is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * LSPosed is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with LSPosed. If not, see .
- *
- * Copyright (C) 2021 LSPosed Contributors
+* Ten plik jest częścią Vector.
+*
+* Vector jest wolnym oprogramowaniem: możesz je redystrybuować i/lub modyfikować
+* zgodnie z warunkami Powszechnej Licencji Publicznej GNU, opublikowanej przez
+* Fundację Wolnego Oprogramowania, w wersji 3 Licencji lub
+* (według własnego wyboru) dowolnej późniejszej wersji.
+*
+* Vector jest rozpowszechniany z nadzieją, że okaże się użyteczny,
+* ale BEZ ŻADNEJ GWARANCJI; nawet bez domniemanej gwarancji
+* PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Więcej informacji można znaleźć w
+* Powszechnej Licencji Publicznej GNU.
+*
+* Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU
+* wraz z Vector. W przeciwnym razie zapoznaj się z informacjami na stronie .
+*
+* Prawo autorskie (C) 2026 współtwórcy Vector
*/
import java.time.Instant
@@ -83,25 +83,25 @@ materialThemeBuilder {
themes {
for ((name, color) in
listOf(
- "Red" to "F44336",
- "Pink" to "E91E63",
- "Purple" to "9C27B0",
- "DeepPurple" to "673AB7",
- "Indigo" to "3F51B5",
- "Blue" to "2196F3",
- "LightBlue" to "03A9F4",
- "Cyan" to "00BCD4",
- "Teal" to "009688",
- "Green" to "4FAF50",
- "LightGreen" to "8BC3A4",
- "Lime" to "CDDC39",
- "Yellow" to "FFEB3B",
- "Amber" to "FFC107",
- "Orange" to "FF9800",
- "DeepOrange" to "FF5722",
- "Brown" to "795548",
- "BlueGrey" to "607D8F",
- "Sakura" to "FF9CA8",
+ "Red" to "FF0000",
+ "Pink" to "FFC0CB",
+ "Purple" to "800080",
+ "DeepPurple" to "36013F",
+ "Indigo" to "4B0082",
+ "Blue" to "0000FF",
+ "LightBlue" to "ADD8E6",
+ "Cyan" to "00FFFF",
+ "Teal" to "008080",
+ "Green" to "008000",
+ "LightGreen" to "90EE90",
+ "Lime" to "00FF00",
+ "Yellow" to "FFFF00",
+ "Amber" to "FFBF00",
+ "Orange" to "FFA500",
+ "DeepOrange" to "FF8C00",
+ "Brown" to "964B00",
+ "BlueGrey" to "6A89A7",
+ "Sakura" to "FCC9B9",
)) {
create("Material$name") {
lightThemeFormat = "ThemeOverlay.Light.%s"
@@ -110,9 +110,9 @@ materialThemeBuilder {
}
}
}
- // Add Material Design 3 color tokens (such as palettePrimary100) in generated theme
- // rikka.material:material >= 2.0.0 provides such attributes
- // Enable this if your are using rikka.material:material
+ // Dodaj 3 kolorowe tokeny Material Design (takie jak palettePrimary100) w wygenerowanym motywie
+ // rikka.material:material >= 2.0.0 zapewnia takie atrybuty
+ // Włącz tę opcję, jeśli używasz rikka.material:material
generatePalette = true
}
diff --git a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java
index bb4db3271..fa7265a1c 100644
--- a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java
+++ b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java
@@ -1,22 +1,21 @@
/*
- * This file is part of LSPosed.
- *
- * LSPosed is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * LSPosed is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with LSPosed. If not, see .
- *
- * Copyright (C) 2020 EdXposed Contributors
- * Copyright (C) 2021 LSPosed Contributors
- */
+* Ten plik jest częścią Vector.
+*
+* Vector jest wolnym oprogramowaniem: możesz je redystrybuować i/lub modyfikować
+* zgodnie z warunkami Powszechnej Licencji Publicznej GNU, opublikowanej przez
+* Fundację Wolnego Oprogramowania dowolnej późniejszej wersji.
+*
+* Vector jest rozpowszechniany z nadzieją, że okaże się użyteczny,
+* ale BEZ ŻADNEJ GWARANCJI; nawet bez domniemanej gwarancji
+* PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Więcej informacji można znaleźć w
+* Powszechnej Licencji Publicznej GNU.
+*
+* Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU
+* wraz z Vectorem. W przeciwnym razie zapoznaj się z informacjami na stronie .
+*
+* Prawo autorskie (C) 2026 współtwórcy EdXposed
+* Prawo autorskie (C) 2026 współtwórcy Vector
+*/
package org.lsposed.manager.repo;
@@ -76,11 +75,7 @@ public boolean upgradable(long versionCode, String versionName) {
private final Path repoFile = Paths.get(App.getInstance().getFilesDir().getAbsolutePath(), "repo.json");
private final Set listeners = ConcurrentHashMap.newKeySet();
private boolean repoLoaded = false;
- private static final String originRepoUrl = "https://modules.lsposed.org/";
- private static final String backupRepoUrl = "https://modules-blogcdn.lsposed.org/";
-
- private static final String secondBackupRepoUrl = "https://modules-cloudflare.lsposed.org/";
- private static String repoUrl = originRepoUrl;
+ private static final String repoUrl = "https://backup.modules.lsposed.org/";
private final Resources resources = App.getInstance().getResources();
private final String[] channels = resources.getStringArray(R.array.update_channel_values);
@@ -122,13 +117,6 @@ synchronized public void loadRemoteData() {
for (RepoListener listener : listeners) {
listener.onThrowable(e);
}
- if (repoUrl.equals(originRepoUrl)) {
- repoUrl = backupRepoUrl;
- loadRemoteData();
- } else if (repoUrl.equals(backupRepoUrl)) {
- repoUrl = secondBackupRepoUrl;
- loadRemoteData();
- }
}
}
@@ -252,16 +240,8 @@ public void loadRemoteReleases(String packageName) {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
Log.e(App.TAG, call.request().url() + e.getMessage());
- if (repoUrl.equals(originRepoUrl)) {
- repoUrl = backupRepoUrl;
- loadRemoteReleases(packageName);
- } else if (repoUrl.equals(backupRepoUrl)) {
- repoUrl = secondBackupRepoUrl;
- loadRemoteReleases(packageName);
- } else {
- for (RepoListener listener : listeners) {
- listener.onThrowable(e);
- }
+ for (RepoListener listener : listeners) {
+ listener.onThrowable(e);
}
}
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index c5d514c62..73f4a3914 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,248 +1,251 @@
-
+
+~ Ten plik jest częścią Vector.
+~
+~ Vector jest wolnym oprogramowaniem: możesz je redystrybuować i/lub modyfikować
+~ zgodnie z warunkami Powszechnej Licencji Publicznej, opublikowanej przez
+~ Fundację Wolnego Oprogramowania, w wersji 3 Licencji lub
+~ (według własnego wyboru) dowolnej późniejszej wersji.
+~
+~ Vector jest rozpowszechniany z nadzieją, że okaże się użyteczny,
+~ jednak BEZ ŻADNEJ GWARANCJI; nawet bez domniemanej gwarancji
+~ PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Więcej informacji można znaleźć w
+~ Powszechnej Licencji Publicznej.
+~
+~ Powinieneś otrzymać kopię Powszechnej Licencji Publicznej
+~ wraz z Vector. W przeciwnym razie zapoznaj się z informacjami na stronie .
+~
+~ Prawo autorskie (C) 2026 współtwórcy Vector -->
-
- Przegląd
- Moduły
-
- - %d moduł aktywowany
- - Aktywowano %d modułu/ów
- - Włączono %d moduły/ów
- - Włączono %d moduły/ów
-
- Logi
- Ustawienia
- Opinie lub sugestie
- O aplikacji
- Zgłoś problem
- Repozytorium
- Wszystkie moduły są aktualne
- Opublikowano na stronie %s
- Zaktualizowany na stronie %s
-
- - %d moduł możliwy do aktualizacji
- - %d moduły z możliwością aktualizacji
- - %d moduły z możliwością aktualizacji
- - %d modułów z możliwością aktualizacji
-
- Dołącz do naszego kanału %2$s]]>
- Adiker, xAzvest
- Instaluj
- Dotknij, aby zainstalować LSPosed
- Nie zainstalowano
- LSPosed nie jest zainstalowany
- Aktywowano
- Częściowo aktywowano
- SEPolicy nie jest prawidłowo załadowane
- Proszę to zgłosić do twórcy Magiska.]]>
- Wstrzyknięcie Frameworku Systemowego nie powiodło się
- Magiska lub niektóre moduły Magisk niskiej jakości.
Spróbuj wyłączyć moduły Magisk inne niż Riru i LSPosed lub przesłać pełny log programistom.]]>
- Nieprawidłowy system prop
- Moduły mogą czasami działać niepoprawnie.]]>
- Konieczna aktualizacja
- Proszę zainstalować najnowszą wersję LSPosed
- Porady dla programisty modułów
- Wyłącz optymalizacje wdrażania w Android Studio lub użyj polecenia `gradlew installDebug`, aby zainstalować. W przeciwnym razie moduł APK nie zostanie zaktualizowany.
- Wersja API
- Wersja frameworka
- Nazwa pakietu menedżera
- Wersja systemu
- Urządzenie
- ABI systemu
- Optymalizator Dex Optimizer Wrapper
- Włączone
- Wyłączone
- Obsługiwana strona
- Nieobsługiwane
- Niezadowolenie z wersji na Androida
- Rozbita
- Montowanie nie powiodło się
- SELinux jest permisywny
- Zasady SELinuxa są nieprawidłowe
- Zaktualizuj LSPosed
- Czy chcesz zatwierdzić aktualizację LSPosed? Urządzenie zostanie uruchomione ponownie po zakończeniu aktualizacji
- Skopiowane do schowka
-
- Witamy w LSPosed
- Używasz menedżera pasożytów, który może utworzyć skrót na ekranie głównym lub nadal być otwieranym z powiadomienia.
- Używasz menedżera pasożytów, który może być otwierany z powiadomienia.
- Utwórz skrót
- Nigdy nie pokazuj
- Zalecany Menedżer Pasożytowy
- LSPosed teraz obsługuje pasożytowanie systemowe by uniknąć wykrycia, możesz otworzyć menedżera pasożytów z okna powiadomień. Zalecane jest odinstalowanie obecnej aplikacji.
-
- Zapisz
- Logi verbose
- Logi modułów
- Zapisywanie dziennika, poczekaj
- Zapisane logi
- Nie udało się zapisać:\n%s
- Wyczyść log teraz
- Logi zostały pomyślnie wyczyszczone.
- Przewiń na górę
- Ładowanie…
- Przewiń na dół
- Przeładuj
- Nie udało się wyczyścić logu
- Zawijanie wierszy
- Logi verbose włączone
- Logi verbose wyłączone
-
- (nie podano opisu)
- Ten moduł wymaga nowszej wersji Xposed (%d) przez co nie może być aktywowany
- Ten moduł został zaprojektowany dla nowej wersji Xposed (%d) i dlatego niektóre funkcje mogą nie działać
- Ten moduł nie określa wymaganej wersji Xposed.
- Ten moduł został utworzony dla Xposed w wersji %1$d, ale ze względu na niekompatybilne zmiany w wersji %2$d, został wyłączony
- Ten moduł nie może być załadowany, ponieważ jest zainstalowany na karcie SD, przenieś go do pamięci wewnętrznej
- Odinstaluj
- Ustawienia modułu
- Wyświetl w repozytorium
- Czy chcesz odinstalować ten moduł?
- Odinstalowano %1$s
- Odinstalowanie nie powiodło się
- Dodaj moduł do użytkownika
- Dodano %1$s do użytkownika %2$s
- Dodawanie modułu nie powiodło się
- Zainstaluj dla użytkownika %s
- Chcesz zainstalować %1$s dla użytkownika %2$s? Zalecana jest ręczna instalacja, wymuszanie instalacji przez LSPosed może powodować problemy.
- rozwiń
- zwiń
-
- Ponownie zoptymalizuj
- Optymalizowanie…
- Optymalizacja zakończona
- Uruchom
- Optymalizacja nie powiodła się: zwrócona wartość jest pusta
- Optymalizacja nie powiodła się:
- Nazwa aplikacji
- Nazwa pakietu
- Czas instalacji
- Czas aktualizacji
- Odwróć
- Aplikacje systemowe
- Sortowanie
- Włącz moduł
- Nie wybrałeś żadnej aplikacji. Kontynuować?
- Gry
- Moduły
- Nie udało się zapisać listy zakresu
- Wersja: %1$s
- Zaznacz
- Zalecane
- Nie wybrałeś żadnej aplikacji. Wybrać rekomendowane aplikacje?
- Wybrać zalecane aplikacje?
- Wszystkie
- Żadne
- Automatycznie
- Moduł Xposed nie jest jeszcze aktywowany
- Zalecane
- Dostępna aktualizacja: %1$s
- Moduł %s został wyłączony, ponieważ nie wybrano żadnej aplikacji.
- System Framework
- Kopia zapasowa
- Kopia zapasowa
- Przywróć
- Wymuś zatrzymanie
- Wymusić zatrzymanie?
- Jeśli wymusisz zatrzymanie aplikacji, może ona zadziałać nieprawidłowo.
- Restart jest wymagany aby ta zmiana została zastosowana
- Restart
- Ukryj
-
- Wyświetl w innej aplikacji
- Informacje o aplikacji
- ¯\\\\_(ツ)_\/¯\nNic tu nie ma
-
- Framework
- Wyłącz logi
- Zgłaszanie problemów wymaga dołączenia pełnych dzienników
- Czarny ciemny motyw
- Użyj czarnego motywu, jeśli ciemny motyw jest włączony
- Motyw
- Kopia zapasowa i przywracanie
- Kopia zapasowa listy modułów i zakresów.
- Przywrócenie listy modułów i listy zakresów.
- Kopia zapasowa
- Nie udało się utworzyć kopii zapasowej:\n%s
- Proszę włączyć DocumentUI
- Przywróć
- Nie udało się przywrócić:\n%s
- Sieć
- DNS przez HTTPS
- Obejście zatruwania DNS w niektórych krajach
- Kolor motywu
- Kolor akcentu systemowego
- Wymuś aplikacjom pokazywanie ikon launchera
- Po Android 10 aplikacje nie mogą ukrywać swoich ikon launchera. Wyłącz przełącznik, aby zablokować tę funkcję systemową.
- System
- Język
- Tłumacze
- Weź udział w tłumaczeniu
- Pomóż nam przetłumaczyć %s na Twój język
- Utwórz skrót, za pomocą którego otworzysz menadżera \"pasożytów\"
- Skrót przypięty
- Bieżący domyślny launcher nie wspiera skrótów pinezkowych
- Status powiadomień
- Pokazuj powiadomienie, za pomocą którego otworzysz menadżera pasożytów
- Kanał aktualizacji
- Stabilny
- Beta
- Wersja nocna
-
- Readme
- Wersje
- Informacje
- Strona główna
- Kod źródłowy
- Współtwórcy
- Assety
- Otwórz w przeglądarce
- Pokaż starsze wersje
- Nie ma więcej wersji
- Nie udało się załadować repozytorium modułu: %s
- Możliwość uaktualnienia w pierwszej kolejności
- Zainstalowane
-
- - %d pobierz
- - %d pobieranie
- - %d pobieranie
- - %d pobrania
-
-
- Sakura
- Czerwony
- Różowy
- Fioletowy
- Ciemny fioletowy
- Indigo
- Niebieski
- Jasnoniebieski
- Cyjanowy
- Turkusowy
- Zielony
- Jasnozielony
- Limonkowy
- Żółty
- Bursztynowy
- Pomarańczowy
- Ciemny pomarańczowy
- Brązowy
- Niebiesko szary
+
+ Przegląd
+ Moduły
+
+ - Włączono %d moduł
+ - Włączono %d moduły
+ - Włączono %d modułów
+ - Włączono %d modułów
+
+ Dzienniki
+ Ustawienia
+ Opinia lub sugestia
+ O aplikacji
+ Zgłoś problem
+ Katalog
+ Wszystkie moduły są aktualne
+ Opublikowano w %s
+ Zaktualizowano w %s
+
+ - %d moduł do aktualizacji
+ - %d moduły do aktualizacji
+ - %d modułów do aktualizacji
+ - %d modułów do aktualizacji
+
+ Dołącz do naszego kanału %2$s]]>
+ Łukasz Kuchta
+ Zainstaluj
+ Naciśnij, aby zainstalować Vector
+ Nie zainstalowany
+ Vector nie jest zainstalowany
+ Aktywowany
+ Częściowo aktywowany
+ Zasady bezpieczeństwa są nieprawidłowo załadowane
+ Proszę zgłosić to do programisty Magisk.]]>
+ Wstrzyknięcie do struktury systemu nie powiodło się
+ Magiska lub niektóre moduły Magisk niskiej jakości.
Spróbuj wyłączyć moduły Magisk inne niż Riru i Vector lub prześlij szczegółowy dziennik programistom.]]>
+ Nieprawidłowa właściwość systemu
+ Moduły mogą czasami działać niepoprawnie.]]>
+ Konieczna aktualizacja
+ Proszę zainstalować najnowszą wersję Vector
+ Wskazówki dla programistów modułów
+ Proszę wyłączyć optymalizację wdrażania w Android Studio, lub użyć polecenia \'gradlew installDebug\', aby zainstalować. W przeciwnym razie plik APK modułu nie zostanie zaktualizowany.
+ Wersja interfejsu programowania aplikacji
+ Wersja modułu
+ Nazwa pakietu menedżera
+ Wersja systemu
+ Urządzenie
+ Systemowy interfejs binarny aplikacji
+ Pośrednik optymalizacji DEX
+ Włączony
+ Nie włączony
+ Wspierany
+ Nie wspierany
+ Nieobsługiwana wersja Android
+ Uległ awarii
+ Montowanie nie powiodło się
+ Zasady bezpieczeństwa są zezwalające
+ Zasady bezpieczeństwa są nieprawidłowe
+ Zaktualizuj Vector
+ Czy chcesz zatwierdzić aktualizację Vector? Urządzenie zostanie zrestartowane po zakończeniu aktualizacji
+ Skopiowano do schowka
+
+ Witaj w Vector
+ Używasz menadżera pasożytniczego, do którego możesz utworzyć skrót lub otworzyć go z powiadomienia.
+ Używasz menadżera pasożytniczego, który możesz otworzyć z powiadomienia.
+ Utwórz skrót
+ Nigdy nie pokazuj
+ Zalecany jest menedżer pasożytniczy
+ Vector obsługuje teraz pasożytnictwo systemowe, aby uniknąć wykrycia. Menedżer pasożytniczy można uruchomić z poziomu powiadomienia. Zaleca się odinstalowanie bieżącej aplikacji.
+
+ Zapisz
+ Szczegółowe dzienniki
+ Dzienniki modułów
+ Zapisywanie dziennika, poczekaj
+ Dzienniki zapisane
+ Nie udało się zapisać:\n%s
+ Wyczyść dzienniki teraz
+ Dzienniki zostały pomyślnie wyczyszczone.
+ Przewiń na górę
+ Ładowanie…
+ Przewiń na dół
+ Przeładuj
+ Nie udało się wyczyścić dzienników
+ Zawijanie wierszy
+ Szczegółowe dzienniki są włączone
+ Szczegółowe dzienniki są wyłączone
+
+ (nie podano opisu)
+ Ten moduł wymaga nowszej wersji xposed (%d) przez co nie może być aktywowany
+ Ten moduł został zaprojektowany dla nowej wersji xposed (%d) i dlatego niektóre funkcje mogą nie działać
+ Ten moduł nie określa wymaganej wersji xposed.
+ Ten moduł został utworzony dla xposed w wersji %1$d, ale ze względu na niekompatybilne zmiany w wersji %2$d, został wyłączony
+ Ten moduł nie może być załadowany, ponieważ jest zainstalowany na karcie SD, przenieś go do pamięci wewnętrznej
+ Odinstaluj
+ Ustawienia modułu
+ Zobacz w katalogu
+ Czy chcesz odinstalować ten moduł?
+ Odinstalowano %1$s
+ Odinstalowanie nie powiodło się
+ Dodaj moduł dla użytkownika
+ Dodano %1$s dla użytkownika %2$s
+ Dodawanie modułu nie powiodło się
+ Zainstaluj dla użytkownika %s
+ Chcesz zainstalować %1$s dla użytkownika %2$s? Zalecana jest ręczna instalacja, wymuszanie instalacji przez Vector może powodować problemy.
+ rozwiń
+ zwiń
+
+ Zoptymalizuj ponownie
+ Optymalizowanie…
+ Optymalizacja zakończona
+ Uruchom
+ Optymalizacja nie powiodła się: zwrócona wartość jest pusta
+ Optymalizacja nie powiodła się:
+ Aplikacje systemowe
+ Sortowanie
+ Włącz moduł
+ Nie wybrałeś żadnej aplikacji. Kontynuować?
+ Gry
+ Moduły
+ Nie udało się zapisać listy zakresu
+ Wersja: %1$s
+ Wybierz
+ Zalecane
+ Nie wybrałeś żadnej aplikacji. Wybrać zalecane aplikacje?
+ Wybrać zalecane aplikacje?
+ Wszystkie
+ Żadne
+ Automatyczne dołączanie
+ Moduł xposed nie jest jeszcze aktywowany
+ Zalecane
+ Dostępna aktualizacja: %1$s
+ Moduł %s został wyłączony, ponieważ nie wybrano żadnej aplikacji.
+ Struktura systemu
+ Kopia
+ Wykonaj kopię
+ Przywróć kopię
+ Wymuś zatrzymanie
+ Wymusić zatrzymanie?
+ Jeśli wymusisz zatrzymanie aplikacji, może ona zachowywać się nieprawidłowo.
+ Restart jest wymagany, aby ta zmiana została zastosowana
+ Restart
+ Ukryj
+
+ Wyświetl w innej aplikacji
+ Informacje o aplikacji
+ ¯\\_(ツ)_/¯\nNic tu nie ma
+
+ Struktura
+ Wyłącz szczegółowe dzienniki
+ Zgłaszanie problemów wymaga dołączenia szczegółowych dzienników
+ Czysty czarny ciemny motyw
+ Użyj czystego czarnego motywu, jeśli ciemny motyw jest włączony
+ Motyw
+ Ciemny motyw
+ Zawsze wyłączony
+ Zawsze włączony
+ Według systemu
+ Kopia i przywracanie
+ Kopia listy modułów i zakresów.
+ Przywróć listę modułów i zakresów.
+ Kopia zapasowa
+ Nie udało się utworzyć kopii:\n%s
+ Proszę włączyć interfejs dokumentów
+ Przywróć
+ Nie udało się przywrócić:\n%s
+ Sieć
+ DNS przez HTTPS
+ Obejście zatruwania DNS w niektórych krajach
+ Kolor motywu
+ Kolor akcentu systemowego
+ Wymuś wyświetlanie ikon uruchamiania aplikacji
+ Po Android 10 aplikacje nie mogą ukrywać ikon uruchamiania. Aby wyłączyć tę funkcję systemową, należy wyłączyć przełącznik.
+ System
+ Język
+ Autor tłumaczenia
+ Weź udział w tłumaczeniu
+ Pomóż nam przetłumaczyć %s na twój język
+ Utwórz skrót, który może otworzyć menedżer pasożytniczy
+ Skrót przypięty
+ Bieżący domyślny launcher nie wspiera przypinania skrótów
+ Status powiadomień
+ Pokaż powiadomienie, które może otworzyć menedżer pasożytniczy
+ Kanał aktualizacji
+ Stabilny
+ Beta
+ Nocny
+
+ Przeczytaj
+ Wydania
+ Informacje
+ Strona główna
+ Kod źródłowy
+ Współtwórcy
+ Zasoby
+ Otwórz w przeglądarce
+ Pokaż starsze wersje
+ Nie ma więcej wersji
+ Nie udało się załadować repozytorium modułu: %s
+ Najpierw aktualizacje
+ Według nazwy aplikacji
+ Według czasu aktualizacji
+ Według nazwy pakietu
+ Według czasu instalacji
+ Odwrócone sortowanie
+ Zainstalowane
+
+ - %d pobrany
+ - %d pobrane
+ - %d pobranych
+ - %d pobranych
+
+
+ Bursztynowy
+ Brązowy
+ Cyjanowy
+ Cyraneczkowy
+ Czerwony
+ Indygo
+ Limonkowy
+ Niebieski
+ Jasny niebieski
+ Niebiesko szary
+ Pomarańczowy
+ Głęboki pomarańczowy
+ Purpurowy
+ Głęboki purpurowy
+ Różowy
+ Jasny różowy
+ Zielony
+ Jasny zielony
+ Żółty
diff --git a/app/src/main/res/values/strings_untranslatable.xml b/app/src/main/res/values/strings_untranslatable.xml
index b6264e42d..999237514 100644
--- a/app/src/main/res/values/strings_untranslatable.xml
+++ b/app/src/main/res/values/strings_untranslatable.xml
@@ -1,25 +1,25 @@
- LSPosed
- https://github.com/JingMatrix/LSPosed#install
- https://github.com/JingMatrix/LSPosed/releases/latest
+ Vector
+ https://github.com/JingMatrix/Vector#install
+ https://github.com/JingMatrix/Vector/releases/latest
@string/module_repo
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 06810bdd8..c8e645200 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,20 +1,20 @@
@@ -29,12 +29,23 @@
- false
- true
-
+
- ?textAppearanceSubtitle1
-
+
- ?colorPrimary
-
+
- ?colorPrimary
+ - ?colorPrimary
+ #test
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+
@@ -45,12 +56,22 @@
- false
- true
-
+
- ?textAppearanceSubtitle1
-
+
- ?colorPrimary
-
+
- ?colorPrimary
+#test
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+ - ?colorOnPrimary
+
diff --git a/build.gradle.kts b/build.gradle.kts
index 0b078cd04..ab294e986 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -95,14 +95,14 @@ subprojects {
if (this is ApplicationDefaultConfig) {
targetSdk = androidTargetSdkVersion
- versionCode = versionCodeProvider.get().toInt()
- versionName = versionNameProvider.get()
+ versionCode =3043
+ versionName ="2.0"
}
val flags =
listOf(
- "-DVERSION_CODE=${versionCodeProvider.get()}",
- "-DVERSION_NAME='\"${versionNameProvider.get()}\"'",
+ "-DVERSION_CODE=3043",
+ "-DVERSION_NAME='\"2.0\"'",
)
val args =
diff --git a/crowdin.yml b/crowdin.yml
deleted file mode 100644
index 17fa5c1f1..000000000
--- a/crowdin.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-project_id_env: CROWDIN_PROJECT_ID
-api_token_env: CROWDIN_API_TOKEN
-base_path: .
-base_url: 'https://api.crowdin.com'
-pull_request_title: '[translation] Update translation from Crowdin'
-preserve_hierarchy: 1
-files:
- - source: /app/src/main/res/values/strings.xml
- translation: /app/src/main/res/values-%two_letters_code%/%original_file_name%
- type: android
- dest: /app/strings.xml
- - source: /daemon/src/main/res/values/strings.xml
- translation: /daemon/src/main/res/values-%two_letters_code%/%original_file_name%
- type: android
- dest: /daemon/strings.xml
diff --git a/daemon/build.gradle.kts b/daemon/build.gradle.kts
index 40b7e7b61..49377730a 100644
--- a/daemon/build.gradle.kts
+++ b/daemon/build.gradle.kts
@@ -25,8 +25,9 @@ android {
buildConfigField("String", "FRAMEWORK_NAME", """"${rootProject.name}"""")
buildConfigField("String", "MANAGER_INJECTED_PKG_NAME", """"$injectedPackageName"""")
buildConfigField("int", "MANAGER_INJECTED_UID", """$injectedPackageUid""")
- buildConfigField("String", "VERSION_NAME", """"${versionNameProvider.get()}"""")
- buildConfigField("long", "VERSION_CODE", versionCodeProvider.get())
+ buildConfigField("String", "VERSION_NAME", "\"2.0\"")
+ buildConfigField("long", "VERSION_CODE", "3043")
+
val cliToken = UUID.randomUUID()
// Inject the MSB and LSB as Long constants
diff --git a/daemon/src/main/res/values-pl/strings.xml b/daemon/src/main/res/values-pl/strings.xml
index 07c40cec7..36517ce27 100644
--- a/daemon/src/main/res/values-pl/strings.xml
+++ b/daemon/src/main/res/values-pl/strings.xml
@@ -1,21 +1,20 @@
-
-
- Moduł Xposed nie jest jeszcze aktywowany
- %1$s został zainstalowany, ale nie jest jeszcze aktywny
- %1$s został zainstalowany na użytkowniku %2$s, ale nie jest jeszcze aktywowany
- Moduł Xposed zaktualizowany
- %s został zaktualizowany, wymuś zatrzymanie i ponownie uruchom aplikacje w jego zakresie
- Zaktualizowano moduł Xposed, wymagane ponowne uruchomienie systemu
- %s został zaktualizowany, ponieważ zakres zawiera System Framework, wymagany restart aby zastosować zmiany
- Aktualizowanie modułu zakończone
- Status Vector
- Vector załadowany
- Kliknij powiadomienie, by włączyć menadżer
- Żądanie Zakresu
- %1$s w użytkowniku %2$s żąda dodania %3$s do jego zakresu.
- Żądanie zakresu
- Zatwierdź
- Odrzuć
- Nigdy nie pytaj
-
+
+ Moduł nie jest jeszcze aktywowany
+ %1$s został zainstalowany, ale nie został jeszcze aktywowany
+ %1$s został zainstalowany dla użytkownika %2$s, ale nie został jeszcze aktywowany
+ Moduł zaktualizowany
+ %s został zaktualizowany, wymuś zatrzymanie i restart aplikacji w jego zakresie
+ Zaktualizowano moduł, wymagany restart systemu
+ %s został zaktualizowany, ponieważ zakres zawiera strukturę systemu, wymagany jest restart w celu zastosowania zmian
+ Aktualizacja modułu zakończona
+ Status Vector
+ Vector załadowany
+ Naciśnij powiadomienie, aby otworzyć menedżera
+ Żądanie zakresu
+ %1$s na żądanie użytkownika %2$s o dodanie %3$s do jego zakresu.
+ Żądanie zakresu
+ Zatwierdź
+ Odmów
+ Nigdy nie pytaj
+
\ No newline at end of file
diff --git a/xposed/README.md b/xposed/README.md
index 9c652d733..77ade66fb 100644
--- a/xposed/README.md
+++ b/xposed/README.md
@@ -1,38 +1,38 @@
-# Xposed API implementation of the Vector framework
+# Implementacja API Xposed dla struktury Vector
-This module implements the [libxposed](https://github.com/libxposed/api) API for the Vector framework. It serves as the primary bridge between the native ART hooking engine (`lsplant`) and module developers, providing a type-safe, OkHttp-style interceptor chain architecture.
+Ten moduł implementuje API [libxposed](https://github.com/libxposed/api) dla struktury Vector. Służy jako główny pomost między natywnym mechanizmem przechwytywania ART (`lsplant`) a programistami modułów, zapewniając bezpieczną pod względem typów architekturę łańcucha przechwytującego w stylu OkHttp.
-## Architectural Overview
+## Przegląd architektury
-The `xposed` module is designed with strict boundaries to ensure stability during the Android boot process and application lifecycles. It is written entirely in Kotlin and operates independently of the legacy Xposed API (`de.robv.android.xposed`).
-It defines a Dependency Injection (DI) contract (`LegacyFrameworkDelegate`) which the `legacy` module must implement and inject during startup.
+Moduł `xposed` został zaprojektowany z uwzględnieniem ścisłych ograniczeń, aby zapewnić stabilność podczas rozruchu systemu Android i cyklu życia aplikacji. Jest on w całości napisany w języku Kotlin i działa niezależnie od starszego API Xposed (`de.robv.android.xposed`).
+Definiuje kontrakt wstrzykiwania zależności (DI) (`LegacyFrameworkDelegate`), który moduł `legacy` musi zaimplementować i wstrzyknąć podczas uruchamiania.
-## Core Components
+ ## Główne komponenty
-### 1. The Hooking Engine
+### 1. Silnik hookowania
-* **`VectorHookBuilder`**: Implements the `HookBuilder` API. It validates the target `Executable`, bundles the module's `Hooker`, `priority`, and `ExceptionMode` into a `VectorHookRecord`, and registers it natively via JNI.
-* **`VectorNativeHooker`**: The JNI trampoline target. When a hooked method is executed, the C++ layer invokes `callback(Array)` on this class. It fetches the active hooks (both modern and legacy) from the native registry as global `jobject` references, constructs the root `VectorChain`, and initiates execution.
-* **`VectorChain`**: Implements the recursive `proceed()` state machine.
- * **Exception Handling**: It implements the logic for `ExceptionMode`. In `PROTECTIVE` mode, if an interceptor throws an exception *before* calling `proceed()`, the chain skips the interceptor. If it throws *after* calling `proceed()`, the chain catches the exception and restores the cached downstream result/throwable to protect the host process.
+* **`VectorHookBuilder`**: Implementuje API `HookBuilder`. Sprawdza poprawność docelowego `Executable`, pakuje `Hooker`, `priority` i `ExceptionMode` modułu do `VectorHookRecord` i rejestruje go natywnie przez JNI.
+* **`VectorNativeHooker`**: Docelowa trampolina JNI. Po wykonaniu metody hookowanej, warstwa C++ wywołuje `callback(Array)` w tej klasie. Pobiera aktywne hooki (zarówno nowoczesne, jak i starsze) z rejestru natywnego jako globalne referencje `jobject`, konstruuje główny `VectorChain` i inicjuje wykonanie.
+* **`VectorChain`**: Implementuje rekurencyjną maszynę stanów `proceed()`.
+ * **Obsługa wyjątków**: Implementuje logikę dla `ExceptionMode`. W trybie `PROTECTIVE`, jeśli interceptor zgłosi wyjątek *przed* wywołaniem `proceed()`, łańcuch pomija interceptor. Jeśli zgłosi wyjątek *po* wywołaniu `proceed()`, łańcuch przechwytuje wyjątek i przywraca zbuforowany wynik/zmienną throwable, aby chronić proces hosta.
-### 2. The Invocation System
+### 2. System wywołań
-The `Invoker` system allows modules to execute methods while bypassing standard JVM access checks, with granular control over hook execution.
+System `Invoker` umożliwia modułom wykonywanie metod z pominięciem standardowych kontroli dostępu JVM, z precyzyjną kontrolą nad wykonywaniem hooków.
-* **`Type.Origin`**: Dispatches directly to JNI (`HookBridge.invokeOriginalMethod`), bypassing all active hooks.
-* **`Type.Chain`**: Constructs a localized `VectorChain` containing only hooks with a priority less than or equal to the requested `maxPriority`, allowing modules to execute partial hook chains.
-* **`VectorCtorInvoker`**: Handles constructor invocation. It separates memory allocation (`HookBridge.allocateObject`) from initialization (`invokeOriginalMethod` / `invokeSpecialMethod`) to support safe `newInstanceSpecial` logic.
+* **`Type.Origin`**: Wysyła bezpośrednio do JNI (`HookBridge.invokeOriginalMethod`), pomijając wszystkie aktywne hooki.
+ * **`Type.Chain`**: Konstruuje zlokalizowany `VectorChain` zawierający wyłącznie hooki o priorytecie mniejszym lub równym żądanemu `maxPriority`, umożliwiając modułom wykonywanie częściowych łańcuchów hooków.
-### 3. Dependency Injection Contract
+* **`VectorCtorInvoker`**: Obsługuje wywołanie konstruktora. Oddziela alokację pamięci (`HookBridge.allocateObject`) od inicjalizacji (`invokeOriginalMethod` / `invokeSpecialMethod`), aby zapewnić bezpieczną logikę `newInstanceSpecial`.
-To maintain the separation of concerns, the `xposed` module communicates with the legacy Xposed ecosystem via `VectorBootstrap` and `LegacyFrameworkDelegate`.
+### 3. Kontrakt wstrzykiwania zależności
-When `xposed` intercepts an Android lifecycle event (e.g., `LoadedApk.createClassLoader`), it dispatches the event internally via `VectorLifecycleManager` and then delegates the raw parameters to `LegacyFrameworkDelegate` so the `legacy` module can construct and dispatch the legacy `XC_LoadPackage` callbacks.
+Aby zachować separację zadań, moduł `xposed` komunikuje się ze starszym ekosystemem Xposed za pośrednictwem `VectorBootstrap` i `LegacyFrameworkDelegate`.
-### 4. In-Memory ClassLoading & Isolation
+ Gdy `xposed` przechwytuje zdarzenie cyklu życia Androida (np. `LoadedApk.createClassLoader`), wywołuje je wewnętrznie za pomocą `VectorLifecycleManager`, a następnie deleguje surowe parametry do `LegacyFrameworkDelegate`, aby moduł `legacy` mógł skonstruować i wywołać starsze wywołania zwrotne `XC_LoadPackage`.
-Modules are executed strictly from memory using an isolated ClassLoader, ensuring zero disk footprint and maximum stealth against anti-cheat mechanisms.
-* The module APK is loaded into `SharedMemory` (ashmem) to bypass Java heap limitations. Once the Android Runtime (ART) ingests the DEX buffers, the ashmem is instantly unmapped, preventing memory leaks and leaving no residual file descriptors.
-* The `VectorModuleClassLoader` is attached exclusively to the Xposed Framework's classloader branch, preventing the target app from discovering the module via reflection or `ClassLoader.getParent()` chain-walking.
-* `VectorURLStreamHandler` intercepts standard `jar:` requests, reading assets and resources natively from the module path without triggering Android's global `JarFile` cache, preventing OS-level file locks.
+### 4. Ładowanie klas w pamięci i izolacja
+
+Moduły są wykonywane wyłącznie z pamięci za pomocą izolowanego modułu ClassLoader, co zapewnia zerowe obciążenie dysku i maksymalną ochronę przed mechanizmami antyoszustwami.
+* Plik APK modułu jest ładowany do `SharedMemory` (ashmem), aby ominąć ograniczenia sterty Java. Po pobraniu buforów DEX przez środowisko wykonawcze Androida (ART), ashmem jest natychmiast demapowany, co zapobiega wyciekom pamięci i nie pozostawia żadnych deskryptorów plików. * `VectorModuleClassLoader` jest dołączony wyłącznie do gałęzi classloader platformy Xposed Framework, uniemożliwiając aplikacji docelowej wykrycie modułu poprzez refleksję lub przeglądanie łańcucha `ClassLoader.getParent()`.
+* `VectorURLStreamHandler` przechwytuje standardowe żądania `jar:`, odczytując zasoby i zasoby natywnie ze ścieżki modułu bez uruchamiania globalnej pamięci podręcznej `JarFile` systemu Android, zapobiegając blokadom plików na poziomie systemu operacyjnego.
\ No newline at end of file
diff --git a/xposed/build.gradle.kts b/xposed/build.gradle.kts
index 8edcc5cc4..78dadcf22 100644
--- a/xposed/build.gradle.kts
+++ b/xposed/build.gradle.kts
@@ -17,8 +17,8 @@ android {
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
buildConfigField("String", "FRAMEWORK_NAME", """"${rootProject.name}"""")
- buildConfigField("String", "VERSION_NAME", """"${versionNameProvider.get()}"""")
- buildConfigField("long", "VERSION_CODE", versionCodeProvider.get())
+ buildConfigField("String", "VERSION_NAME", "\"2.0\"")
+buildConfigField("long", "VERSION_CODE", "3043")
}
sourceSets { named("main") { java.srcDirs("src/main/kotlin", "libxposed/api/src/main/java") } }
diff --git a/zygisk/README.md b/zygisk/README.md
index b3ddf34b6..3c35617e9 100644
--- a/zygisk/README.md
+++ b/zygisk/README.md
@@ -1,57 +1,18 @@
-# Vector Zygisk Module and Framework Loader
+# Moduł Zygisk Vector i moduł ładujący strukturę
+Vector nie zapisuje kodu struktury do partycji /data.
-## Overview
+1. Dostarczanie zasobów: Główny Deamon udostępnia strukturze DEX za pośrednictwem deskryptora pliku `SharedMemory`, używając `kDexTransactionCode`. Warstwa C++ opakowuje ten deskryptor pliku w `java.nio.DirectByteBuffer` i inicjuje `dalvik.system.InMemoryDexClassLoader`.
+2. Dynamiczne ponowne linkowanie: Deamon losuje nazwy klas struktury przy każdym uruchomieniu. Moduł natywny pobiera serializowany słownik przez IPC, używając `kObfuscationMapTransactionCode`. `SetupEntryClass` używa tej mapy do lokalizowania losowego punktu wejścia (`org.matrix.vector.core.Main`) i usługi BridgeService, umożliwiając frameworkowi poprawne linkowanie w czasie wykonywania.
-This subsystem constitutes the injection engine of the Vector framework. It acts as the bridge between the Android Zygote process and the high-level Java/Kotlin Xposed API. The architecture is designed to avoid standard Android service registration and disk-based class loading, operating entirely through in-memory execution, JNI-level Binder interception, and process identity transplantation.
+ ## Menedżer pasożytniczy i transplantacja tożsamości
-The subsystem is divided into two discrete layers:
-1. _Native Zygisk Layer_ (C++): Hooks process creation via Zygisk, filters target processes, establishes the initial IPC bridge, and bootstraps the Dalvik environment from memory.
-2. _Framework Loader_ (Kotlin): The Java-world payload. It handles high-level Android framework manipulation, manages the custom Binder routing service, and orchestrates the Parasitic Manager execution.
+Aplikacja menedżera Vector nie jest instalowana jako standardowy pakiet. Działa poprzez wydrążenie procesu hosta (np. `com.android.shell`) przy użyciu pasożytniczego modelu wykonywania.
-## IPC Architecture and Binder Relay
+### Przekierowanie intencji serwera systemowego
+W ramach `system_server`, `ParasiticManagerSystemHooker` przechwytuje `ActivityTaskSupervisor.resolveActivity`. Po wykryciu intencji oznaczonej kategorią `LAUNCH_MANAGER` dynamicznie modyfikuje zwrócone dane ActivityInfo. Wymusza na systemie uruchomienie pakietu hosta, ustawiając parametr processName na nazwę pakietu Menedżera i dostosowując flagi motywu i ostatnich zdarzeń, aby naśladować samodzielną aplikację.
-Vector utilizes a two-phase IPC routing mechanism to establish communication between injected applications and the root daemon. Instead of registering standard AIDL endpoints with ServiceManager, it intercepts the lowest level of Java Binder communication within the Dalvik VM.
-
-### The JNI Binder Trap
-In `ipc_bridge.cpp`, the module uses the ART internal function `SetTableOverride` to replace the JNI function `CallBooleanMethodV`. This override intercepts all native calls to `android.os.Binder.execTransact` system-wide.
-
-When a transaction occurs, the hook inspects the transaction code. If it matches the constant kBridgeTransactionCode (`_VEC`), the transaction is diverted to the static Kotlin method `BridgeService.execTransact`. All other transactions pass through to the original Android framework unmodified.
-
-### Phase 1: System Server Initialization
-The `system_server` acts as the primary proxy router for the framework. During the `postServerSpecialize` callback, the following sequence occurs:
-1. The native module queries `ServiceManager` for the `serial` service (or `serial_vector` for late-inject scenarios). This service acts as a temporary rendezvous point.
-2. The module sends a `_VEC` transaction to retrieve a temporary binder, which it uses to fetch the framework DEX file descriptor and the obfuscation map.
-3. The module installs the JNI Binder Trap (`HookBridge`) and bootstraps the Kotlin layer via `Main.forkCommon`.
-4. Concurrently, the root daemon initiates a Binder transaction directly to the `system_server`. The JNI trap intercepts this, and BridgeService processes the `SEND_BINDER` action, storing the daemon's primary `IDaemonService` binder, sending back `system_server` context and linking a `DeathRecipient`.
-
-### Phase 2: User Application Rendezvous
-Standard applications initialize their IPC connection by routing requests through the `system_server`.
-1. In `postAppSpecialize`, the application queries `ServiceManager` for the `activity` service (which resides in `system_server`).
-2. The application sends a `_VEC` transaction containing the `GET_BINDER` action, its process name, and a newly allocated heartbeat `BBinder`.
-3. The JNI trap inside `system_server` intercepts this transaction before the Activity Manager processes it.
-4. The `system_server`'s BridgeService forwards the application's UID, PID, and heartbeat binder to the root daemon via the `IDaemonService` binder acquired in Phase 1.
-5. The daemon evaluates the request against its internal scope state. If approved, it generates an `ILSPApplicationService` binder and returns it to the `system_server`, which writes it back to the waiting application's reply parcel.
-6. The application uses this dedicated binder to fetch its specific framework DEX and obfuscation map.
-
-### The Heartbeat Mechanism
-To manage process lifecycles without polling, the native module generates a dummy Binder object (`heartbeat_binder`) during both initialization phases. This object is passed to the daemon and kept alive in the application process via a JNI Global Reference (`env->NewGlobalRef`). If the application or `system_server` terminates normally or is killed by the kernel, the global reference is destroyed, the binder node is released, and the daemon's `DeathRecipient` triggers immediate resource cleanup.
-
-## Memory Execution and Obfuscation Synchronization
-
-Vector does not write framework code to the /data partition.
-
-1. Asset Delivery: The root daemon provides the framework DEX via a `SharedMemory` file descriptor, using `kDexTransactionCode`. The C++ layer wraps this file descriptor in a `java.nio.DirectByteBuffer` and initializes a `dalvik.system.InMemoryDexClassLoader`.
-2. Dynamic Relinking: The daemon randomizes framework class names on each boot. The native module fetches a serialized dictionary over IPC, using `kObfuscationMapTransactionCode`. `SetupEntryClass` uses this map to locate the randomized entry point (`org.matrix.vector.core.Main`) and BridgeService, enabling the framework to link correctly at runtime.
-
-## Parasitic Manager and Identity Transplantation
-
-The Vector Manager application is not installed as a standard package. It runs by hollowing out a host process (e.g., `com.android.shell`) using a parasitic execution model.
-
-### System Server Intent Redirection
-Within the `system_server`, `ParasiticManagerSystemHooker` intercepts `ActivityTaskSupervisor.resolveActivity`. When it detects an Intent tagged with the `LAUNCH_MANAGER` category, it dynamically modifies the returned ActivityInfo. It forces the system to launch the host package while setting the processName to the Manager's package name and adjusting theme and recents flags to mimic a standalone application.
-
-### Application Host Hijacking
-When the native module detects the host package UID and the Manager process name during `preAppSpecialize`, it injects `GID_INET` (3003) into the process's GID array to ensure network access. Control is then passed to `ParasiticManagerHooker.kt`, which performs the identity transplantation:
-1. Code Injection: It intercepts `LoadedApk.getClassLoader` and `ActivityThread.handleBindApplication`, swapping the host's ApplicationInfo with a hybrid object constructed from the manager's APK (provided via file descriptor). The manager's DEX is injected into the host's `PathClassLoader`.
-2. State Forgery: The system ActivityManager is unaware of the spoofed Manager activities. To prevent data loss during lifecycle transitions (e.g., screen rotation), the hooker intercepts `performStopActivityInner` to manually capture Bundle and PersistableBundle states into static concurrent maps. These states are reinjected during `scheduleLaunchActivity`.
-3. Context Spoofing: It intercepts `ActivityThread.installProvider` and `WebViewFactory.getProvider` to construct forged `ContextImpl` instances, bypassing internal Android and Chromium package-name validation checks.
+ ### Przejęcie hosta aplikacji
+Gdy moduł natywny wykryje identyfikator UID pakietu hosta i nazwę procesu menedżera podczas procedury `preAppSpecialize`, wstrzykuje `GID_INET` (3003) do tablicy identyfikatorów GID procesu, aby zapewnić dostęp do sieci. Kontrola jest następnie przekazywana do `ParasiticManagerHooker.kt`, który przeprowadza transplantację tożsamości:
+1. Wstrzyknięcie kodu: Przechwytuje `LoadedApk.getClassLoader` i `ActivityThread.handleBindApplication`, zamieniając obiekt ApplicationInfo hosta na obiekt hybrydowy skonstruowany z pliku APK menedżera (dostarczonego za pośrednictwem deskryptora pliku). DEX menedżera jest wstrzyknięty do `PathClassLoader` hosta.
+2. Fałszowanie stanu: Systemowy menedżer aktywności nie jest świadomy podrobionych aktywności menedżera. Aby zapobiec utracie danych podczas zmian w cyklu życia (np. obrotu ekranu), hooker przechwytuje `performStopActivityInner`, aby ręcznie przechwycić stany Bundle i PersistableBundle do statycznych map współbieżnych. Stany te są ponownie wstrzykiwane podczas `scheduleLaunchActivity`.
+3. Podszywanie się pod kontekst: Przechwytuje `ActivityThread.installProvider` i `WebViewFactory.getProvider`, aby skonstruować fałszywe instancje `ContextImpl`, omijając wewnętrzne kontrole poprawności nazw pakietów Androida i Chromium.
diff --git a/zygisk/build.gradle.kts b/zygisk/build.gradle.kts
index 1757ab170..4284dca7b 100644
--- a/zygisk/build.gradle.kts
+++ b/zygisk/build.gradle.kts
@@ -74,7 +74,7 @@ androidComponents {
// Stage all files in a temporary directory inside 'build' before zipping
val tempModuleDir = project.layout.buildDirectory.dir("module/${variant.name}")
val zipFileName =
- "Vector-v${versionNameProvider.get()}-${versionCodeProvider.get()}-$variantCapped.zip"
+ "Vector-PL-2.0.3043-$variantCapped.zip"
// Using Sync ensures that stale files from previous runs are removed.
val prepareModuleFilesTask =
@@ -92,8 +92,8 @@ androidComponents {
from("$projectDir/module") {
include("module.prop")
expand(
- "versionName" to "v${versionNameProvider.get()}",
- "versionCode" to versionCodeProvider.get(),
+ "versionName" to "2.0",
+ "versionCode" to "3043",
)
}
from("$projectDir/module") {
diff --git a/zygisk/changelog.md b/zygisk/changelog.md
index a5bb3a2fd..09e4a9fde 100644
--- a/zygisk/changelog.md
+++ b/zygisk/changelog.md
@@ -1,16 +1,16 @@
-🎉 **Release: Vector 2.0** 🎉
+🎉 **Wydanie: Vector 2.0** 🎉
-Welcome to Vector 2.0! As part of our ongoing transition, the project has officially been renamed from `LSPosed` to `Vector`. While our major internal refactoring is still underway, we are releasing 2.0 now to provide a stable, feature-complete environment for those relying on legacy libxposed APIs.
+Witamy w Vector 2.0! W ramach trwającej transformacji, projekt oficjalnie zmienił nazwę z LSPosed na Vector. Chociaż gruntowna refaktoryzacja wewnętrzna wciąż trwa, udostępniamy wersję 2.0, aby zapewnić stabilne, kompletne środowisko dla użytkowników korzystających ze starszych interfejsów API libxposed.
-### 📚 libxposed API 100 & 101
-With the recent publication of libxposed API 101, the ecosystem is moving toward a new standard with significant breaking changes. Because API 100 was never officially published, **Vector 2.0 serves as the definitive implementation of the API 100 era**, built from the exact commit prior to the API 101 jump.
+### 📚 libxposed API 100 i 101
+Wraz z niedawną publikacją libxposed API 101, ekosystem zmierza w kierunku nowego standardu, który wprowadza znaczące zmiany. Ponieważ API 100 nigdy nie zostało oficjalnie opublikowane, **Vector 2.0 stanowi ostateczną implementację ery API 100**, zbudowaną na podstawie zatwierdzenia sprzed przejścia na API 101.
-### 🏗️ Architecture & API Updates
-* **Vector & Zygisk Overhaul:** Officially renamed and modularized the project, featuring a completely rewritten, modern Zygisk architecture.
-* **API 100 Finalization:** Completed all remaining libxposed API 100 features, including comprehensive support for static initializers, constructor hooking, and centralized logging.
+### 🏗️ Aktualizacje architektury i API
+* **Przebudowa wektorów i Zygisk:** Oficjalnie zmieniono nazwę i zmodularyzowano projekt, wprowadzając całkowicie przepisaną, nowoczesną architekturę Zygisk.
+* **Zakończenie prac nad API 100:** Ukończono wszystkie pozostałe funkcje libxposed API 100, w tym kompleksową obsługę inicjatorów statycznych, podłączanie konstruktorów i scentralizowane logowanie.
-### ⚙️ Core Engine & System Enhancements
-* 🔓 **Bypassed Bionic `LD_PRELOAD` Restrictions:** Resolved fatal namespace errors on Android 10 by loading the `dex2oat` hook library via a `memfd_create` tmpfs-backed file descriptor, bypassing the linker's namespace checks.
-* 🛡️ **Reflection Parity Overhaul:** Completely rebuilt the `invokeSpecialMethod` backend to improve performance, enhance robustness, and mirror standard Java reflection behavior.
-* ⏱️ **Late Injection Standalone Launch:** Added native support for manual late injection (triggered by NeoZygisk), without relying on Magisk's early-init phase—highly useful for AOSP debug builds.
+### ⚙️ Ulepszenia silnika i systemu
+* 🔓 **Pominięto ograniczenia bionicznego `ld_preload`:** Rozwiązano krytyczne błędy przestrzeni nazw w systemie Android 10 poprzez załadowanie biblioteki hooków `dex2oat` za pomocą deskryptora pliku `memfd_create` opartego na systemie plików tmpfs, omijając sprawdzanie przestrzeni nazw przez linker.
+* 🛡️ **Przebudowa parzystości odbicia:** Całkowicie przebudowano zaplecze `invokeSpecialMethod` w celu poprawy wydajności, zwiększenia niezawodności i odzwierciedlenia standardowego zachowania odbicia w Javie.
+* ⏱️ **Autonomiczne uruchomienie z późnym wstrzykiwaniem:** Dodano natywną obsługę ręcznego późnego wstrzykiwania (wyzwalanego przez NeoZygisk), bez polegania na fazie wczesnego inicjowania Magiska — bardzo przydatne w kompilacjach debugowania AOSP.
\ No newline at end of file
diff --git a/zygisk/module/customize.sh b/zygisk/module/customize.sh
index 44707fee7..90c74f245 100644
--- a/zygisk/module/customize.sh
+++ b/zygisk/module/customize.sh
@@ -1,24 +1,24 @@
SKIPUNZIP=1
-# =========================================================
-# Utils functions to extract and verify installation package
+# =================================================================================
+# Funkcje narzędzi umożliwiające wyodrębnienie i sprawdzenie pakietu instalacyjnego
TMPDIR_FOR_VERIFY="$TMPDIR/.vunzip"
mkdir "$TMPDIR_FOR_VERIFY"
abort_verify() {
- ui_print "*********************************************************"
+ ui_print "************************************************************"
ui_print "! $1"
- ui_print "! This zip may be corrupted, please try downloading again"
- abort "*********************************************************"
+ ui_print "! Ten plik zip może być uszkodzony. Spróbuj pobrać go ponownie."
+ abort "************************************************************"
}
-# Usage: extract [junk_paths: true|false]
+# Zastosowanie: wypakuj [junk_paths: true|false]
extract() {
local zip="$1"
local file="$2"
local dir="$3"
- local junk_paths="${4:-false}" # Defaults to false if not provided
+ local junk_paths="${4:-false}" # Domyślnie false, jeśli nie podano
local opts="-o"
local file_path hash_path file_basename
@@ -33,39 +33,38 @@ extract() {
hash_path="${TMPDIR_FOR_VERIFY}/$file.sha256"
fi
- # Extract the file and its hash
+ # Wypakuj plik i jego skrót
unzip $opts "$zip" "$file" -d "$dir" >/dev/null 2>&1
- [ -f "$file_path" ] || abort_verify "Extracted $file does not exist"
+ [ -f "$file_path" ] || abort_verify "Wyodrębniony plik $file nie istnieje"
unzip $opts "$zip" "$file.sha256" -d "${TMPDIR_FOR_VERIFY}" >/dev/null 2>&1
- [ -f "$hash_path" ] || abort_verify "Hash file $file.sha256 does not exist"
+ [ -f "$hash_path" ] || abort_verify "Plik skrótu $file.sha256 nie istnieje"
- # Read the expected hash and verify it
+ # Odczytaj oczekiwany skrót i zweryfikuj go
local expected_hash
read -r expected_hash < "$hash_path"
- expected_hash="${expected_hash%% *}" # Strip anything after the actual hash string
-
+ expected_hash="${expected_hash%% *}" # Usuń wszystko po rzeczywistym ciągu skrótu
if ! echo "$expected_hash $file_path" | sha256sum -c -s -; then
- abort_verify "Failed to verify $file"
+ abort_verify "Nie udało się zweryfikować $file"
fi
- ui_print "- Verified $file"
+ ui_print "- Zweryfikowano $file"
}
# =========================================================
VERSION=$(grep_prop version "${TMPDIR}/module.prop")
-ui_print "- Vector version ${VERSION}"
+ui_print "- Wersja Vector ${VERSION}"
-# Disable existing LSPosed installation
+# Wyłącz istniejącą instalację LSPosed
LSPOSED_DIR="/data/adb/modules/zygisk_lsposed"
if [ -d "$LSPOSED_DIR" ]; then
- ui_print "*********************************************************"
- ui_print "LSPosed installation detected, disabling it for Vector"
+ ui_print "***************************************************"
+ ui_print "Wykryto instalację LSPosed, wyłączono ją dla Vector"
touch "$LSPOSED_DIR/disable"
- ui_print "*********************************************************"
+ ui_print "***************************************************"
fi
-# 1. Map architecture to standard ABI paths, eliminating duplicate logic
+# 1. Mapowanie architektury do standardowych ścieżek ABI, eliminując duplikację logiki
case "$ARCH" in
arm|arm64)
ABI32="armeabi-v7a"
@@ -76,40 +75,40 @@ case "$ARCH" in
ABI64="x86_64"
;;
*)
- abort "! Unsupported platform: $ARCH"
+ abort "! Nieobsługiwana platforma: $ARCH"
;;
esac
-ui_print "- Device platform: $ARCH ($ABI32 / $ABI64)"
+ui_print "- Platforma urządzenia: $ARCH ($ABI32 / $ABI64)"
-ui_print "- Extracting root module files"
+ui_print "- Wyodrębnianie głównych plików modułu"
for file in module.prop action.sh service.sh uninstall.sh sepolicy.rule framework/lspd.dex cli daemon.apk daemon manager.apk; do
extract "$ZIPFILE" "$file" "$MODPATH"
done
-ui_print "- Extracting Zygisk libraries"
+ui_print "- Wyodrębnianie bibliotek zygisk"
mkdir -p "$MODPATH/zygisk"
-# Extract 32-bit lib
+# Wyodrębnij bibliotekę 32-bitową
extract "$ZIPFILE" "lib/$ABI32/libzygisk.so" "$MODPATH/zygisk" true
mv "$MODPATH/zygisk/libzygisk.so" "$MODPATH/zygisk/${ABI32}.so"
-# Extract 64-bit lib if supported
+# Wypakuj bibliotekę 64-bitową, jeśli jest obsługiwana
if [ "$IS64BIT" = true ]; then
extract "$ZIPFILE" "lib/$ABI64/libzygisk.so" "$MODPATH/zygisk" true
mv "$MODPATH/zygisk/libzygisk.so" "$MODPATH/zygisk/${ABI64}.so"
fi
if [ "$API" -ge 29 ]; then
- ui_print "- Extracting dex2oat binaries"
+ ui_print "- Wyodrębnianie plików binarnych dex2oat"
mkdir -p "$MODPATH/bin"
- # Extract 32-bit binaries
+ # Wyodrębnij 32-bitowe pliki binarne
extract "$ZIPFILE" "bin/$ABI32/dex2oat" "$MODPATH/bin" true
extract "$ZIPFILE" "bin/$ABI32/liboat_hook.so" "$MODPATH/bin" true
mv "$MODPATH/bin/dex2oat" "$MODPATH/bin/dex2oat32"
mv "$MODPATH/bin/liboat_hook.so" "$MODPATH/bin/liboat_hook32.so"
- # Extract 64-bit binaries
+ # Wyodrębnij 64-bitowe pliki binarne
if [ "$IS64BIT" = true ]; then
extract "$ZIPFILE" "bin/$ABI64/dex2oat" "$MODPATH/bin" true
extract "$ZIPFILE" "bin/$ABI64/liboat_hook.so" "$MODPATH/bin" true
@@ -117,9 +116,9 @@ if [ "$API" -ge 29 ]; then
mv "$MODPATH/bin/liboat_hook.so" "$MODPATH/bin/liboat_hook64.so"
fi
- ui_print "- Patching binaries for anti-detection"
+ ui_print "- Łatanie plików binarnych w celu zapobiegania wykryciu"
DEV_PATH=$(tr -dc 'a-z0-9' >"$MODPATH/system.prop"
fi
-ui_print "- Welcome to Vector!"
+ui_print "- Witaj w Vector!"
diff --git a/zygisk/module/daemon b/zygisk/module/daemon
index faca6adef..9411696c7 100644
--- a/zygisk/module/daemon
+++ b/zygisk/module/daemon
@@ -4,7 +4,7 @@ dir="${0%/*}"
tmpDaemonApk="/data/local/tmp/daemon.apk"
debug="@DEBUG@"
-# Safely check for debug APK and set classpath
+# Bezpiecznie sprawdź debugowanie APK i ustaw ścieżkę klasy
if [ -r "$tmpDaemonApk" ]; then
java_options="-Djava.class.path=$tmpDaemonApk"
debug="true"
@@ -12,8 +12,8 @@ else
java_options="-Djava.class.path=$dir/daemon.apk"
fi
-# Apply debug options based on Android SDK version.
-# Reference: https://developer.android.com/ndk/guides/wrap-script#debugging_when_using_wrapsh
+# Zastosuj opcje debugowania na podstawie wersji Android SDK.
+# Odniesienie: https://developer.android.com/ndk/guides/wrap-script#debugging_when_using_wrapsh
if [ "$debug" = "true" ]; then
os_version=$(getprop ro.build.version.sdk)
if [ "$os_version" -eq "27" ]; then
@@ -25,22 +25,22 @@ if [ "$debug" = "true" ]; then
fi
fi
-# Mount an empty temporary file system over /data/resource-cache to avoid possible overlay conflicts.
-# Note that this script runs inside an isolated mount namespace (via unshare).
+# Zamontuj pusty tymczasowy system plików w /data/resource-cache, aby uniknąć potencjalnych konfliktów nakładek.
+# Należy pamiętać, że ten skrypt działa w odizolowanej przestrzeni nazw montowania (za pośrednictwem unshare).
mount tmpfs -t tmpfs /data/resource-cache
-# Wait for Zygote socket using a polling loop
+# Poczekaj na gniazdo zygote, używając pętli sondowania
if [ ! -S "/dev/socket/zygote" ]; then
- # Wait up to ~10 seconds to avoid an infinite hang if something breaks
+ # Poczekaj do ~10 sekund, aby uniknąć nieskończonego zawieszenia, jeśli coś się zepsuje
wait_count=0
while [ ! -S "/dev/socket/zygote" ] &&[ "$wait_count" -lt 100 ]; do
sleep 0.1
wait_count=$((wait_count + 1))
done
- [ "$debug" = "true" ] && log -p v -t "Vector" "zygote started"
+ [ "$debug" = "true" ] && log -p v -t "Vector" "zygote uruchomiony"
fi
-[ "$debug" = "true" ] && log -p d -t "Vector" "Starting daemon $*"
+[ "$debug" = "true" ] && log -p d -t "Vector" "Uruchamianie daemon $*"
-# Launch the daemon
+# Włącz daemon
exec /system/bin/app_process $java_options /system/bin --nice-name=lspd org.matrix.vector.daemon.VectorDaemon "$@" >/dev/null 2>&1
diff --git a/zygisk/module/module.prop b/zygisk/module/module.prop
index 31c00fc84..874a1c58a 100644
--- a/zygisk/module/module.prop
+++ b/zygisk/module/module.prop
@@ -1,7 +1,7 @@
id=zygisk_vector
-name=Vector
+name=Zygisk Vector
version=${versionName} (${versionCode})
versionCode=${versionCode}
-author=JingMatrix
-description=A modern, Xposed-compatible framework for Android application hooking. (Android 8.1 ~ 16)
-updateJson=https://raw.githubusercontent.com/JingMatrix/LSPosed/master/zygisk/update.json
+author=JingMatrix, Łukasz Kuchta (fork)
+description=Nowoczesny moduł zygisk do podłączania aplikacji na Androida (Android 8.1–17).
+updateJson=https://raw.githubusercontent.com/JingMatrix/Vector/master/zygisk/update.json
diff --git a/zygisk/update.json b/zygisk/update.json
index 96fc577a8..b4ead1918 100644
--- a/zygisk/update.json
+++ b/zygisk/update.json
@@ -1,6 +1,6 @@
{
- "version": "v2.0",
- "versionCode": 3021,
- "zipUrl": "https://github.com/JingMatrix/LSPosed/releases/download/v2.0/Vector-v2.0-Release.zip",
- "changelog": "https://raw.githubusercontent.com/JingMatrix/LSPosed/master/zygisk/changelog.md"
+ "version": "2.0",
+ "versionCode": 3043,
+ "zipUrl": "https://github.com/JingMatrix/Vector/releases/download/v2.0/Vector-v2.0-Release.zip",
+ "changelog": "https://raw.githubusercontent.com/JingMatrix/Vector/master/zygisk/changelog.md"
}