You've already forked KernelSU
mirror of
https://github.com/tiann/KernelSU.git
synced 2025-08-27 23:46:34 +00:00
Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90d63fe184 | ||
|
|
0f8a1346c7 | ||
|
|
1fad91a4e2 | ||
|
|
ddff9ee701 | ||
|
|
c7a9655ab9 | ||
|
|
fd7681c3ff | ||
|
|
e3e4d2eed4 | ||
|
|
30e00859b9 | ||
|
|
faf7a8e3b1 | ||
|
|
b82fc971dd | ||
|
|
52f5727875 | ||
|
|
01711b4114 | ||
|
|
153ce9a39a | ||
|
|
f37cc16117 | ||
|
|
5f31571cc7 | ||
|
|
92a1267b29 | ||
|
|
b99701d216 | ||
|
|
097e291d93 | ||
|
|
eb3f604ab8 | ||
|
|
3d9ca63bac | ||
|
|
4be7485180 | ||
|
|
afefe20c96 | ||
|
|
76e7d7c60c | ||
|
|
d08f537c89 | ||
|
|
88e20d102d | ||
|
|
32b3ec9844 | ||
|
|
fbeea49318 | ||
|
|
5deecb3b50 | ||
|
|
534ac88195 | ||
|
|
d867c3c5e2 | ||
|
|
aca9ac50f3 | ||
|
|
d6cbda49aa | ||
|
|
fe7f509f9d | ||
|
|
26da7d590e | ||
|
|
706cd1e73e | ||
|
|
6472b14a59 | ||
|
|
c305dca5ab | ||
|
|
94978b7b28 | ||
|
|
161b3280c4 | ||
|
|
e69769d25f | ||
|
|
a1153683e1 | ||
|
|
79341ab501 | ||
|
|
05b33abb79 | ||
|
|
f5095f96fa | ||
|
|
dcd9d65c92 | ||
|
|
fa3dec8852 | ||
|
|
87d10054ae | ||
|
|
1a308afe63 | ||
|
|
f46830f28f | ||
|
|
c560d603e6 | ||
|
|
064de704f2 | ||
|
|
860911c455 | ||
|
|
1d04c5086c | ||
|
|
f4eab986a9 | ||
|
|
701e85d931 | ||
|
|
bf43654725 | ||
|
|
a56a922f96 | ||
|
|
19a697a968 | ||
|
|
c9b540b12c | ||
|
|
cd48f64154 | ||
|
|
acd2c343e2 | ||
|
|
dec7f91182 | ||
|
|
d2684292e8 | ||
|
|
07b940d127 | ||
|
|
845515fa6b | ||
|
|
0db7aa573e | ||
|
|
3783f82b28 | ||
|
|
684973b4bf |
8
.github/workflows/build-kernel-a12.yml
vendored
8
.github/workflows/build-kernel-a12.yml
vendored
@@ -43,6 +43,8 @@ jobs:
|
||||
os_patch_level: 2023-07
|
||||
- sub_level: 185
|
||||
os_patch_level: 2023-09
|
||||
- sub_level: 198
|
||||
os_patch_level: 2023-11
|
||||
uses: ./.github/workflows/gki-kernel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
@@ -64,7 +66,7 @@ jobs:
|
||||
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -116,13 +118,13 @@ jobs:
|
||||
run: ls -R
|
||||
|
||||
- name: Upload images artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: boot-images-android12
|
||||
path: Image-android12*/*.img.gz
|
||||
|
||||
check-build-kernel:
|
||||
if: github.event_name == 'pull_request'
|
||||
if: github.event_name == 'pull_request' && !github.event.pull_request.draft
|
||||
uses: ./.github/workflows/gki-kernel.yml
|
||||
with:
|
||||
version: android12-5.10
|
||||
|
||||
18
.github/workflows/build-kernel-a13.yml
vendored
18
.github/workflows/build-kernel-a13.yml
vendored
@@ -44,7 +44,10 @@ jobs:
|
||||
os_patch_level: 2023-09
|
||||
- version: "5.10"
|
||||
sub_level: 189
|
||||
os_patch_level: 2023-10
|
||||
os_patch_level: 2023-11
|
||||
- version: "5.10"
|
||||
sub_level: 198
|
||||
os_patch_level: 2023-12
|
||||
- version: "5.15"
|
||||
sub_level: 41
|
||||
os_patch_level: 2022-11
|
||||
@@ -65,7 +68,10 @@ jobs:
|
||||
os_patch_level: 2023-09
|
||||
- version: "5.15"
|
||||
sub_level: 123
|
||||
os_patch_level: 2023-10
|
||||
os_patch_level: 2023-11
|
||||
- version: "5.15"
|
||||
sub_level: 137
|
||||
os_patch_level: 2023-12
|
||||
uses: ./.github/workflows/gki-kernel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
@@ -87,7 +93,7 @@ jobs:
|
||||
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -134,18 +140,18 @@ jobs:
|
||||
echo "VERSION: $VERSION"
|
||||
cd -
|
||||
bash $GITHUB_WORKSPACE/KernelSU/.github/scripts/build_a13.sh
|
||||
|
||||
|
||||
- name: Display structure of boot files
|
||||
run: ls -R
|
||||
|
||||
- name: Upload images artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: boot-images-android13
|
||||
path: Image-android13*/*.img.gz
|
||||
|
||||
check-build-kernel:
|
||||
if: github.event_name == 'pull_request'
|
||||
if: github.event_name == 'pull_request' && !github.event.pull_request.draft
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
|
||||
17
.github/workflows/build-kernel-a14.yml
vendored
17
.github/workflows/build-kernel-a14.yml
vendored
@@ -24,9 +24,18 @@ jobs:
|
||||
- version: "5.15"
|
||||
sub_level: 110
|
||||
os_patch_level: 2023-09
|
||||
- version: "5.15"
|
||||
sub_level: 131
|
||||
os_patch_level: 2023-11
|
||||
- version: "6.1"
|
||||
sub_level: 25
|
||||
os_patch_level: 2023-10
|
||||
- version: "6.1"
|
||||
sub_level: 43
|
||||
os_patch_level: 2023-11
|
||||
- version: "6.1"
|
||||
sub_level: 57
|
||||
os_patch_level: 2023-12
|
||||
uses: ./.github/workflows/gki-kernel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
@@ -48,7 +57,7 @@ jobs:
|
||||
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -95,18 +104,18 @@ jobs:
|
||||
echo "VERSION: $VERSION"
|
||||
cd -
|
||||
bash $GITHUB_WORKSPACE/KernelSU/.github/scripts/build_a13.sh
|
||||
|
||||
|
||||
- name: Display structure of boot files
|
||||
run: ls -R
|
||||
|
||||
- name: Upload images artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: boot-images-android14
|
||||
path: Image-android14*/*.img.gz
|
||||
|
||||
check-build-kernel:
|
||||
if: github.event_name == 'pull_request'
|
||||
if: github.event_name == 'pull_request' && !github.event.pull_request.draft
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
|
||||
3
.github/workflows/build-kernel-arcvm.yml
vendored
3
.github/workflows/build-kernel-arcvm.yml
vendored
@@ -15,6 +15,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event_name != 'pull_request' || (github.event_name == 'pull_request' && !github.event.pull_request.draft)
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64]
|
||||
@@ -110,7 +111,7 @@ jobs:
|
||||
echo "file_path=${PWD}/arch/x86/boot/bzImage" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload kernel-ARCVM-${{ matrix.arch }}-${{ matrix.version }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: kernel-ARCVM-${{ matrix.arch }}-${{ matrix.version }}
|
||||
path: "${{ env.file_path }}"
|
||||
|
||||
3
.github/workflows/build-kernel-wsa.yml
vendored
3
.github/workflows/build-kernel-wsa.yml
vendored
@@ -15,6 +15,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event_name != 'pull_request' || (github.event_name == 'pull_request' && !github.event.pull_request.draft)
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, arm64]
|
||||
@@ -104,7 +105,7 @@ jobs:
|
||||
echo "file_path=WSA-Linux-Kernel/arch/${ARCH_MAP_FILE[${{ matrix.arch }}]}/boot/${FILE_NAME[${{ matrix.arch }}]}" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload kernel-${{ matrix.arch }}-${{ matrix.version }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: kernel-WSA-${{ matrix.arch }}-${{ matrix.version }}
|
||||
path: "${{ env.file_path }}"
|
||||
|
||||
18
.github/workflows/build-manager.yml
vendored
18
.github/workflows/build-manager.yml
vendored
@@ -58,7 +58,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: "temurin"
|
||||
java-version: "17"
|
||||
@@ -69,13 +69,13 @@ jobs:
|
||||
gradle-home-cache-cleanup: true
|
||||
|
||||
- name: Download arm64 ksud
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ksud-aarch64-linux-android
|
||||
path: .
|
||||
|
||||
- name: Download x86_64 ksud
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ksud-x86_64-linux-android
|
||||
path: .
|
||||
@@ -89,15 +89,17 @@ jobs:
|
||||
|
||||
- name: Build with Gradle
|
||||
run: |
|
||||
echo 'org.gradle.parallel=true' >> gradle.properties
|
||||
echo 'org.gradle.vfs.watch=true' >> gradle.properties
|
||||
echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties
|
||||
echo 'android.native.buildOutput=verbose' >> gradle.properties
|
||||
{
|
||||
echo 'org.gradle.parallel=true'
|
||||
echo 'org.gradle.vfs.watch=true'
|
||||
echo 'org.gradle.jvmargs=-Xmx2048m'
|
||||
echo 'android.native.buildOutput=verbose'
|
||||
} >> gradle.properties
|
||||
sed -i 's/org.gradle.configuration-cache=true//g' gradle.properties
|
||||
./gradlew clean assembleRelease
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: manager
|
||||
path: manager/app/build/outputs/apk/release/*.apk
|
||||
|
||||
2
.github/workflows/build-su.yml
vendored
2
.github/workflows/build-su.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
working-directory: ./userspace/su
|
||||
run: ndk-build
|
||||
- name: Upload a Build Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: su
|
||||
path: ./userspace/su/libs
|
||||
|
||||
2
.github/workflows/clippy.yml
vendored
2
.github/workflows/clippy.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
workspaces: userspace/ksud
|
||||
|
||||
- name: Install cross
|
||||
run: cargo install cross
|
||||
run: cargo install cross --locked
|
||||
|
||||
- name: Run clippy
|
||||
run: |
|
||||
|
||||
8
.github/workflows/deploy-website.yml
vendored
8
.github/workflows/deploy-website.yml
vendored
@@ -35,13 +35,13 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0 # Not needed if lastUpdated is not enabled
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
cache: yarn # or pnpm / yarn
|
||||
cache-dependency-path: website/yarn.lock
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v3
|
||||
uses: actions/configure-pages@v4
|
||||
- name: Install dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
- name: Build with VitePress
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
yarn docs:build
|
||||
touch docs/.vitepress/dist/.nojekyll
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: website/docs/.vitepress/dist
|
||||
|
||||
@@ -64,4 +64,4 @@ jobs:
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v2
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
8
.github/workflows/gki-kernel.yml
vendored
8
.github/workflows/gki-kernel.yml
vendored
@@ -172,10 +172,10 @@ jobs:
|
||||
fi
|
||||
if [ -e build/build.sh ]; then
|
||||
CCACHE="/usr/bin/ccache" LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
|
||||
else
|
||||
else
|
||||
tools/bazel run --disk_cache=/home/runner/.cache/bazel --config=fast --config=stamp --lto=thin //common:kernel_aarch64_dist -- --dist_dir=dist
|
||||
fi
|
||||
|
||||
|
||||
- name: Prepare artifacts
|
||||
id: prepareArtifacts
|
||||
run: |
|
||||
@@ -191,13 +191,13 @@ jobs:
|
||||
cp $OUTDIR/Image ./AnyKernel3/
|
||||
|
||||
- name: Upload Image and Image.gz
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Image-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
||||
path: ./output/*
|
||||
|
||||
- name: Upload AnyKernel3
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: AnyKernel3-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
||||
path: ./AnyKernel3/*
|
||||
|
||||
4
.github/workflows/ksud.yml
vendored
4
.github/workflows/ksud.yml
vendored
@@ -24,13 +24,13 @@ jobs:
|
||||
cache-targets: false
|
||||
|
||||
- name: Install cross
|
||||
run: cargo install cross
|
||||
run: cargo install cross --locked
|
||||
|
||||
- name: Build ksud
|
||||
run: cross build --target ${{ inputs.target }} --release --manifest-path ./userspace/ksud/Cargo.toml
|
||||
|
||||
- name: Upload ksud artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ksud-${{ inputs.target }}
|
||||
path: userspace/ksud/target/**/release/ksud
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Zip AnyKernel3
|
||||
run: |
|
||||
for dir in AnyKernel3-*; do
|
||||
|
||||
@@ -3,12 +3,21 @@
|
||||
|
||||
# KernelSU
|
||||
|
||||
<img src="https://kernelsu.org/logo.png" style="width: 96px;" alt="logo">
|
||||
|
||||
A Kernel-based root solution for Android devices.
|
||||
|
||||
[](https://github.com/tiann/KernelSU/releases/latest)
|
||||
[](https://hosted.weblate.org/engage/kernelsu)
|
||||
[](https://t.me/KernelSU)
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](/LICENSE)
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
1. Kernel-based `su` and root access management.
|
||||
2. Module system based on overlayfs.
|
||||
2. Module system based on [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS).
|
||||
3. [App Profile](https://kernelsu.org/guide/app-profile.html): Lock up the root power in a cage.
|
||||
|
||||
## Compatibility State
|
||||
@@ -33,10 +42,13 @@ To help translate KernelSU or improve existing translations, please use [Weblate
|
||||
|
||||
- Telegram: [@KernelSU](https://t.me/KernelSU)
|
||||
|
||||
## Security
|
||||
For information on reporting security vulnerabilities in KernelSU, see [SECURITY.md](/SECURITY.md).
|
||||
|
||||
## License
|
||||
|
||||
- Files under the `kernel` directory are [GPL-2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
- All other parts except the `kernel` directory are [GPL-3](https://www.gnu.org/licenses/gpl-3.0.html)
|
||||
- Files under the `kernel` directory are [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
- All other parts except the `kernel` directory are [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html)
|
||||
|
||||
## Credits
|
||||
|
||||
|
||||
@@ -2,8 +2,16 @@
|
||||
|
||||
# KernelSU
|
||||
|
||||
<img src="https://kernelsu.org/logo.png" style="width: 96px;" alt="logo">
|
||||
|
||||
Android におけるカーネルベースの root ソリューションです。
|
||||
|
||||
[](https://github.com/tiann/KernelSU/releases/latest)
|
||||
[](https://hosted.weblate.org/engage/kernelsu)
|
||||
[](https://t.me/KernelSU)
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](/LICENSE)
|
||||
|
||||
## 特徴
|
||||
|
||||
1. カーネルベースの `su` と権限管理
|
||||
|
||||
@@ -2,8 +2,16 @@
|
||||
|
||||
# KernelSU
|
||||
|
||||
<img src="https://kernelsu.org/logo.png" style="width: 96px;" alt="logo">
|
||||
|
||||
Uma solução root baseada em kernel para dispositivos Android.
|
||||
|
||||
[](https://github.com/tiann/KernelSU/releases/latest)
|
||||
[](https://hosted.weblate.org/engage/kernelsu)
|
||||
[](https://t.me/KernelSU)
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](/LICENSE)
|
||||
|
||||
## Características
|
||||
|
||||
1. `su` e gerenciamento de acesso root baseado em kernel.
|
||||
@@ -26,7 +34,7 @@ Atualmente, apenas `arm64-v8a` e `x86_64` são suportados.
|
||||
- [Site oficial](https://kernelsu.org/pt_BR/)
|
||||
|
||||
## Tradução
|
||||
Para contribuir com a tradução do KernelSU ou aprimorar traduções existentes, por favor, utilize o [Weblate](https://hosted.weblate.org/engage/kernelsu/). PR para a tradução do Gerenciador não são mais aceitos, pois podem entrar em conflito com o Weblate.
|
||||
Para contribuir com a tradução do KernelSU ou aprimorar traduções existentes, por favor, utilize o [Weblate](https://hosted.weblate.org/engage/kernelsu/). PR para a tradução do Gerenciador não são mais aceitas, pois podem entrar em conflito com o Weblate.
|
||||
|
||||
## Discussão
|
||||
|
||||
|
||||
@@ -2,7 +2,16 @@
|
||||
|
||||
# KernelSU
|
||||
|
||||
Android cihazlar için kernel tabanlı bir root çözümü.
|
||||
<img src="https://kernelsu.org/logo.png" style="width: 96px;" alt="logo">
|
||||
|
||||
Android cihazlar için kernel tabanlı root çözümü.
|
||||
|
||||
[](https://github.com/tiann/KernelSU/releases/latest)
|
||||
[](https://hosted.weblate.org/engage/kernelsu)
|
||||
[](https://t.me/KernelSU)
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](/LICENSE)
|
||||
|
||||
|
||||
## Özellikler
|
||||
|
||||
@@ -12,21 +21,21 @@ Android cihazlar için kernel tabanlı bir root çözümü.
|
||||
|
||||
## Uyumluluk Durumu
|
||||
|
||||
KernelSU resmi olarak Android GKI 2.0 cihazlarını ( 5.10+ kernelli) destekler, eski kernellerle de (4.14+) uyumludur, ancak kerneli kendinizin inşaa etmesi gerekir.
|
||||
KernelSU resmi olarak Android GKI 2.0 cihazlarını (5.10+ kernelli) destekler, eski kernellerle de (4.14+) uyumludur, ancak kerneli kendinizin derlemeniz gerekir.
|
||||
|
||||
WSA ve konteyner tabanlı Android'in de, KernelSU ile entegre olarak da çalışması gerekmektedir.
|
||||
Bununla birlikte; WSA, ChromeOS ve konteyner tabanlı Android'in tamamı desteklenmektedir.
|
||||
|
||||
Ve desteklenen mevcut ABI'ler : `arm64-v8a` ve `x86_64`
|
||||
Şimdilik sadece `arm64-v8a` ve `x86_64` desteklenmektedir.
|
||||
|
||||
## Kullanım
|
||||
|
||||
- [Yükleme](https://kernelsu.org/guide/installation.html)
|
||||
- [Nasıl inşa edilir?](https://kernelsu.org/guide/how-to-build.html)
|
||||
- [Yükleme yönergeleri](https://kernelsu.org/guide/installation.html)
|
||||
- [Nasıl derlenir?](https://kernelsu.org/guide/how-to-build.html)
|
||||
- [Resmi WEB sitesi](https://kernelsu.org/)
|
||||
|
||||
## Çeviri
|
||||
|
||||
KernelSU'yu kendi dilinize çevirmek veya varolan bir çeviriyi geliştirmek istiyorsanız, lütfen [Weblate](https://hosted.weblate.org/engage/kernelsu/)'i kullanın.
|
||||
KernelSU'nun çevirisine veya mevcut çevirilerin iyileştirilmesine yardımcı olmak için lütfen [Weblate](https://hosted.weblate.org/engage/kernelsu/) kullanın. Yönetici uygulamasının PR ile çevirisi, Weblate ile çakışacağından artık kabul edilmeyecektir.
|
||||
|
||||
## Tartışma
|
||||
|
||||
@@ -41,5 +50,5 @@ KernelSU'yu kendi dilinize çevirmek veya varolan bir çeviriyi geliştirmek ist
|
||||
|
||||
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): KernelSU fikri.
|
||||
- [Magisk](https://github.com/topjohnwu/Magisk): güçlü root aracı.
|
||||
- [genuine](https://github.com/brevent/genuine/): apk v2 imza doğrulama.
|
||||
- [genuine](https://github.com/brevent/genuine/): apk v2 imza doğrulaması.
|
||||
- [Diamorphine](https://github.com/m0nad/Diamorphine): bazı rootkit becerileri.
|
||||
|
||||
@@ -351,7 +351,7 @@ void do_save_allow_list(struct work_struct *work)
|
||||
loff_t off = 0;
|
||||
|
||||
struct file *fp =
|
||||
ksu_filp_open_compat(KERNEL_SU_ALLOWLIST, O_WRONLY | O_CREAT, 0644);
|
||||
ksu_filp_open_compat(KERNEL_SU_ALLOWLIST, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||
if (IS_ERR(fp)) {
|
||||
pr_err("save_allow_list create file failed: %ld\n", PTR_ERR(fp));
|
||||
return;
|
||||
@@ -458,7 +458,9 @@ void ksu_prune_allowlist(bool (*is_uid_valid)(uid_t, char *, void *), void *data
|
||||
modified = true;
|
||||
pr_info("prune uid: %d, package: %s\n", uid, package);
|
||||
list_del(&np->list);
|
||||
allow_list_bitmap[uid / BITS_PER_BYTE] &= ~(1 << (uid % BITS_PER_BYTE));
|
||||
if (likely(uid <= BITMAP_UID_MAX)) {
|
||||
allow_list_bitmap[uid / BITS_PER_BYTE] &= ~(1 << (uid % BITS_PER_BYTE));
|
||||
}
|
||||
remove_uid_from_arr(uid);
|
||||
smp_mb();
|
||||
kfree(np);
|
||||
|
||||
@@ -570,6 +570,10 @@ int ksu_handle_setuid(struct cred *new, const struct cred *old)
|
||||
try_umount("/product", true, 0);
|
||||
try_umount("/data/adb/modules", false, MNT_DETACH);
|
||||
|
||||
// try umount ksu temp path
|
||||
try_umount("/debug_ramdisk", false, MNT_DETACH);
|
||||
try_umount("/sbin", false, MNT_DETACH);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,8 @@ bool become_manager(char *pkg)
|
||||
}
|
||||
cwd = d_path(&files_path, buf, PATH_MAX);
|
||||
if (startswith(cwd, "/data/app/") != 0 ||
|
||||
endswith(cwd, "/base.apk") != 0) {
|
||||
endswith(cwd, "==/base.apk") != 0) {
|
||||
// AOSP generate ramdom base64 with 16bit, without NO_PADDING, so it must have two "="
|
||||
continue;
|
||||
}
|
||||
// we have found the apk!
|
||||
|
||||
@@ -177,7 +177,8 @@ static int get_object(char *buf, char __user *user_object, size_t buf_sz,
|
||||
// reset avc cache table, otherwise the new rules will not take effect if already denied
|
||||
static void reset_avc_cache()
|
||||
{
|
||||
#ifndef KSU_COMPAT_USE_SELINUX_STATE
|
||||
#if ((!defined(KSU_COMPAT_USE_SELINUX_STATE)) || \
|
||||
LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0))
|
||||
avc_ss_reset(0);
|
||||
selnl_notify_policyload(0);
|
||||
selinux_status_update_policyload(0);
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
|
||||
#define KERNEL_SU_DOMAIN "u:r:su:s0"
|
||||
|
||||
static u32 ksu_sid;
|
||||
|
||||
static int transive_to_domain(const char *domain)
|
||||
{
|
||||
struct cred *cred;
|
||||
@@ -31,9 +29,6 @@ static int transive_to_domain(const char *domain)
|
||||
domain, sid, error);
|
||||
}
|
||||
if (!error) {
|
||||
if (!ksu_sid)
|
||||
ksu_sid = sid;
|
||||
|
||||
tsec->sid = sid;
|
||||
tsec->create_sid = 0;
|
||||
tsec->keycreate_sid = 0;
|
||||
@@ -106,7 +101,13 @@ static inline u32 current_sid(void)
|
||||
|
||||
bool is_ksu_domain()
|
||||
{
|
||||
return ksu_sid && current_sid() == ksu_sid;
|
||||
char *domain;
|
||||
u32 seclen;
|
||||
int err = security_secid_to_secctx(current_sid(), &domain, &seclen);
|
||||
if (err) {
|
||||
return false;
|
||||
}
|
||||
return strncmp(KERNEL_SU_DOMAIN, domain, seclen) == 0;
|
||||
}
|
||||
|
||||
bool is_zygote(void *sec)
|
||||
|
||||
@@ -56,7 +56,7 @@ static void do_update_uid(struct work_struct *work)
|
||||
char chr = 0;
|
||||
loff_t pos = 0;
|
||||
loff_t line_start = 0;
|
||||
char buf[128];
|
||||
char buf[KSU_MAX_PACKAGE_NAME];
|
||||
for (;;) {
|
||||
ssize_t count =
|
||||
ksu_kernel_read_compat(fp, &chr, sizeof(chr), &pos);
|
||||
@@ -69,7 +69,7 @@ static void do_update_uid(struct work_struct *work)
|
||||
&line_start);
|
||||
|
||||
struct uid_data *data =
|
||||
kmalloc(sizeof(struct uid_data), GFP_ATOMIC);
|
||||
kzalloc(sizeof(struct uid_data), GFP_ATOMIC);
|
||||
if (!data) {
|
||||
goto out;
|
||||
}
|
||||
@@ -80,13 +80,13 @@ static void do_update_uid(struct work_struct *work)
|
||||
char *uid = strsep(&tmp, delim);
|
||||
if (!uid || !package) {
|
||||
pr_err("update_uid: package or uid is NULL!\n");
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
u32 res;
|
||||
if (kstrtou32(uid, 10, &res)) {
|
||||
pr_err("update_uid: uid parse err\n");
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
data->uid = res;
|
||||
strncpy(data->package, package, KSU_MAX_PACKAGE_NAME);
|
||||
|
||||
@@ -74,7 +74,7 @@ fun getBugreportFile(context: Context): File {
|
||||
val uname = Os.uname()
|
||||
pw.println("KernelRelease: ${uname.release}")
|
||||
pw.println("KernelVersion: ${uname.version}")
|
||||
pw.println("Mahcine: ${uname.machine}")
|
||||
pw.println("Machine: ${uname.machine}")
|
||||
pw.println("Nodename: ${uname.nodename}")
|
||||
pw.println("Sysname: ${uname.sysname}")
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<string name="selinux_status_permissive">পারমিসিভ</string>
|
||||
<string name="module_failed_to_disable">মোডিউল ডিসেবল করা যায়নি: %s</string>
|
||||
<string name="module_empty">কোনো মোডিউল ইন্সটল করা নেই</string>
|
||||
<string name="home_working_version">ভারসন: %d</string>
|
||||
<string name="home_working_version">সংস্করণ: %d</string>
|
||||
<string name="home_superuser_count">সুপার ইউজার: %d</string>
|
||||
<string name="profile_namespace">নেইম স্পেস মাউন্ট</string>
|
||||
<string name="profile_namespace_inherited">ইনহেরিটেড</string>
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
<string name="home_superuser_count">সুপার ইউজার: %d</string>
|
||||
<string name="home_module_count">মডিউল: %d</string>
|
||||
<string name="home_unsupported">অসমর্থিত</string>
|
||||
<string name="home_unsupported_reason">কার্নেলএসইউ শুধুমাত্র জিকেআই কার্নেল সমর্থন করে</string>
|
||||
<string name="home_unsupported_reason">KernelSU শুধুমাত্র GKI কার্নেল সমর্থন করে</string>
|
||||
<string name="home_kernel">কার্নেল</string>
|
||||
<string name="home_manager_version">ম্যানেজার সংস্করণ</string>
|
||||
<string name="home_fingerprint">ফিঙ্গারপ্রিন্ট</string>
|
||||
<string name="home_selinux_status">সেলিনাক্স স্ট্যাটাস</string>
|
||||
<string name="home_selinux_status">SELinux স্টেটাস</string>
|
||||
<string name="selinux_status_disabled">ডিজেবল</string>
|
||||
<string name="selinux_status_enforcing">এনফোর্সিং</string>
|
||||
<string name="selinux_status_enforcing">কার্যকর</string>
|
||||
<string name="selinux_status_permissive">অনুমতিমূলক</string>
|
||||
<string name="selinux_status_unknown">অপরিচিত</string>
|
||||
<string name="selinux_status_unknown">অজানা</string>
|
||||
<string name="superuser">সুপার ইউজার</string>
|
||||
<string name="module_failed_to_enable">মডিউল সক্ষম করতে ব্যর্থ হয়েছে: %s</string>
|
||||
<string name="module_failed_to_disable">মডিউল নিষ্ক্রিয় করতে ব্যর্থ হয়েছে: %s</string>
|
||||
@@ -63,4 +63,5 @@
|
||||
<string name="profile_namespace_global">গ্লোবাল</string>
|
||||
<string name="profile_namespace_individual">আলাদাভাবে</string>
|
||||
<string name="profile_umount_modules">আনমাউন্ট মোডিউল</string>
|
||||
<string name="require_kernel_version">ম্যানেজার সঠিকভাবে কাজ করার জন্য বর্তমান KernelSU সংস্করণ %d খুবই কম। অনুগ্রহ করে %d বা উচ্চতর সংস্করণে আপগ্রেড করুন!</string>
|
||||
</resources>
|
||||
@@ -5,7 +5,7 @@
|
||||
<string name="selinux_status_permissive">Permissiv</string>
|
||||
<string name="home_working">Funktioniert</string>
|
||||
<string name="home_working_version">Version: %d</string>
|
||||
<string name="superuser">Superuser</string>
|
||||
<string name="superuser">SuperUser</string>
|
||||
<string name="home_click_to_install">Tippen zum Installieren</string>
|
||||
<string name="home_superuser_count">Superuser: %d</string>
|
||||
<string name="selinux_status_unknown">Unbekannt</string>
|
||||
@@ -47,7 +47,7 @@
|
||||
<string name="selinux_status_disabled">Deaktiviert</string>
|
||||
<string name="module_failed_to_enable">Modulaktivierung fehlgeschlagen: %s</string>
|
||||
<string name="module_failed_to_disable">Moduldeaktivierung fehlgeschlagen: %s</string>
|
||||
<string name="module_empty">Kein Modul installiert</string>
|
||||
<string name="module_empty">Keine Module installiert</string>
|
||||
<string name="module">Modul</string>
|
||||
<string name="uninstall">Deinstallieren</string>
|
||||
<string name="install">Installieren</string>
|
||||
@@ -80,4 +80,26 @@
|
||||
<string name="module_uninstall_failed">Deinstallation fehlgeschlagen: %s</string>
|
||||
<string name="require_kernel_version">Die aktuelle Kernel-Version %d ist zu alt für diese Manager-Version. Bitte auf Version %d oder höher upgraden!</string>
|
||||
<string name="module_changelog">Änderungsprotokoll</string>
|
||||
<string name="app_profile_template_import_success">erfolgreich importiert!</string>
|
||||
<string name="app_profile_export_to_clipboard">in Zwischenablage exportieren</string>
|
||||
<string name="app_profile_template_export_empty">Kann lokale Vorlage nicht finden!</string>
|
||||
<string name="app_profile_template_id_exist">Vorlagen ID existiert bereits!</string>
|
||||
<string name="app_profile_import_from_clipboard">aus Zwischenablage importieren</string>
|
||||
<string name="module_changelog_failed">Konnte Changelog nicht laden: %s</string>
|
||||
<string name="app_profile_template_name">Name</string>
|
||||
<string name="app_profile_template_id_invalid">ungültige Vorlagen id</string>
|
||||
<string name="app_profile_template_sync">Online Vorlagen synchronisieren</string>
|
||||
<string name="app_profile_template_create">Erstelle Vorlage</string>
|
||||
<string name="app_profile_template_readonly">Nur-Lesen</string>
|
||||
<string name="app_profile_import_export">Import/Export</string>
|
||||
<string name="app_profile_template_save_failed">Fehler beim speichern</string>
|
||||
<string name="app_profile_template_edit">Bearbeite Vorlage</string>
|
||||
<string name="app_profile_template_id">id</string>
|
||||
<string name="settings_profile_template">App Profil Template</string>
|
||||
<string name="app_profile_template_description">Beschreibung</string>
|
||||
<string name="app_profile_template_save">Speichern</string>
|
||||
<string name="settings_profile_template_summary">verwalte lokale und online Profil Vorlagen</string>
|
||||
<string name="app_profile_template_delete">Löschen</string>
|
||||
<string name="app_profile_template_import_empty">Zwischenablage ist leer!</string>
|
||||
<string name="app_profile_template_view">Vorlage ansehen</string>
|
||||
</resources>
|
||||
105
manager/app/src/main/res/values-et/strings.xml
Normal file
105
manager/app/src/main/res/values-et/strings.xml
Normal file
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="home_working">Töötamine</string>
|
||||
<string name="home_working_version">Versioon: %d</string>
|
||||
<string name="home_module_count">Mooduleid: %d</string>
|
||||
<string name="home_kernel">Tuum</string>
|
||||
<string name="home_manager_version">Manageri versioon</string>
|
||||
<string name="home_fingerprint">Sõrmejälg</string>
|
||||
<string name="selinux_status_permissive">Lubav</string>
|
||||
<string name="module_failed_to_enable">Mooduli lubamine ebaõnnestus: %s</string>
|
||||
<string name="module_empty">Mooduleid pole paigaldatud</string>
|
||||
<string name="reboot">Taaskäivita</string>
|
||||
<string name="reboot_recovery">Taaskäivita taastusesse</string>
|
||||
<string name="module_uninstall_confirm">Kas soovid kindlasti eemaldada mooduli %s?</string>
|
||||
<string name="module_uninstall_success">%s on eemaldatud</string>
|
||||
<string name="send_log">Raporteeri logi</string>
|
||||
<string name="safe_mode">Turvarežiim</string>
|
||||
<string name="reboot_to_apply">Muudatuste rakendamiseks taaskäivita</string>
|
||||
<string name="home_learn_kernelsu">Õpi KernelSUd</string>
|
||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||
<string name="profile_default">Vaikimisi</string>
|
||||
<string name="profile_namespace">Haagi nimeruum</string>
|
||||
<string name="profile_umount_modules">Lahtihaagitud moodulid</string>
|
||||
<string name="failed_to_update_app_profile">Rakenduseprofiili uuendamine %s jaoks ebaõnnestus</string>
|
||||
<string name="settings_umount_modules_default">Haagi moodulid vaikimisi lahti</string>
|
||||
<string name="module_start_downloading">Allalaadimise alustamine: %s</string>
|
||||
<string name="failed_to_update_sepolicy">SELinux reeglite uuendamine ebaõnnestus: %s</string>
|
||||
<string name="app_profile_template_edit">Muuda malli</string>
|
||||
<string name="settings_profile_template">Rakenduseprofiili mall</string>
|
||||
<string name="app_profile_template_id">ID</string>
|
||||
<string name="app_profile_template_readonly">vaid lugemiseks</string>
|
||||
<string name="app_profile_template_id_exist">malli ID juba eksisteerib!</string>
|
||||
<string name="app_profile_export_to_clipboard">Ekspordi lõikelauale</string>
|
||||
<string name="app_profile_template_sync">Sünkrooni võrgumallid</string>
|
||||
<string name="module_changelog_failed">Muudatuste logi hankimine ebaõnnestus: %s</string>
|
||||
<string name="home">Kodu</string>
|
||||
<string name="home_click_to_install">Klõpsa paigaldamiseks</string>
|
||||
<string name="home_not_installed">Pole paigaldatud</string>
|
||||
<string name="home_unsupported">Mittetoetatud</string>
|
||||
<string name="home_superuser_count">Superkasutajaid: %d</string>
|
||||
<string name="home_unsupported_reason">KernelSU toetab hetkel vaid GSI tuumasid</string>
|
||||
<string name="home_selinux_status">SELinuxi olek</string>
|
||||
<string name="selinux_status_disabled">Keelatud</string>
|
||||
<string name="selinux_status_enforcing">Jõustav</string>
|
||||
<string name="selinux_status_unknown">Teadmata</string>
|
||||
<string name="superuser">Superkasutaja</string>
|
||||
<string name="module_failed_to_disable">Mooduli keelamine ebaõnnestus: %s</string>
|
||||
<string name="module">Moodul</string>
|
||||
<string name="reboot_bootloader">Taaskäivita käivituslaadurisse</string>
|
||||
<string name="uninstall">Eemalda</string>
|
||||
<string name="install">Paigalda</string>
|
||||
<string name="about">Teave</string>
|
||||
<string name="module_install">Paigalda</string>
|
||||
<string name="settings">Seaded</string>
|
||||
<string name="reboot_userspace">Pehme taaskäivitus</string>
|
||||
<string name="reboot_download">Taaskäivita allalaadimisrežiimi</string>
|
||||
<string name="reboot_edl">Taaskäivita EDL-i</string>
|
||||
<string name="refresh">Värskenda</string>
|
||||
<string name="module_author">Autor</string>
|
||||
<string name="module_uninstall_failed">Eemaldamine ebaõnnestus: %s</string>
|
||||
<string name="module_version">Versioon</string>
|
||||
<string name="module_overlay_fs_not_available">overlayfs pole saadaval, moodul ei saa töötada!</string>
|
||||
<string name="show_system_apps">Kuva süsteemirakendused</string>
|
||||
<string name="hide_system_apps">Peida süsteemirakendused</string>
|
||||
<string name="module_magisk_conflict">Moodulid on keelatud, kuna need lähevad konflikti Magiski omadega!</string>
|
||||
<string name="home_click_to_learn_kernelsu">Õpi KernelSUd paigaldama ja mooduleid kasutama</string>
|
||||
<string name="home_support_title">Toeta meid</string>
|
||||
<string name="profile_groups">Grupid</string>
|
||||
<string name="home_support_content">KernelSU on, ja alati jääb, tasuta ning avatud lähtekoodiga kättesaadavaks. Sellegipoolest võid sa näidata, et hoolid, ning teha annetuse.</string>
|
||||
<string name="profile_template">Mall</string>
|
||||
<string name="about_source_code">Vaata lähtekoodi %1$sis<br/>Liitu meie %2$si kanaliga</string>
|
||||
<string name="profile_name">Profiili nimi</string>
|
||||
<string name="profile_custom">Kohandatud</string>
|
||||
<string name="profile_namespace_inherited">Päritud</string>
|
||||
<string name="profile_namespace_global">Globaalne</string>
|
||||
<string name="profile_namespace_individual">Individuaalne</string>
|
||||
<string name="profile_capabilities">Võimekused</string>
|
||||
<string name="app_profile_template_id_invalid">Sobimatu malli ID</string>
|
||||
<string name="profile_selinux_context">SELinux kontekst</string>
|
||||
<string name="require_kernel_version">Praegune KernelSU versioon %d on liiga madal, haldur ei saa konkreetselt toimida. Palun täienda versioonile %d või kõrgem!</string>
|
||||
<string name="profile_selinux_domain">Domeen</string>
|
||||
<string name="launch_app">Käivita</string>
|
||||
<string name="force_stop_app">Sundpeata</string>
|
||||
<string name="profile_selinux_rules">Reeglid</string>
|
||||
<string name="module_update">Uuenda</string>
|
||||
<string name="module_downloading">Mooduli allalaadimine: %s</string>
|
||||
<string name="new_version_available">Uus versioon: %s on saadaval, klõpsa täiendamiseks</string>
|
||||
<string name="restart_app">Taaskäivita</string>
|
||||
<string name="module_changelog">Muudatuste logi</string>
|
||||
<string name="app_profile_template_name">Nimi</string>
|
||||
<string name="app_profile_template_description">Kirjeldus</string>
|
||||
<string name="app_profile_template_import_success">Edukalt imporditud</string>
|
||||
<string name="app_profile_template_save">Salvesta</string>
|
||||
<string name="app_profile_template_import_empty">Lõikelaud on tühi!</string>
|
||||
<string name="app_profile_template_delete">Kustuta</string>
|
||||
<string name="app_profile_template_view">Vaata malli</string>
|
||||
<string name="app_profile_import_export">Impordi/ekspordi</string>
|
||||
<string name="app_profile_import_from_clipboard">Impordi lõikelaualt</string>
|
||||
<string name="app_profile_template_save_failed">Malli salvestamine ebaõnnestus</string>
|
||||
<string name="app_profile_template_create">Loo mall</string>
|
||||
<string name="settings_profile_template_summary">Halda kohalikke ja võrgusolevaid rakenduseprofiili malle</string>
|
||||
<string name="profile_umount_modules_summary">Selle valiku lubamine lubab KernelSU-l taastada selle rakenduse moodulite poolt mistahes muudetud faile.</string>
|
||||
<string name="app_profile_template_export_empty">Eksportimiseks kohalikku malli ei leitud!</string>
|
||||
<string name="settings_umount_modules_default_summary">Globaalne vaikeväärtus \"Lahtihaagitud moodulitele\" rakenduseprofiilides. Lubamisel eemaldab see kõik moodulite süsteemimuudatused rakendustele, millel ei ole profiili määratud.</string>
|
||||
</resources>
|
||||
@@ -85,7 +85,7 @@
|
||||
<string name="app_profile_template_export_empty">Impossible de trouver un modèle local à exporter !</string>
|
||||
<string name="app_profile_template_id_exist">L\'id du modèle existe déjà !</string>
|
||||
<string name="module_changelog">Journal des modifications</string>
|
||||
<string name="app_profile_import_from_clipboard">Importer à partir presse-papiers</string>
|
||||
<string name="app_profile_import_from_clipboard">Importer à partir du presse-papiers</string>
|
||||
<string name="module_changelog_failed">Échec de récupération du journal des modifications : %s</string>
|
||||
<string name="app_profile_template_name">Nom</string>
|
||||
<string name="app_profile_template_id_invalid">id de modèle invalide</string>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<string name="selinux_status_enforcing">Érvényesítés</string>
|
||||
<string name="selinux_status_permissive">Megengedő</string>
|
||||
<string name="selinux_status_unknown">Ismeretlen</string>
|
||||
<string name="superuser">Superuser</string>
|
||||
<string name="superuser">Super user</string>
|
||||
<string name="module_failed_to_enable">Nem sikerült engedélyezni a következő modult: %s</string>
|
||||
<string name="module_failed_to_disable">Nem sikerült letiltani a következő modulokat: %s</string>
|
||||
<string name="module_empty">Nincs modul telepítve</string>
|
||||
@@ -67,16 +67,39 @@
|
||||
<string name="reboot_userspace">Android felület újraindítása</string>
|
||||
<string name="reboot_recovery">Újraindítás recovery-módba</string>
|
||||
<string name="reboot_bootloader">Újraindítás bootloader-módba</string>
|
||||
<string name="module_uninstall_success">%s eltávolítva</string>
|
||||
<string name="module_uninstall_success">%s törölve</string>
|
||||
<string name="module_version">Verzió</string>
|
||||
<string name="send_log">Fejlesztői napló küldése</string>
|
||||
<string name="send_log">Napló küldése</string>
|
||||
<string name="reboot_to_apply">Indítsd újra a készüléket hogy érvényesítsd a változást</string>
|
||||
<string name="home_support_content">A KernelSU ingyenes és nyílt forráskódú és mindig is az lesz. Te viszont meg tudod mutatni azt, hogy törődsz ennek a projektnek a sorsával egy adomány formájában.</string>
|
||||
<string name="profile_namespace_global">Globális</string>
|
||||
<string name="profile_umount_modules">Unmountold a modulokat</string>
|
||||
<string name="failed_to_update_app_profile">Nem sikerült frissíteni az App Profilt ehhez %s</string>
|
||||
<string name="settings_umount_modules_default_summary">A „Modulok csatlakoztatása” globális alapértelmezett értéke az alkalmazásprofilokban. Ha engedélyezve van, eltávolítja a rendszer összes modul-módosítását azoknál az alkalmazásoknál, amelyeknek nincs beállított profilja.</string>
|
||||
<string name="new_version_available">Új verzió: %s elérhető, kattints a letöltéséhez</string>
|
||||
<string name="new_version_available">Új verzió: %s elérhető, kattints a frissítéshez</string>
|
||||
<string name="failed_to_update_sepolicy">Nem sikerült frissíteni a SELinux szabályait a következőhöz: %s</string>
|
||||
<string name="require_kernel_version">A jelenlegi KernelSU verzió %d túlságosan elavult. Kérlek frissíts a %d verzióra vagy újabbra!</string>
|
||||
<string name="app_profile_template_import_success">Sikeresen importálva</string>
|
||||
<string name="app_profile_export_to_clipboard">Exportálás a vágólapból</string>
|
||||
<string name="app_profile_template_export_empty">A helyi sablon nem található az exportáláshoz!</string>
|
||||
<string name="app_profile_template_id_exist">A sablon ID már létezik!</string>
|
||||
<string name="module_changelog">Változások</string>
|
||||
<string name="app_profile_import_from_clipboard">Importálás a vágólapból</string>
|
||||
<string name="module_changelog_failed">A változásnapló lekérése nem sikerült: %s</string>
|
||||
<string name="app_profile_template_name">Név</string>
|
||||
<string name="app_profile_template_id_invalid">Hibás sablon ID</string>
|
||||
<string name="app_profile_template_sync">Online sablonok szinkronizálása</string>
|
||||
<string name="app_profile_template_create">Sablon készítése</string>
|
||||
<string name="app_profile_template_readonly">csak olvasható</string>
|
||||
<string name="app_profile_import_export">Import/Export</string>
|
||||
<string name="app_profile_template_save_failed">A sablon mentése sikertelen</string>
|
||||
<string name="app_profile_template_edit">Sablon szerkesztése</string>
|
||||
<string name="app_profile_template_id">id</string>
|
||||
<string name="settings_profile_template">Alkalmazásprofil sablon</string>
|
||||
<string name="app_profile_template_description">Leírás</string>
|
||||
<string name="app_profile_template_save">Mentés</string>
|
||||
<string name="settings_profile_template_summary">Az alkalmazásprofil helyi és online sablon kezelése</string>
|
||||
<string name="app_profile_template_delete">Törlés</string>
|
||||
<string name="app_profile_template_import_empty">A vágólap üres!</string>
|
||||
<string name="app_profile_template_view">Sablon megnézése</string>
|
||||
</resources>
|
||||
@@ -5,7 +5,7 @@
|
||||
<string name="home_click_to_install">Klik untuk memasang</string>
|
||||
<string name="home_working">Bekerja</string>
|
||||
<string name="home_working_version">Versi: %d</string>
|
||||
<string name="home_superuser_count">Superusers: %d</string>
|
||||
<string name="home_superuser_count">Superuser: %d</string>
|
||||
<string name="home_module_count">Modul: %d</string>
|
||||
<string name="home_unsupported">Tidak didukung</string>
|
||||
<string name="home_unsupported_reason">KernelSU saat ini hanya mendukung kernel GKI</string>
|
||||
@@ -15,7 +15,7 @@
|
||||
<string name="home_selinux_status">Status SELinux</string>
|
||||
<string name="selinux_status_disabled">Dinonaktifkan</string>
|
||||
<string name="selinux_status_enforcing">Enforcing</string>
|
||||
<string name="selinux_status_permissive">Permasif</string>
|
||||
<string name="selinux_status_permissive">Permissive</string>
|
||||
<string name="selinux_status_unknown">Tidak dikenal</string>
|
||||
<string name="superuser">SuperUser</string>
|
||||
<string name="module_failed_to_enable">Gagal mengaktifkan modul: %s</string>
|
||||
@@ -93,7 +93,7 @@
|
||||
<string name="app_profile_template_create">Buat Template</string>
|
||||
<string name="app_profile_import_export">Impor/Expor</string>
|
||||
<string name="app_profile_template_save_failed">Gagal untuk menyimpan template</string>
|
||||
<string name="app_profile_template_edit">Edit Template</string>
|
||||
<string name="app_profile_template_edit">Edit Templat</string>
|
||||
<string name="app_profile_template_id">id</string>
|
||||
<string name="settings_profile_template">Template Profil Aplikasi</string>
|
||||
<string name="app_profile_template_description">Deskripsi</string>
|
||||
@@ -102,4 +102,5 @@
|
||||
<string name="app_profile_template_delete">Hapus</string>
|
||||
<string name="app_profile_template_import_empty">Clipboard kosong!</string>
|
||||
<string name="app_profile_template_view">Lihat Template</string>
|
||||
<string name="app_profile_template_readonly">Hanya baca</string>
|
||||
</resources>
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="module_downloading">モジュールをダウンロード中: %s</string>
|
||||
<string name="profile_umount_modules_summary">このオプションを有効にすると、KernelSU はこのアプリのモジュールによって変更されたファイルを復元できるようになります。</string>
|
||||
<string name="settings_umount_modules_default">既定でモジュールのマウントを解除</string>
|
||||
<string name="settings_umount_modules_default_summary">アプリプロファイルの「モジュールのマウント解除」の共通既定値です。 有効にすると、プロファイル セットを持たないアプリでのシステムに対するすべてのモジュール変更が削除されます。</string>
|
||||
<string name="settings_umount_modules_default_summary">アプリプロファイルの「モジュールのアンマウント」の共通のデフォルト値です。 有効にすると、プロファイルセットを持たないアプリのシステムに対するすべてのモジュールの変更が削除されます。</string>
|
||||
<string name="require_kernel_version">現在の KernelSU バージョン %d はマネージャーが適切に機能するには低すぎます。 バージョン %d 以降にアップグレードしてください!</string>
|
||||
<string name="module_changelog">変更履歴</string>
|
||||
<string name="app_profile_template_import_success">インポート成功</string>
|
||||
@@ -101,6 +101,6 @@
|
||||
<string name="app_profile_template_save">保存</string>
|
||||
<string name="settings_profile_template_summary">アプリプロファイルのローカルおよびオンラインテンプレートを管理する</string>
|
||||
<string name="app_profile_template_delete">消去</string>
|
||||
<string name="app_profile_template_import_empty">クリップボードは空です!</string>
|
||||
<string name="app_profile_template_import_empty">クリップボードが空です!</string>
|
||||
<string name="app_profile_template_view">テンプレートを表示</string>
|
||||
</resources>
|
||||
104
manager/app/src/main/res/values-lv/strings.xml
Normal file
104
manager/app/src/main/res/values-lv/strings.xml
Normal file
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="profile_umount_modules_summary">Iespējojot šo opciju, KernelSU varēs atjaunot visus moduļos šīs lietojumprogrammas modificētos failus.</string>
|
||||
<string name="failed_to_update_sepolicy">Neizdevās atjaunināt SELinux noteikumus: %s</string>
|
||||
<string name="settings_profile_template_summary">Pārvaldiet vietējo un tiešsaistes lietotņu profila veidni</string>
|
||||
<string name="app_profile_template_id_invalid">Nederīgs veidnes id</string>
|
||||
<string name="app_profile_template_id_exist">veidnes id jau pastāv!</string>
|
||||
<string name="app_profile_export_to_clipboard">Eksportēt starpliktuvē</string>
|
||||
<string name="app_profile_import_from_clipboard">Importēt no starpliktuves</string>
|
||||
<string name="app_profile_template_import_success">Importēts veiksmīgi</string>
|
||||
<string name="app_profile_template_sync">Sinhronizēt tiešsaistes veidnes</string>
|
||||
<string name="home">Sākums</string>
|
||||
<string name="home_not_installed">Nav ieinstalēts</string>
|
||||
<string name="home_click_to_install">Noklikšķiniet, lai instalētu</string>
|
||||
<string name="home_working">Darbojas</string>
|
||||
<string name="home_working_version">Versija: %d</string>
|
||||
<string name="home_superuser_count">Superlietotāji: %d</string>
|
||||
<string name="home_module_count">Moduļi: %d</string>
|
||||
<string name="home_unsupported">Neatbalstīts</string>
|
||||
<string name="home_unsupported_reason">KernelSU tagad atbalsta tikai GKI kodolus</string>
|
||||
<string name="home_kernel">Kodols</string>
|
||||
<string name="home_manager_version">Pārvaldnieka versija</string>
|
||||
<string name="home_fingerprint">Pirkstu nospiedums</string>
|
||||
<string name="home_selinux_status">SELinux statuss</string>
|
||||
<string name="selinux_status_enforcing">Izpildīšana</string>
|
||||
<string name="selinux_status_disabled">Atspējots</string>
|
||||
<string name="selinux_status_unknown">Nezināms</string>
|
||||
<string name="superuser">SuperLietotājs</string>
|
||||
<string name="module_failed_to_disable">Neizdevās atspējot moduli: %s</string>
|
||||
<string name="module_empty">Nav instalētu moduļu</string>
|
||||
<string name="module">Moduļi</string>
|
||||
<string name="uninstall">Atinstalēt</string>
|
||||
<string name="install">Instalēt</string>
|
||||
<string name="reboot">Restartēt</string>
|
||||
<string name="settings">Iestatījumi</string>
|
||||
<string name="reboot_userspace">Ātri restartēt</string>
|
||||
<string name="reboot_bootloader">Restartēt uz Bootloaderu</string>
|
||||
<string name="reboot_recovery">Restartēt uz Recovery</string>
|
||||
<string name="reboot_download">Restartēt uz Download</string>
|
||||
<string name="reboot_edl">Restartēt uz EDL</string>
|
||||
<string name="about">Par</string>
|
||||
<string name="module_uninstall_success">%s ir atinstalēts</string>
|
||||
<string name="module_uninstall_failed">Neizdevās atinstalēt: %s</string>
|
||||
<string name="module_author">Autors</string>
|
||||
<string name="refresh">Atjaunot</string>
|
||||
<string name="show_system_apps">Rādīt sistēmas lietotnes</string>
|
||||
<string name="hide_system_apps">Slēpt sistēmas lietotnes</string>
|
||||
<string name="send_log">Ziņot žurnālu</string>
|
||||
<string name="reboot_to_apply">Restartējiet, lai stātos spēkā</string>
|
||||
<string name="home_learn_kernelsu">Uzzināt par KernelSU</string>
|
||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||
<string name="home_click_to_learn_kernelsu">Uzzināt, kā instalēt KernelSU un izmantot moduļus</string>
|
||||
<string name="home_support_title">Atbalsti mūs</string>
|
||||
<string name="about_source_code">Skatiet avota kodu vietnē %1$s<br/>Pievienojies mūsu %2$s kanālam</string>
|
||||
<string name="profile_default">Noklusējums</string>
|
||||
<string name="profile_template">Veidne</string>
|
||||
<string name="profile_custom">Pielāgots</string>
|
||||
<string name="profile_name">Profila vārds</string>
|
||||
<string name="profile_namespace">Mount nosaukumvieta</string>
|
||||
<string name="profile_namespace_individual">Individuāls</string>
|
||||
<string name="profile_capabilities">Iespējas</string>
|
||||
<string name="profile_selinux_context">SELinux konteksts</string>
|
||||
<string name="profile_umount_modules">Atvienot moduļus</string>
|
||||
<string name="failed_to_update_app_profile">Neizdevās atjaunināt lietotnes profilu %s</string>
|
||||
<string name="settings_umount_modules_default">Pēc noklusējuma atvienot moduļus</string>
|
||||
<string name="settings_umount_modules_default_summary">Globālā noklusējuma vērtība vienumam “Atvienot moduļus” lietotņu profilos. Ja tas ir iespējots, lietojumprogrammām, kurām nav iestatīts profils, tiks noņemtas visas sistēmas moduļu modifikācijas.</string>
|
||||
<string name="profile_selinux_domain">Domēns</string>
|
||||
<string name="profile_selinux_rules">Noteikumi</string>
|
||||
<string name="module_update">Atjaunināt</string>
|
||||
<string name="module_downloading">Lejupielādē moduli: %s</string>
|
||||
<string name="module_start_downloading">Sākt lejupielādi: %s</string>
|
||||
<string name="new_version_available">Jaunā versija: %s ir pieejama, noklikšķiniet, lai atjauninātu</string>
|
||||
<string name="launch_app">Palaist</string>
|
||||
<string name="force_stop_app">Piespiedu apstāšana</string>
|
||||
<string name="restart_app">Restartēt aplikāciju</string>
|
||||
<string name="module_changelog">Izmaiņu žurnāls</string>
|
||||
<string name="settings_profile_template">Lietotnes profila veidne</string>
|
||||
<string name="app_profile_template_create">Izveidot veidni</string>
|
||||
<string name="app_profile_template_edit">Rediģēt veidni</string>
|
||||
<string name="app_profile_template_id">id</string>
|
||||
<string name="app_profile_template_name">Vārds</string>
|
||||
<string name="app_profile_template_description">Apraksts</string>
|
||||
<string name="app_profile_template_save">Saglabāt</string>
|
||||
<string name="app_profile_template_delete">Dzēst</string>
|
||||
<string name="app_profile_template_view">Skatīt veidni</string>
|
||||
<string name="app_profile_template_readonly">tikai lasīt</string>
|
||||
<string name="app_profile_import_export">Importēt/Eksportēt</string>
|
||||
<string name="app_profile_template_export_empty">Nevar atrast vietējo eksportējamo veidni!</string>
|
||||
<string name="app_profile_template_save_failed">Neizdevās saglabāt veidni</string>
|
||||
<string name="app_profile_template_import_empty">Starpliktuve ir tukša!</string>
|
||||
<string name="module_changelog_failed">Izmaiņu žurnāla iegūšana neizdevās: %s</string>
|
||||
<string name="selinux_status_permissive">Visatļautība</string>
|
||||
<string name="module_failed_to_enable">Neizdevās iespējot moduli: %s</string>
|
||||
<string name="module_install">Instalēt</string>
|
||||
<string name="module_uninstall_confirm">Vai tiešām vēlaties atinstalēt moduli %s?</string>
|
||||
<string name="module_version">Versija</string>
|
||||
<string name="module_overlay_fs_not_available">overlayfs nav pieejams, modulis nevar darboties!</string>
|
||||
<string name="safe_mode">Drošais režīms</string>
|
||||
<string name="module_magisk_conflict">Moduļi ir atspējoti, jo tie konfliktē ar Magisk!</string>
|
||||
<string name="home_support_content">KernelSU ir un vienmēr būs bezmaksas un atvērtā koda. Tomēr jūs varat parādīt mums, ka jums rūp, veicot ziedojumu.</string>
|
||||
<string name="profile_groups">Grupas</string>
|
||||
<string name="profile_namespace_global">Globāli</string>
|
||||
<string name="require_kernel_version">Pašreizējā KernelSU versija %d ir pārāk zema, lai pārvaldnieks darbotos pareizi. Lūdzu, atjauniniet uz versiju %d vai jaunāku!</string>
|
||||
</resources>
|
||||
@@ -17,10 +17,10 @@
|
||||
<string name="selinux_status_enforcing">Afgedwongen</string>
|
||||
<string name="selinux_status_permissive">Permissief</string>
|
||||
<string name="selinux_status_unknown">Niet gekend</string>
|
||||
<string name="superuser">Supergebruiker</string>
|
||||
<string name="superuser">SupergeBruiker</string>
|
||||
<string name="module_failed_to_enable">Mislukt om module in te schakelen: %s</string>
|
||||
<string name="module_failed_to_disable">Mislukt om module uit te schakelen: %s</string>
|
||||
<string name="module_empty">Geen module geïnstalleerd</string>
|
||||
<string name="module_empty">Geen geïnstalleerde modules</string>
|
||||
<string name="module">Module</string>
|
||||
<string name="uninstall">Verwijderen</string>
|
||||
<string name="module_install">Installeren</string>
|
||||
@@ -34,7 +34,7 @@
|
||||
<string name="reboot_edl">Herstart naar EDL</string>
|
||||
<string name="about">Over</string>
|
||||
<string name="module_uninstall_confirm">Zeker van het verwijderen van module %s?</string>
|
||||
<string name="module_uninstall_success">%s verwijderd</string>
|
||||
<string name="module_uninstall_success">%s is verwijderd</string>
|
||||
<string name="module_uninstall_failed">Mislukt om te verwijderen: %s</string>
|
||||
<string name="module_version">Versie</string>
|
||||
<string name="module_author">Auteur</string>
|
||||
@@ -42,7 +42,7 @@
|
||||
<string name="refresh">Vernieuwen</string>
|
||||
<string name="show_system_apps">Toon systeem apps</string>
|
||||
<string name="hide_system_apps">Verberg systeem apps</string>
|
||||
<string name="send_log">Stuur Log</string>
|
||||
<string name="send_log">Rapport Log</string>
|
||||
<string name="safe_mode">Safe mode</string>
|
||||
<string name="reboot_to_apply">Herstart om effect te hebben</string>
|
||||
<string name="module_magisk_conflict">Modules zijn uitgeschakeld omdat ze in conflict zijn met magisk!</string>
|
||||
@@ -73,11 +73,13 @@
|
||||
<string name="profile_selinux_rules">Regels</string>
|
||||
<string name="module_update">Update</string>
|
||||
<string name="module_downloading">Downloaden van module: %s</string>
|
||||
<string name="new_version_available">Nieuwe versie: %s is beschikbaar, klik om te downloaden</string>
|
||||
<string name="new_version_available">Nieuwe versie: %s is beschikbaar,klik om te upgraden</string>
|
||||
<string name="launch_app">Start</string>
|
||||
<string name="force_stop_app">Forceer Stop</string>
|
||||
<string name="restart_app">Herstart</string>
|
||||
<string name="module_start_downloading">Begin met downloaden: %s</string>
|
||||
<string name="failed_to_update_sepolicy">Kan SELinux-regels niet bijwerken voor: %s</string>
|
||||
<string name="require_kernel_version">De huidige KernelSU-versie %d is te laag om de manager correct te laten functioneren. Upgrade naar versie %d of hoger!</string>
|
||||
<string name="module_changelog">wijzigings logboek</string>
|
||||
<string name="settings_profile_template">App-profiel Sjabloon</string>
|
||||
</resources>
|
||||
@@ -13,8 +13,8 @@
|
||||
<string name="home_manager_version">Versão do gerenciador</string>
|
||||
<string name="home_fingerprint">Impressão digital</string>
|
||||
<string name="home_selinux_status">Status do SELinux</string>
|
||||
<string name="selinux_status_disabled">Desabilitado</string>
|
||||
<string name="selinux_status_enforcing">Execução</string>
|
||||
<string name="selinux_status_disabled">Desativado</string>
|
||||
<string name="selinux_status_enforcing">Impondo</string>
|
||||
<string name="selinux_status_permissive">Permissivo</string>
|
||||
<string name="selinux_status_unknown">Desconhecido</string>
|
||||
<string name="superuser">SuperUsuário</string>
|
||||
@@ -73,7 +73,7 @@
|
||||
<string name="profile_selinux_rules">Regras</string>
|
||||
<string name="module_update">Atualizar</string>
|
||||
<string name="module_downloading">Baixando módulo: %s</string>
|
||||
<string name="module_start_downloading">Iniciar o download: %s</string>
|
||||
<string name="module_start_downloading">Iniciar download: %s</string>
|
||||
<string name="new_version_available">Nova versão: %s está disponível, clique para atualizar</string>
|
||||
<string name="launch_app">Iniciar</string>
|
||||
<string name="force_stop_app">Forçar parada</string>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<resources>
|
||||
<string name="home_superuser_count">Superkorisnici</string>
|
||||
<string name="home_module_count">Moduli: %d</string>
|
||||
<string name="home_click_to_install">Kliknite da instalirate</string>
|
||||
<string name="home">дом</string>
|
||||
<string name="home_not_installed">Nije instalirano</string>
|
||||
<string name="home_working_version">Верзија: %д</string>
|
||||
<string name="home_working">рад</string>
|
||||
<string name="home_click_to_install">Додирните да бисте инсталирали</string>
|
||||
<string name="home">Почетна</string>
|
||||
<string name="home_not_installed">Није инсталирано</string>
|
||||
<string name="home_working_version">Верзија: %d</string>
|
||||
<string name="home_working">Ради</string>
|
||||
</resources>
|
||||
@@ -3,20 +3,20 @@
|
||||
<string name="app_name" translatable="false">KernelSU</string>
|
||||
<string name="home">Ana Sayfa</string>
|
||||
<string name="home_not_installed">Yüklenmedi</string>
|
||||
<string name="home_click_to_install">Yüklemek için tıkla</string>
|
||||
<string name="home_click_to_install">Yüklemek için tıklayın</string>
|
||||
<string name="home_working">Çalışıyor</string>
|
||||
<string name="home_working_version">Sürüm: %d</string>
|
||||
<string name="home_superuser_count">Süper kullanıcı: %d</string>
|
||||
<string name="home_superuser_count">Süper kullanıcılar: %d</string>
|
||||
<string name="home_module_count">Modüller: %d</string>
|
||||
<string name="home_unsupported">Desteklenmiyor</string>
|
||||
<string name="home_unsupported_reason">KernelSU şu an sadece GKI çekirdeklerini destekliyor</string>
|
||||
<string name="home_unsupported_reason">KernelSU şimdilik sadece GKI çekirdeklerini destekliyor</string>
|
||||
<string name="home_kernel">Çekirdek</string>
|
||||
<string name="home_manager_version">Uygulama sürümü</string>
|
||||
<string name="home_manager_version">Yönetici sürümü</string>
|
||||
<string name="home_fingerprint">Parmak izi</string>
|
||||
<string name="home_selinux_status">SELinux durumu</string>
|
||||
<string name="selinux_status_disabled">Devre dışı</string>
|
||||
<string name="selinux_status_enforcing">Etkin(Enforcing)</string>
|
||||
<string name="selinux_status_permissive">Boşta(Permissive)</string>
|
||||
<string name="selinux_status_enforcing">Etkin (Enforcing)</string>
|
||||
<string name="selinux_status_permissive">Serbest (Permissive)</string>
|
||||
<string name="selinux_status_unknown">Bilinmiyor</string>
|
||||
<string name="superuser">Süper kullanıcı</string>
|
||||
<string name="module_failed_to_enable">Modül etkinleştirilemedi: %s</string>
|
||||
@@ -39,7 +39,7 @@
|
||||
<string name="module_uninstall_failed">Kaldırma başarısız: %s</string>
|
||||
<string name="module_version">Sürüm</string>
|
||||
<string name="module_author">Geliştirici</string>
|
||||
<string name="module_overlay_fs_not_available">Overlayfs mevcut değil, modül çalışamaz!</string>
|
||||
<string name="module_overlay_fs_not_available">overlayfs mevcut değil, modül çalışamaz!</string>
|
||||
<string name="refresh">Yenile</string>
|
||||
<string name="show_system_apps">Sistem uygulamalarını göster</string>
|
||||
<string name="hide_system_apps">Sistem uygulamalarını gizle</string>
|
||||
@@ -51,8 +51,8 @@
|
||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||
<string name="home_click_to_learn_kernelsu">KernelSU\'nun nasıl kurulacağını ve modüllerin nasıl kullanılacağını öğrenin</string>
|
||||
<string name="home_support_title">Bizi destekleyin</string>
|
||||
<string name="home_support_content">KernelSU ücretsiz ve açık kaynaklı bir yazılımdır ve her zaman öyle kalacaktır. Ancak, bize bağış yaparak destek olduğunuzu gösterebilirsiniz.</string>
|
||||
<string name="about_source_code"><![CDATA[Kaynak kodunu görüntüle: %1$s<br/>%2$s kanalımıza katılın]]></string>
|
||||
<string name="home_support_content">KernelSU ücretsiz ve açık kaynaklı bir yazılımdır ve her zaman öyle kalacaktır. Ancak bağış yaparak bize destek olduğunuzu gösterebilirsiniz.</string>
|
||||
<string name="about_source_code">Kaynak kodunu görüntüleyin: %1$s<br/>%2$s kanalımıza katılın</string>
|
||||
<string name="profile" translatable="false">Uygulama profili</string>
|
||||
<string name="profile_default">Varsayılan</string>
|
||||
<string name="profile_template">Şablon</string>
|
||||
@@ -69,7 +69,7 @@
|
||||
<string name="failed_to_update_app_profile">%s için uygulama profili güncellenemedi.</string>
|
||||
<string name="require_kernel_version">Mevcut KernelSU sürümü %d, yöneticinin düzgün çalışabilmesi için çok düşük. Lütfen %d veya daha yüksek bir sürüme güncelleyin!</string>
|
||||
<string name="settings_umount_modules_default">Varsayılan olarak modüllerin bağlantısını kes</string>
|
||||
<string name="settings_umount_modules_default_summary">Uygulamalar için "Modüllerin bağlantısını kes" seçeneği için varsayılan değer. Etkinleştirilirse, profil ayarı yapılmamış uygulamalar için modüllerin sistemde yaptığı tüm değişiklikler kaldırılacaktır.</string>
|
||||
<string name="settings_umount_modules_default_summary">Uygulama profilindeki \"Modüllerin bağlantısını kes\" seçeneği için varsayılan değer. Etkinleştirilirse, profil ayarı yapılmamış uygulamalar için modüllerin sistemde yaptığı tüm değişiklikler kaldırılacaktır.</string>
|
||||
<string name="profile_umount_modules_summary">Bu seçeneği etkinleştirmek, KernelSU\'nun bu uygulama için modüller tarafından değiştirilen dosyaları geri yüklemesine izin verir.</string>
|
||||
<string name="profile_selinux_domain">İsim alanı</string>
|
||||
<string name="profile_selinux_rules">Kurallar</string>
|
||||
@@ -80,28 +80,28 @@
|
||||
<string name="launch_app">Uygulamayı başlat</string>
|
||||
<string name="force_stop_app">Uygulamayı durmaya zorla</string>
|
||||
<string name="restart_app">Uygulamayı yeniden başlat</string>
|
||||
<string name="failed_to_update_sepolicy">Kuralların güncellenmesi başarısız oldu: %s</string>
|
||||
<string name="failed_to_update_sepolicy">%s için SELinux kuralları güncellenemedi.</string>
|
||||
<string name="module_changelog">Değişiklik geçmişi</string>
|
||||
<string name="settings_profile_template">Uygulama profili şablonu</string>
|
||||
<string name="settings_profile_template_summary">Yerel ve çevrimiçi uygulama profil şablonlarını yönetin</string>
|
||||
<string name="settings_profile_template_summary">Yerel ve çevrimiçi uygulama profili şablonlarını yönetin</string>
|
||||
<string name="app_profile_template_create">Şablon oluştur</string>
|
||||
<string name="app_profile_template_edit">Şablonu düzenle</string>
|
||||
<string name="app_profile_template_id">Kimlik</string>
|
||||
<string name="app_profile_template_id_invalid">Geçersiz şablon kimliği</string>
|
||||
<string name="app_profile_template_name">Şablon adı</string>
|
||||
<string name="app_profile_template_name">İsim</string>
|
||||
<string name="app_profile_template_description">Açıklama</string>
|
||||
<string name="app_profile_template_save">Kaydet</string>
|
||||
<string name="app_profile_template_delete">Sil</string>
|
||||
<string name="app_profile_template_view">Şablonu görüntüle</string>
|
||||
<string name="app_profile_template_readonly">Salt okunur</string>
|
||||
<string name="app_profile_template_id_exist">Şablon kimliği zaten var!</string>
|
||||
<string name="app_profile_template_id_exist">Şablon kimliği zaten mevcut!</string>
|
||||
<string name="app_profile_import_export">İçe aktar/Dışa aktar</string>
|
||||
<string name="app_profile_import_from_clipboard">Panodan içe aktar</string>
|
||||
<string name="app_profile_export_to_clipboard">Panodan dışa aktar</string>
|
||||
<string name="app_profile_template_export_empty">Yerel şablon bulunamadı, dışa aktarılamıyor!</string>
|
||||
<string name="app_profile_template_export_empty">Dışa aktarmak için yerel şablon bulunamadı!</string>
|
||||
<string name="app_profile_template_import_success">Başarıyla içe aktarıldı</string>
|
||||
<string name="app_profile_template_sync">Çevrimiçi şablonları senkronize et</string>
|
||||
<string name="app_profile_template_save_failed">Şablon kaydetme başarısız oldu</string>
|
||||
<string name="app_profile_template_import_empty">Panolar boş!</string>
|
||||
<string name="app_profile_template_save_failed">Şablon kaydedilemedi</string>
|
||||
<string name="app_profile_template_import_empty">Pano boş!</string>
|
||||
<string name="module_changelog_failed">Değişiklik geçmişi alınamadı: %s</string>
|
||||
</resources>
|
||||
@@ -8,7 +8,7 @@
|
||||
<string name="home_superuser_count">Суперкористувачі: %d</string>
|
||||
<string name="home_module_count">Модулі: %d</string>
|
||||
<string name="home_unsupported">Не підтримується</string>
|
||||
<string name="home_unsupported_reason">KernelSU підтримує лише ядра GKI</string>
|
||||
<string name="home_unsupported_reason">KernelSU підтримує лише GKI ядра на данний момент</string>
|
||||
<string name="home_kernel">Ядро</string>
|
||||
<string name="home_manager_version">Версія менеджера</string>
|
||||
<string name="home_fingerprint">Відбиток</string>
|
||||
@@ -17,7 +17,7 @@
|
||||
<string name="selinux_status_enforcing">Примусовий</string>
|
||||
<string name="selinux_status_permissive">Дозвільний</string>
|
||||
<string name="selinux_status_unknown">Невідомо</string>
|
||||
<string name="superuser">Суперкористувачі</string>
|
||||
<string name="superuser">Суперкористувач</string>
|
||||
<string name="module_failed_to_enable">Не вдалося ввімкнути модуль: %s</string>
|
||||
<string name="module_failed_to_disable">Не вдалося вимкнути модуль: %s</string>
|
||||
<string name="module_empty">Немає встановлених модулів</string>
|
||||
@@ -39,10 +39,10 @@
|
||||
<string name="module_version">Версія</string>
|
||||
<string name="module_author">Автор</string>
|
||||
<string name="module_overlay_fs_not_available">overlayfs не доступний, модуль не може працювати!</string>
|
||||
<string name="refresh">освіжати(Оновити)</string>
|
||||
<string name="refresh">Освіжати(Оновити)</string>
|
||||
<string name="show_system_apps">Показати системні додатки</string>
|
||||
<string name="hide_system_apps">Сховати системні додатки</string>
|
||||
<string name="send_log">Надіслати лог</string>
|
||||
<string name="send_log">Надіслати логи</string>
|
||||
<string name="safe_mode">Безпечний режим</string>
|
||||
<string name="reboot_to_apply">Перезавантажте, щоб застосувати</string>
|
||||
<string name="module_magisk_conflict">Модулі вимкнено, оскільки вони конфліктують із модулями Magisk!</string>
|
||||
@@ -57,7 +57,7 @@
|
||||
<string name="profile_template">Шаблон</string>
|
||||
<string name="profile_custom">Власний</string>
|
||||
<string name="profile_name">Назва профілю</string>
|
||||
<string name="profile_namespace">Монтування простору імен</string>
|
||||
<string name="profile_namespace">Змонтувати простір імен</string>
|
||||
<string name="profile_namespace_inherited">Наслідуваний</string>
|
||||
<string name="profile_namespace_global">Глобальний</string>
|
||||
<string name="profile_namespace_individual">Індивідуальний</string>
|
||||
@@ -81,4 +81,26 @@
|
||||
<string name="failed_to_update_sepolicy">Не вдалося оновити правила SELinux для: %s</string>
|
||||
<string name="module_changelog">Журнал змін</string>
|
||||
<string name="require_kernel_version">Поточна версія KernelSU %d занадто низька, щоб менеджер міг працювати належним чином. Будь ласка, оновіть до версії %d або вище!</string>
|
||||
<string name="app_profile_template_import_success">Успішно імпортовано</string>
|
||||
<string name="app_profile_export_to_clipboard">Експортувати в буфер обміну</string>
|
||||
<string name="app_profile_template_export_empty">Неможливо знайти локальні шаблони для експорту!</string>
|
||||
<string name="app_profile_template_id_exist">Шаблон з таким ідентифікатором вже існує!</string>
|
||||
<string name="app_profile_import_from_clipboard">Імпортувати з буферу обміну</string>
|
||||
<string name="module_changelog_failed">Невдача при завантаженні списку змін: %s</string>
|
||||
<string name="app_profile_template_name">Ім\'я</string>
|
||||
<string name="app_profile_template_id_invalid">Невірний ідентифікатор шаблону</string>
|
||||
<string name="app_profile_template_sync">Синхронізувати мережеві шаблони</string>
|
||||
<string name="app_profile_template_create">Створити шаблон</string>
|
||||
<string name="app_profile_template_readonly">Тільки читання</string>
|
||||
<string name="app_profile_import_export">Імпорт/Експорт</string>
|
||||
<string name="app_profile_template_save_failed">Помилка при збереженні шаблону</string>
|
||||
<string name="app_profile_template_edit">Редагувати шаблон</string>
|
||||
<string name="app_profile_template_id">Ідентифікатор</string>
|
||||
<string name="settings_profile_template">Шаблон Профілю Додатку</string>
|
||||
<string name="app_profile_template_description">Опис</string>
|
||||
<string name="app_profile_template_save">Зберегти</string>
|
||||
<string name="settings_profile_template_summary">Керувати локальними та мережевими шаблонами профілів додатків</string>
|
||||
<string name="app_profile_template_delete">Видалити</string>
|
||||
<string name="app_profile_template_import_empty">Буфер обміну пустий!</string>
|
||||
<string name="app_profile_template_view">Переглянути шаблон</string>
|
||||
</resources>
|
||||
@@ -21,7 +21,7 @@
|
||||
<string name="about_source_code"><![CDATA[Xem mã nguồn tại %1$s<br/>Tham gia kênh %2$s của chúng tôi]]></string>
|
||||
<string name="module_magisk_conflict">Các mô-đun bị vô hiệu hóa vì chúng xung đột với Magisk!</string>
|
||||
<string name="module_uninstall_confirm">Bạn có muốn gỡ cài đặt mô-đun %s không\?</string>
|
||||
<string name="send_log">Gửi nhật ký</string>
|
||||
<string name="send_log">báo cáo nhật ký</string>
|
||||
<string name="home">Trang chủ</string>
|
||||
<string name="home_not_installed">Chưa cài đặt</string>
|
||||
<string name="home_click_to_install">Nhấn để cài dặt</string>
|
||||
@@ -101,4 +101,6 @@
|
||||
<string name="app_profile_template_delete">Xóa</string>
|
||||
<string name="app_profile_template_import_empty">Bảng tạm trống!</string>
|
||||
<string name="app_profile_template_view">Xem Bản Mẫu</string>
|
||||
<string name="app_profile_template_readonly">chỉ đọc</string>
|
||||
<string name="app_profile_template_id">id</string>
|
||||
</resources>
|
||||
@@ -85,7 +85,7 @@
|
||||
<string name="app_profile_template_create">创建模版</string>
|
||||
<string name="app_profile_template_edit">编辑模版</string>
|
||||
<string name="app_profile_template_id">模版 id</string>
|
||||
<string name="app_profile_template_id_invalid">模版 id 不合法!</string>
|
||||
<string name="app_profile_template_id_invalid">模版 id 不合法</string>
|
||||
<string name="app_profile_template_name">名字</string>
|
||||
<string name="app_profile_template_description">描述</string>
|
||||
<string name="app_profile_template_save">保存</string>
|
||||
|
||||
@@ -80,4 +80,26 @@
|
||||
<string name="restart_app">重新啟動</string>
|
||||
<string name="failed_to_update_sepolicy">無法為 %s 更新 SELinux 規則</string>
|
||||
<string name="module_changelog">日志</string>
|
||||
<string name="app_profile_template_import_success">導出成功</string>
|
||||
<string name="app_profile_export_to_clipboard">導出到剪貼板</string>
|
||||
<string name="app_profile_template_export_empty">沒有本地模板可以導出!</string>
|
||||
<string name="app_profile_template_id_exist">模板id已存在!</string>
|
||||
<string name="app_profile_import_from_clipboard">從剪貼板導入</string>
|
||||
<string name="module_changelog_failed">獲取更新日誌失敗:%s</string>
|
||||
<string name="app_profile_template_name">名字</string>
|
||||
<string name="app_profile_template_id_invalid">模板id不合法</string>
|
||||
<string name="app_profile_template_sync">同步在線規則</string>
|
||||
<string name="app_profile_template_create">創建模板</string>
|
||||
<string name="app_profile_template_readonly">只讀</string>
|
||||
<string name="app_profile_import_export">導入/導出</string>
|
||||
<string name="app_profile_template_save_failed">模板保存失敗</string>
|
||||
<string name="app_profile_template_edit">編輯模板</string>
|
||||
<string name="app_profile_template_id">模板id</string>
|
||||
<string name="settings_profile_template">App Profile模板</string>
|
||||
<string name="app_profile_template_description">描述</string>
|
||||
<string name="app_profile_template_save">保存</string>
|
||||
<string name="settings_profile_template_summary">管理本地和在線的App Profile模板</string>
|
||||
<string name="app_profile_template_delete">刪除</string>
|
||||
<string name="app_profile_template_import_empty">剪貼板爲空!</string>
|
||||
<string name="app_profile_template_view">查看模板</string>
|
||||
</resources>
|
||||
@@ -80,4 +80,26 @@
|
||||
<string name="force_stop_app">強制停止</string>
|
||||
<string name="failed_to_update_sepolicy">無法為 %s 更新 SELinux</string>
|
||||
<string name="module_changelog">變更記錄</string>
|
||||
<string name="app_profile_template_id_invalid">模板 id 不合法</string>
|
||||
<string name="app_profile_template_create">創建模板</string>
|
||||
<string name="app_profile_template_edit">編輯模板</string>
|
||||
<string name="app_profile_template_id">模板 id</string>
|
||||
<string name="settings_profile_template">App Profile 模板</string>
|
||||
<string name="settings_profile_template_summary">管理本地和在線的App Profile模板</string>
|
||||
<string name="app_profile_template_import_success">成功匯出</string>
|
||||
<string name="app_profile_export_to_clipboard">匯出至剪貼簿</string>
|
||||
<string name="app_profile_template_export_empty">本地沒有模板可匯出!</string>
|
||||
<string name="app_profile_template_id_exist">模板 ID 已存在!</string>
|
||||
<string name="app_profile_import_from_clipboard">從剪貼簿匯入</string>
|
||||
<string name="module_changelog_failed">獲取更新日誌失敗:%s</string>
|
||||
<string name="app_profile_template_name">名稱</string>
|
||||
<string name="app_profile_template_sync">與線上規則同步</string>
|
||||
<string name="app_profile_template_readonly">只讀</string>
|
||||
<string name="app_profile_import_export">匯出 / 匯入</string>
|
||||
<string name="app_profile_template_save_failed">模板儲存失敗</string>
|
||||
<string name="app_profile_template_description">描述</string>
|
||||
<string name="app_profile_template_save">儲存</string>
|
||||
<string name="app_profile_template_delete">刪除</string>
|
||||
<string name="app_profile_template_import_empty">剪貼簿沒有內容!</string>
|
||||
<string name="app_profile_template_view">檢查模板</string>
|
||||
</resources>
|
||||
@@ -7,7 +7,7 @@ lifecycle = "2.6.1"
|
||||
accompanist = "0.30.1"
|
||||
navigation = "2.6.0"
|
||||
compose-destination = "1.9.42-beta"
|
||||
libsu = "5.0.5"
|
||||
libsu = "5.2.1"
|
||||
sheets-compose-dialogs = "1.2.0"
|
||||
markdown = "4.6.2"
|
||||
|
||||
|
||||
89
scripts/allowlist.bt
Normal file
89
scripts/allowlist.bt
Normal file
@@ -0,0 +1,89 @@
|
||||
// Define constants as per the provided structure.
|
||||
#define KSU_MAX_PACKAGE_NAME 256
|
||||
#define KSU_MAX_GROUPS 32
|
||||
#define KSU_SELINUX_DOMAIN 64
|
||||
|
||||
// Define the root_profile structure with padding for 64-bit alignment.
|
||||
struct root_profile {
|
||||
uint32 uid;
|
||||
uint32 gid;
|
||||
|
||||
uint32 groups_count;
|
||||
uint32 groups[KSU_MAX_GROUPS];
|
||||
char padding1[4]; // Padding for 64-bit alignment.
|
||||
|
||||
struct {
|
||||
uint64 effective;
|
||||
uint64 permitted;
|
||||
uint64 inheritable;
|
||||
} capabilities;
|
||||
|
||||
char selinux_domain[KSU_SELINUX_DOMAIN];
|
||||
|
||||
uint32 namespaces;
|
||||
char padding2[4]; // Padding for 64-bit alignment.
|
||||
};
|
||||
|
||||
// Define the non_root_profile structure with padding for 64-bit alignment.
|
||||
struct non_root_profile {
|
||||
byte umount_modules;
|
||||
char padding[7]; // Padding to make the total size a multiple of 8.
|
||||
};
|
||||
|
||||
// Define the rp_config structure with padding for 64-bit alignment.
|
||||
struct rp_config_t {
|
||||
byte use_default;
|
||||
|
||||
char template_name[KSU_MAX_PACKAGE_NAME];
|
||||
char padding[7]; // Padding to make the total size a multiple of 8.
|
||||
|
||||
struct root_profile profile;
|
||||
};
|
||||
|
||||
// Define the nrp_config structure with padding for 64-bit alignment.
|
||||
struct nrp_config_t {
|
||||
byte use_default;
|
||||
char padding1[7]; // Padding to make the total size a multiple of 8.
|
||||
|
||||
struct non_root_profile profile;
|
||||
char padding2[488]; // Padding to align the union
|
||||
};
|
||||
|
||||
// Define the main app_profile structure
|
||||
typedef struct {
|
||||
uint32 version;
|
||||
char key[KSU_MAX_PACKAGE_NAME];
|
||||
int32 current_uid;
|
||||
int64 allow_su;
|
||||
|
||||
// Based on allow_su, decide which profile to use
|
||||
if (allow_su != 0) {
|
||||
rp_config_t rp_config;
|
||||
} else {
|
||||
nrp_config_t nrp_config;
|
||||
}
|
||||
|
||||
} app_profile;
|
||||
|
||||
// Define the file header with magic number and version
|
||||
typedef struct {
|
||||
uint32 magic;
|
||||
uint32 version;
|
||||
} file_header;
|
||||
|
||||
// Main entry for parsing the file
|
||||
file_header header;
|
||||
|
||||
if (header.magic != 0x7f4b5355) {
|
||||
Printf("Invalid file magic number.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
FSeek(8); // Skip the header
|
||||
|
||||
|
||||
// Continually read app_profile instances until end of file
|
||||
while (!FEof()) {
|
||||
app_profile profile;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
userspace/ksud/bin/x86_64/busybox
Normal file → Executable file
BIN
userspace/ksud/bin/x86_64/busybox
Normal file → Executable file
Binary file not shown.
Binary file not shown.
@@ -17,11 +17,12 @@ struct Asset;
|
||||
#[folder = "bin/x86_64"]
|
||||
struct Asset;
|
||||
|
||||
pub fn ensure_binaries() -> Result<()> {
|
||||
pub fn ensure_binaries(ignore_if_exist: bool) -> Result<()> {
|
||||
for file in Asset::iter() {
|
||||
utils::ensure_binary(
|
||||
format!("{BINARY_DIR}{file}"),
|
||||
&Asset::get(&file).unwrap().data,
|
||||
ignore_if_exist,
|
||||
)?
|
||||
}
|
||||
Ok(())
|
||||
|
||||
@@ -25,6 +25,9 @@ pub const MODULE_UPDATE_TMP_IMG: &str = concatcp!(WORKING_DIR, "update_tmp.img")
|
||||
// warning: this directory should not change, or you need to change the code in module_installer.sh!!!
|
||||
pub const MODULE_UPDATE_TMP_DIR: &str = concatcp!(ADB_DIR, "modules_update/");
|
||||
|
||||
pub const TEMP_DIR: &str = "/debug_ramdisk";
|
||||
pub const TEMP_DIR_LEGACY: &str = "/sbin";
|
||||
|
||||
pub const DISABLE_FILE_NAME: &str = "disable";
|
||||
pub const UPDATE_FILE_NAME: &str = "update";
|
||||
pub const REMOVE_FILE_NAME: &str = "remove";
|
||||
|
||||
@@ -126,7 +126,7 @@ pub fn on_post_data_fs() -> Result<()> {
|
||||
// we should clean the module mount point if it exists
|
||||
ensure_clean_dir(module_dir)?;
|
||||
|
||||
assets::ensure_binaries().with_context(|| "Failed to extract bin assets")?;
|
||||
assets::ensure_binaries(true).with_context(|| "Failed to extract bin assets")?;
|
||||
|
||||
if Path::new(module_update_img).exists() {
|
||||
if module_update_flag.exists() {
|
||||
@@ -178,6 +178,11 @@ pub fn on_post_data_fs() -> Result<()> {
|
||||
warn!("apply root profile sepolicy failed: {}", e);
|
||||
}
|
||||
|
||||
// mount temp dir
|
||||
if let Err(e) = mount::mount_tmpfs(utils::get_tmp_path()) {
|
||||
warn!("do temp dir mount failed: {}", e);
|
||||
}
|
||||
|
||||
// exec modules post-fs-data scripts
|
||||
// TODO: Add timeout
|
||||
if let Err(e) = crate::module::exec_stage_script("post-fs-data", true) {
|
||||
@@ -254,7 +259,7 @@ pub fn install() -> Result<()> {
|
||||
std::fs::copy("/proc/self/exe", defs::DAEMON_PATH)?;
|
||||
restorecon::lsetfilecon(defs::DAEMON_PATH, restorecon::ADB_CON)?;
|
||||
// install binary assets
|
||||
assets::ensure_binaries().with_context(|| "Failed to extract assets")?;
|
||||
assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?;
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
link_ksud_to_bin()?;
|
||||
|
||||
@@ -27,11 +27,11 @@ grep_cmdline() {
|
||||
}
|
||||
|
||||
grep_prop() {
|
||||
local REGEX="s/^$1=//p"
|
||||
local REGEX="s/$1=//p"
|
||||
shift
|
||||
local FILES=$@
|
||||
[ -z "$FILES" ] && FILES='/system/build.prop'
|
||||
cat $FILES 2>/dev/null | dos2unix | sed -n "$REGEX" | head -n 1
|
||||
cat $FILES 2>/dev/null | dos2unix | sed -n "$REGEX" | head -n 1 | xargs
|
||||
}
|
||||
|
||||
grep_get_prop() {
|
||||
|
||||
@@ -58,10 +58,12 @@ fn print_usage(program: &str, opts: Options) {
|
||||
print!("{}", opts.usage(&brief));
|
||||
}
|
||||
|
||||
fn set_identity(uid: u32, gid: u32) {
|
||||
fn set_identity(uid: u32, gid: u32, groups: &[u32]) {
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
unsafe {
|
||||
libc::seteuid(uid);
|
||||
if !groups.is_empty() {
|
||||
libc::setgroups(groups.len(), groups.as_ptr());
|
||||
}
|
||||
libc::setresgid(gid, gid, gid);
|
||||
libc::setresuid(uid, uid, uid);
|
||||
}
|
||||
@@ -75,6 +77,8 @@ pub fn root_shell() -> Result<()> {
|
||||
#[cfg(unix)]
|
||||
pub fn root_shell() -> Result<()> {
|
||||
// we are root now, this was set in kernel!
|
||||
|
||||
use anyhow::anyhow;
|
||||
let env_args: Vec<String> = std::env::args().collect();
|
||||
let program = env_args[0].clone();
|
||||
let args = env_args
|
||||
@@ -117,6 +121,13 @@ pub fn root_shell() -> Result<()> {
|
||||
"mount-master",
|
||||
"force run in the global mount namespace",
|
||||
);
|
||||
opts.optopt("g", "group", "Specify the primary group", "GROUP");
|
||||
opts.optmulti(
|
||||
"G",
|
||||
"supp-group",
|
||||
"Specify a supplementary group. The first specified supplementary group is also used as a primary group if the option -g is not specified.",
|
||||
"GROUP",
|
||||
);
|
||||
|
||||
// Replace -cn with -z, -mm with -M for supporting getopt_long
|
||||
let args = args
|
||||
@@ -161,6 +172,23 @@ pub fn root_shell() -> Result<()> {
|
||||
let preserve_env = matches.opt_present("p");
|
||||
let mount_master = matches.opt_present("M");
|
||||
|
||||
let groups = matches
|
||||
.opt_strs("G")
|
||||
.into_iter()
|
||||
.map(|g| g.parse::<u32>().map_err(|_| anyhow!("Invalid GID: {}", g)))
|
||||
.collect::<Result<Vec<_>, _>>()?;
|
||||
|
||||
// if -g provided, use it.
|
||||
let mut gid = matches
|
||||
.opt_str("g")
|
||||
.map(|g| g.parse::<u32>().map_err(|_| anyhow!("Invalid GID: {}", g)))
|
||||
.transpose()?;
|
||||
|
||||
// otherwise, use the first gid of groups.
|
||||
if gid.is_none() && !groups.is_empty() {
|
||||
gid = Some(groups[0]);
|
||||
}
|
||||
|
||||
// we've make sure that -c is the last option and it already contains the whole command, no need to construct it again
|
||||
let args = matches
|
||||
.opt_str("c")
|
||||
@@ -175,7 +203,6 @@ pub fn root_shell() -> Result<()> {
|
||||
|
||||
// use current uid if no user specified, these has been done in kernel!
|
||||
let mut uid = unsafe { libc::getuid() };
|
||||
let gid = unsafe { libc::getgid() };
|
||||
if free_idx < matches.free.len() {
|
||||
let name = &matches.free[free_idx];
|
||||
uid = unsafe {
|
||||
@@ -191,6 +218,8 @@ pub fn root_shell() -> Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
// if there is no gid provided, use uid.
|
||||
let gid = gid.unwrap_or(uid);
|
||||
// https://github.com/topjohnwu/Magisk/blob/master/native/src/su/su_daemon.cpp#L408
|
||||
let arg0 = if is_login { "-" } else { &shell };
|
||||
|
||||
@@ -241,7 +270,7 @@ pub fn root_shell() -> Result<()> {
|
||||
let _ = utils::unshare_mnt_ns();
|
||||
}
|
||||
|
||||
set_identity(uid, gid);
|
||||
set_identity(uid, gid, &groups);
|
||||
|
||||
std::result::Result::Ok(())
|
||||
})
|
||||
|
||||
@@ -330,7 +330,7 @@ fn _install_module(zip: &str) -> Result<()> {
|
||||
// print banner
|
||||
println!(include_str!("banner"));
|
||||
|
||||
assets::ensure_binaries().with_context(|| "Failed to extract assets")?;
|
||||
assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?;
|
||||
|
||||
// first check if workding dir is usable
|
||||
ensure_dir_exists(defs::WORKING_DIR).with_context(|| "Failed to create working dir")?;
|
||||
@@ -354,6 +354,7 @@ fn _install_module(zip: &str) -> Result<()> {
|
||||
let Some(module_id) = module_prop.get("id") else {
|
||||
bail!("module id not found in module.prop!");
|
||||
};
|
||||
let module_id = module_id.trim();
|
||||
|
||||
let modules_img = Path::new(defs::MODULE_IMG);
|
||||
let modules_update_img = Path::new(defs::MODULE_UPDATE_IMG);
|
||||
|
||||
@@ -161,6 +161,16 @@ fn mount_overlayfs(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
pub fn mount_tmpfs(dest: impl AsRef<Path>) -> Result<()> {
|
||||
info!("mount tmpfs on {}", dest.as_ref().display());
|
||||
Mount::builder()
|
||||
.fstype(FilesystemType::from("tmpfs"))
|
||||
.mount(KSU_OVERLAY_SOURCE, dest.as_ref())
|
||||
.with_context(|| format!("mount tmpfs on {} failed", dest.as_ref().display()))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
fn bind_mount(from: impl AsRef<Path>, to: impl AsRef<Path>) -> Result<()> {
|
||||
info!(
|
||||
@@ -276,3 +286,8 @@ pub fn umount_dir(_src: &str) -> Result<()> {
|
||||
pub fn mount_overlay(_dest: &String, _lower_dirs: &Vec<String>) -> Result<()> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_os = "linux", target_os = "android")))]
|
||||
pub fn mount_tmpfs(_dest: impl AsRef<Path>) -> Result<()> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
use anyhow::{bail, Context, Error, Ok, Result};
|
||||
use std::{
|
||||
fs::{create_dir_all, write, File, OpenOptions},
|
||||
io::{ErrorKind::AlreadyExists, Write},
|
||||
fs::{create_dir_all, remove_file, write, File, OpenOptions},
|
||||
io::{ErrorKind::AlreadyExists, ErrorKind::NotFound, Write},
|
||||
path::Path,
|
||||
};
|
||||
|
||||
use crate::defs;
|
||||
use std::fs::metadata;
|
||||
#[allow(unused_imports)]
|
||||
use std::fs::{set_permissions, Permissions};
|
||||
#[cfg(unix)]
|
||||
@@ -45,8 +47,12 @@ pub fn ensure_dir_exists<T: AsRef<Path>>(dir: T) -> Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn ensure_binary<T: AsRef<Path>>(path: T, contents: &[u8]) -> Result<()> {
|
||||
if path.as_ref().exists() {
|
||||
pub fn ensure_binary<T: AsRef<Path>>(
|
||||
path: T,
|
||||
contents: &[u8],
|
||||
ignore_if_exist: bool,
|
||||
) -> Result<()> {
|
||||
if ignore_if_exist && path.as_ref().exists() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
@@ -57,6 +63,13 @@ pub fn ensure_binary<T: AsRef<Path>>(path: T, contents: &[u8]) -> Result<()> {
|
||||
)
|
||||
})?)?;
|
||||
|
||||
if let Err(e) = remove_file(path.as_ref()) {
|
||||
if e.kind() != NotFound {
|
||||
return Err(Error::from(e))
|
||||
.with_context(|| format!("failed to unlink {}", path.as_ref().display()));
|
||||
}
|
||||
}
|
||||
|
||||
write(&path, contents)?;
|
||||
#[cfg(unix)]
|
||||
set_permissions(&path, Permissions::from_mode(0o755))?;
|
||||
@@ -159,3 +172,13 @@ pub fn umask(_mask: u32) {
|
||||
pub fn has_magisk() -> bool {
|
||||
which::which("magisk").is_ok()
|
||||
}
|
||||
|
||||
pub fn get_tmp_path() -> &'static str {
|
||||
if metadata(defs::TEMP_DIR_LEGACY).is_ok() {
|
||||
return defs::TEMP_DIR_LEGACY;
|
||||
}
|
||||
if metadata(defs::TEMP_DIR).is_ok() {
|
||||
return defs::TEMP_DIR;
|
||||
}
|
||||
""
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ function sidebarGuide() {
|
||||
text: 'Guide',
|
||||
items: [
|
||||
{ text: 'What is KernelSU?', link: '/guide/what-is-kernelsu' },
|
||||
{ text: 'Difference with Magisk', link: '/guide/difference-with-magisk' },
|
||||
{ text: 'Installation', link: '/guide/installation' },
|
||||
{ text: 'How to build?', link: '/guide/how-to-build' },
|
||||
{ text: 'Intergrate for non-GKI devices', link: '/guide/how-to-integrate-for-non-gki'},
|
||||
|
||||
@@ -45,6 +45,7 @@ function sidebarGuide() {
|
||||
text: 'Guia',
|
||||
items: [
|
||||
{ text: 'O que é KernelSU?', link: '/pt_BR/guide/what-is-kernelsu' },
|
||||
{ text: 'Diferença com Magisk', link: '/pt_BR/guide/difference-with-magisk' },
|
||||
{ text: 'Instalação', link: '/pt_BR/guide/installation' },
|
||||
{ text: 'Como construir?', link: '/pt_BR/guide/how-to-build' },
|
||||
{ text: 'Integração para dispositivos não GKI', link: '/pt_BR/guide/how-to-integrate-for-non-gki'},
|
||||
|
||||
@@ -63,6 +63,6 @@ GKI1 is completely different from GKI2, you must compile kernel by yourself.
|
||||
|
||||
We do not recommend you to modify the system partition directly. You should use the [module](module.md) to modify it systemlessly. If you insist on doing this, check [magisk_overlayfs](https://github.com/HuskyDG/magic_overlayfs).
|
||||
|
||||
## Can KernelSU modify hosts? How can i use AdAday?
|
||||
## Can KernelSU modify hosts? How can i use AdAway?
|
||||
|
||||
Of course. But KernelSU doesn't have builtin hosts support, you can install [systemless-hosts](https://github.com/symbuzzer/systemless-hosts-KernelSU-module) to do it.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Check if your device is supported
|
||||
|
||||
Download KernelSU manager APP from [GitHub Releases](https://github.com/tiann/KernelSU/releases) or [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu), and install it to your device:
|
||||
Download KernelSU manager APP from [GitHub Releases](https://github.com/tiann/KernelSU/releases) and install it to your device:
|
||||
|
||||
- If the app shows `Unsupported`, it means **You should compile the kernel yourself**, KernelSU won't and never provide a boot image for you to flash.
|
||||
- If the app shows `Not installed`, then your devices is officially supported by KernelSU.
|
||||
@@ -43,6 +43,12 @@ w .x .y -zzz -k -something
|
||||
Note that the SubLevel in the kernel version is not part of the KMI! That means that `5.10.101-android12-9-g30979850fc20` has the same KMI as `5.10.137-android12-9-g30979850fc20`!
|
||||
:::
|
||||
|
||||
### Security patch level {#security-patch-level}
|
||||
|
||||
Newer Android devices may have anti-rollback mechanisms in place that do not allow flashing a boot image with an old security patch level. For example, if your device kernel is `5.10.101-android12-9-g30979850fc20`, its security patch is `2023-11`; even if you flash the kernel consistent with the kernel KMI, if the security patch level is older than `2023- 11`(such as `2023-06`), then it may cause bootloop.
|
||||
|
||||
Therefore, kernels with latest security patch levels are preferred while maintaining KMI consistency.
|
||||
|
||||
### Kernel version vs. Android version
|
||||
|
||||
Please note: **Kernel version and Android version are not necessarily the same!**
|
||||
@@ -53,51 +59,22 @@ If you find that your kernel version is `android12-5.10.101`, but your Android s
|
||||
|
||||
There are several installation methods for KernelSU, each suitable for a different scenario, so please choose as needed.
|
||||
|
||||
1. Install with custom Recovery (e.g. TWRP)
|
||||
2. Install with a kernel flash app, such as Franco Kernel Manager
|
||||
3. Install with fastboot using the boot.img provided by KernelSU
|
||||
4. Repair the boot.img manually and install it
|
||||
|
||||
## Install with custom Recovery
|
||||
|
||||
Prerequisite: Your device must have a custom Recovery, such as TWRP; if not or only official Recovery is available, use another method.
|
||||
|
||||
Step:
|
||||
|
||||
1. From the [Release page](https://github.com/tiann/KernelSU/releases) of KernelSU, download the zip package starting with AnyKernel3 that matches your phone version; for example, the phone kernel version is `android12-5.10. 66`, then you should download the file `AnyKernel3-android12-5.10.66_yyyy-MM.zip` (where `yyyy` is the year and `MM` is the month).
|
||||
2. Reboot the phone into TWRP.
|
||||
3. Use adb to put AnyKernel3-*.zip into the phone /sdcard and choose to install it in the TWRP GUI; or you can directly `adb sideload AnyKernel-*.zip` to install.
|
||||
|
||||
PS. This method is suitable for any installation (not limited to initial installation or subsequent upgrades), as long as you use TWRP.
|
||||
|
||||
## Install with Kernel Flasher
|
||||
|
||||
Prerequisite: Your device must be rooted. For example, you have installed Magisk to get root, or you have installed an old version of KernelSU and need to upgrade to another version of KernelSU; if your device is not rooted, please try other methods.
|
||||
|
||||
Step:
|
||||
|
||||
1. Download the AnyKernel3 zip; refer to the section *Installing with Custom Recovery* for downloading instructions.
|
||||
2. Open the Kernel Flash App and use the provided AnyKernel3 zip to flash.
|
||||
|
||||
If you haven't used the Kernel flash App before, the following are the more popular ones.
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
PS. This method is more convenient when upgrading KernelSU and can be done without a computer (backup first!). .
|
||||
1. Install with fastboot using the boot.img provided by KernelSU
|
||||
2. Install with a kernel flash app, such as KernelFlasher
|
||||
3. Repair the boot.img manually and install it
|
||||
4. Install with custom Recovery (e.g. TWRP)
|
||||
|
||||
## Install with boot.img provided by KernelSU
|
||||
|
||||
This method does not require you to have TWRP, nor does it require your phone to have root privileges; it is suitable for your first installation of KernelSU.
|
||||
If your device's `boot.img` uses a commonly used compression format, you can use the GKI images provided by KernelSU to flash it directly. It does not require TWRP or self-patching the image.
|
||||
|
||||
### Find proper boot.img
|
||||
|
||||
KernelSU provides a generic boot.img for GKI devices and you should flush the boot.img to the boot partition of the device.
|
||||
|
||||
You can download boot.img from [GitHub Release](https://github.com/tiann/KernelSU/releases), please note that you should use the correct version of boot.img. For example, if your device displays the kernel `android12-5.10.101` , you need to download `android-5.10.101_yyyy-MM.boot-<format>.img`. (Keep KMI consistent!)
|
||||
You can download boot.img from [GitHub Release](https://github.com/tiann/KernelSU/releases), please note that you should use the correct version of boot.img. If you don't know which file to download, please carefully read the description of [KMI](#kmi) and [Security Patch Level](#security-patch-level) in this document.
|
||||
|
||||
Where `<format>` refers to the kernel compression format of your official boot.img, please check the kernel compression format of your original boot.img, you should use the correct format, e.g. `lz4`, `gz`; if you use an incorrect compression format, you may encounter bootloop.
|
||||
Normally, there are three boot files in different formats under the same KMI and security patch level. They are all the same except for the kernel compression format. Please check the kernel compression format of your original boot.img. You should use the correct format, such as `lz4`, `gz`; if you use an incorrect compression format, you may encounter bootloop after flashing boot.
|
||||
|
||||
::: info
|
||||
1. You can use magiskboot to get the compression format of your original boot; of course you can also ask other, more experienced kids with the same model as your device. Also, the compression format of the kernel usually does not change, so if you boot successfully with a certain compression format, you can try that format later.
|
||||
@@ -125,16 +102,38 @@ After flashing is complete, you should reboot your device:
|
||||
fastboot reboot
|
||||
```
|
||||
|
||||
## Install with Kernel Flasher
|
||||
|
||||
Step:
|
||||
|
||||
1. Download the AnyKernel3 zip. If you don't know which file to download, please carefully read the description of [KMI](#kmi) and [Security Patch Level](#security-patch-level) in this document.
|
||||
2. Open the Kernel Flash App (grant necessary root permissions) and use the provided AnyKernel3 zip to flash.
|
||||
|
||||
This way requires the kernel flash App to have root permissions. You can use the following methods to achieve this:
|
||||
|
||||
1. Your device has rooted. For example, you have installed KernelSU and want to upgrade to the latest version, or you have rooted through other methods (such as Magisk).
|
||||
2. If your phone is not rooted, but the phone supports the temporary boot method of `fastboot boot boot.img`, you can use the GKI image provided by KernelSU to temporarily boot your device, obtain temporary root permissions, and then use the kernel flash Flash the writer to obtain permanent root privileges.
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
PS. This method is more convenient when upgrading KernelSU and can be done without a computer (backup first!). .
|
||||
|
||||
## Patch boot.img manually
|
||||
|
||||
For some devices, the boot.img format is not so common, such as not `lz4`, `gz` and uncompressed; the most typical is Pixel, its boot.img format is `lz4_legacy` compressed, ramdisk may be `gz` may also be `lz4_legacy` compression; at this time, if you directly flash the boot.img provided by KernelSU, the phone may not be able to boot; at this time, you can manually patch the boot.img to achieve.
|
||||
|
||||
There are generally two patch methods:
|
||||
It's always recommended to use `magiskboot` to patch images, there are two ways:
|
||||
|
||||
1. [Android-Image-Kitchen](https://forum.xda-developers.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/)
|
||||
2. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
1. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
2. [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci)
|
||||
|
||||
Among them, Android-Image-Kitchen is suitable for operation on PC, and magiskboot needs the cooperation of mobile phone.
|
||||
The official build of `magiskboot` can only run on Android devices, if you want to run it on PC, you can try the second one.
|
||||
|
||||
::: tip
|
||||
Android-Image-Kitchen is not recommended now, because it doesn't handle the boot metadata(such as security patch level) correctly, thus it may not work on some devices.
|
||||
:::
|
||||
|
||||
### Preparation
|
||||
|
||||
@@ -142,15 +141,7 @@ Among them, Android-Image-Kitchen is suitable for operation on PC, and magiskboo
|
||||
2. Download the AnyKernel3 zip file provided by KernelSU that matches the KMI version of your device (you can refer to the *Install with custom Recovery*).
|
||||
3. Unpack the AnyKernel3 package and get the `Image` file, which is the kernel file of KernelSU.
|
||||
|
||||
### Using Android-Image-Kitchen
|
||||
|
||||
1. Download Android-Image-Kitchen to your computer.
|
||||
2. Put stock boot.img to Android-Image-Kitchen's root folder.
|
||||
3. Execute `./unpackimg.sh boot.img` at root directory of Android-Image-Kitchen, this command would unpack boot.img and you will get some files.
|
||||
4. Replace `boot.img-kernel` in the `split_img` directory with the `Image` you extracted from AnyKernel3 (note the name change to boot.img-kernel).
|
||||
5. Execute `./repackimg.sh` at root directory of 在 Android-Image-Kitchen; And you will get a file named `image-new.img`; Flash this boot.img by fastboot(Refer to the previous section).
|
||||
|
||||
### Using magiskboot
|
||||
### Using magiskboot on Android devices {#using-magiskboot-on-Android-devices}
|
||||
|
||||
1. Download latest Magisk from [Release Page](https://github.com/topjohnwu/Magisk/releases)
|
||||
2. Rename Magisk-*.apk to Magisk-vesion.zip and unzip it.
|
||||
@@ -161,9 +152,36 @@ Among them, Android-Image-Kitchen is suitable for operation on PC, and magiskboo
|
||||
7. Replace `kernel` with `Image`: `mv -f Image kernel`
|
||||
8. Execute `./magiskboot repack boot.img` to repack boot img, and you will get a `new-boot.img` file, flash this file to device by fastboot.
|
||||
|
||||
### Using magiskboot on Windows/macOS/Linux PC{#using-magiskboot-on-PC}
|
||||
|
||||
1. Download proper `magiskboot` for your OS from [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci)
|
||||
2. Prepare stock boot.img and Image in your PC.
|
||||
3. `chmod +x magiskboot`
|
||||
4. Enter the proper directory, execute `./magiskboot unpack boot.img` to unpack `boot.img`, you will get a `kernel` file, this is your stock kernel.
|
||||
5. Replace `kernel` with `Image`: `mv -f Image kernel`
|
||||
6. Execute `./magiskboot repack boot.img` to repack boot img, and you will get a `new-boot.img` file, flash this file to device by fastboot.
|
||||
|
||||
::: info
|
||||
Official `magiskboot` can run `Linux` device normally, if you are a Linux user, you can use official build.
|
||||
:::
|
||||
|
||||
## Install with custom Recovery
|
||||
|
||||
Prerequisite: Your device must have a custom Recovery, such as TWRP; if not or only official Recovery is available, use another method.
|
||||
|
||||
Step:
|
||||
|
||||
1. From the [Release page](https://github.com/tiann/KernelSU/releases) of KernelSU, download the zip package starting with AnyKernel3 that matches your phone version; for example, the phone kernel version is `android12-5.10. 66`, then you should download the file `AnyKernel3-android12-5.10.66_yyyy-MM.zip` (where `yyyy` is the year and `MM` is the month).
|
||||
2. Reboot the phone into TWRP.
|
||||
3. Use adb to put AnyKernel3-*.zip into the phone /sdcard and choose to install it in the TWRP GUI; or you can directly `adb sideload AnyKernel-*.zip` to install.
|
||||
|
||||
PS. This method is suitable for any installation (not limited to initial installation or subsequent upgrades), as long as you use TWRP.
|
||||
|
||||
## Other methods
|
||||
|
||||
In fact, all these installation methods have only one main idea, which is to **replace the original kernel for the one provided by KernelSU**; as long as this can be achieved, it can be installed; for example, the following are other possible methods.
|
||||
|
||||
1. First install Magisk, get root privileges through Magisk and then use the kernel flasher to flash in the AnyKernel zip from KernelSU.
|
||||
2. Use some flashing toolkit on PCs to flash in the kernel provided KernelSU.
|
||||
|
||||
But if it doesn't work, please try `magiskboot` way.
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Periksa apakah perangkat Anda didukung
|
||||
|
||||
Unduh aplikasi manajer KernelSU dari [github releases](https://github.com/tiann/KernelSU/releases) atau [github actions](https://github.com/tiann/KernelSU/actions/workflows/build-manager.yml), lalu instal aplikasi ke perangkat dan buka aplikasi:
|
||||
Unduh aplikasi manajer KernelSU dari [github releases](https://github.com/tiann/KernelSU/releases), lalu instal aplikasi ke perangkat dan buka aplikasi:
|
||||
|
||||
- Jika aplikasi menunjukkan `Unsupported`, itu berarti **Anda harus mengkompilasi kernel sendiri**, KernelSU tidak akan dan tidak pernah menyediakan boot image untuk Anda flash.
|
||||
- Jika aplikasi menunjukkan `Not installed`, maka perangkat Anda secara resmi didukung oleh KernelSU.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## デバイスが対応しているか確認する
|
||||
|
||||
[GitHub Releases](https://github.com/tiann/KernelSU/releases) または [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu) から KernelSU Manager アプリをダウンロードし、お使いのデバイスにインストールしてください。
|
||||
[GitHub Releases](https://github.com/tiann/KernelSU/releases) から KernelSU Manager アプリをダウンロードし、お使いのデバイスにインストールしてください。
|
||||
|
||||
- アプリが「非対応」と表示した場合は、**自分でカーネルをコンパイルする必要がある**という意味です。KernelSU は書き込むためのブートイメージを提供しません。
|
||||
- アプリが「未インストール」と表示した場合、お使いのデバイスは KernelSU に対応しています。
|
||||
|
||||
@@ -37,7 +37,7 @@ O Perfil Root do KernelSU permite a personalização do UID, GID e grupos para o
|
||||
O Perfil do Aplicativo controla apenas as permissões do processo root após usar `su`, e ele não controla as permissões do próprio app. Se um app solicitou permissão de acesso à rede, ele ainda poderá acessar a rede mesmo sem usar `su`. Remover o grupo `inet` de `su` apenas impede que `su` acesse a rede.
|
||||
:::
|
||||
|
||||
O Perfil Root é aplicado no kernel e não depende do comportamento voluntário de apps root, ao contrário da troca de usuários ou grupos por meio de `su`, a concessão da permissão `su` depende inteiramente do usuário e não do desenvolvedor.
|
||||
O Perfil Root é aplicado no kernel e não depende do comportamento voluntário de apps root, ao contrário da troca de usuários ou grupos por meio de `su` A concessão da permissão `su` depende inteiramente do usuário e não do desenvolvedor.
|
||||
|
||||
### Capacidades
|
||||
|
||||
@@ -93,8 +93,8 @@ Se a configuração do Perfil Root não estiver definida corretamente, poderá o
|
||||
|
||||
Por exemplo, se você conceder permissão root a um usuário ADB shell (que é um caso comum) e, em seguida, conceder permissão root a um app normal, mas configurar seu Perfil Root com UID 2000 (que é o UID do usuário ADB shell), o app pode obter acesso root completo executando o comando `su` duas vezes:
|
||||
|
||||
1. A primeira execução `su` está sujeita à aplicação do Perfil do Aplicativo e mudará para UID `2000` (adb shell) em vez de `0` (root).
|
||||
2. A segunda execução `su`, como o UID é `2000` e você concedeu acesso root ao UID `2000` (adb shell) na configuração, o app obterá privilégio de root completo.
|
||||
1. A primeira execução `su` está sujeita à aplicação do Perfil do Aplicativo e mudará para UID `2000` (ADB shell) em vez de `0` (root).
|
||||
2. A segunda execução `su`, como o UID é `2000` e você concedeu acesso root ao UID `2000` (ADB shell) na configuração, o app obterá privilégio de root completo.
|
||||
|
||||
:::warning OBSERVAÇÃO
|
||||
Este comportamento é totalmente esperado e não é um bug. Portanto, recomendamos o seguinte:
|
||||
@@ -114,5 +114,5 @@ Além disso, a interface de configurações do gerenciador KernelSU fornece uma
|
||||
2. Desative a opção "desmontar módulos por padrão" e ative individualmente a opção "desmontar módulos" no Perfil do Aplicativo para apps que exigem descarregamento do módulo (agindo como uma "lista negra").
|
||||
|
||||
:::info INFORMAÇÕES
|
||||
Em dispositivos que utilizam kernel versão 5.10 e superior, o kernel realiza o descarregamento dos módulos. No entanto, para dispositivos que executam versões de kernel abaixo de 5.10, essa opção é apenas uma opção de configuração e o próprio KernelSU não executa nenhuma ação. Alguns módulos, como Zygisksu, podem usar essa opção para determinar se o descarregamento do módulo é necessário.
|
||||
Em dispositivos que utilizam kernel versão 5.10 e superior, o kernel realiza o descarregamento dos módulos. No entanto, para dispositivos que executam versões de kernel abaixo de 5.10, essa opção é apenas uma opção de configuração e o próprio KernelSU não executa nenhuma ação. Alguns módulos, como ZygiskNext, podem usar essa opção para determinar se o descarregamento do módulo é necessário.
|
||||
:::
|
||||
|
||||
@@ -12,11 +12,11 @@ Certamente, sim.
|
||||
|
||||
## KernelSU suporta módulos?
|
||||
|
||||
Sim, mas está na versão inicial, pode apresentar bugs. Por favor, aguarde até que fique estável.
|
||||
Sim, verifique [Guias de módulo](module.md) por favor.
|
||||
|
||||
## KernelSU suporta Xposed?
|
||||
|
||||
Sim, [Dreamland](https://github.com/canyie/Dreamland) e [TaiChi](https://taichi.cool) funcionam agora. Para o LSPosed, você pode fazê-lo funcionar usando [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext).
|
||||
Sim, você pode usar LSPosed com [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext).
|
||||
|
||||
## KernelSU suporta Zygisk?
|
||||
|
||||
@@ -55,13 +55,14 @@ Por favor, consulte a guia [Como integrar o KernelSU para kernels não GKI](how-
|
||||
|
||||
A versão do Kernel não tem nada a ver com a versão do Android, se você precisar fazer o flash do kernel, use sempre a versão do kernel, a versão do Android não é tão importante.
|
||||
|
||||
## Existe algum namespace de montagem --mount-master/global no KernelSU?
|
||||
|
||||
Não existe agora (talvez no futuro), mas há muitas maneiras de mudar manualmente para o namespace de montagem global, como:
|
||||
|
||||
1. `nsenter -t 1 -m sh` para obter um shell no namespace de montagem global.
|
||||
2. Adicione `nsenter --mount=/proc/1/ns/mnt` ao comando que você deseja executar, o comando será executado no namespace de montagem global. O KernelSU também está [usando desta forma](https://github.com/tiann/KernelSU/blob/77056a710073d7a5f7ee38f9e77c9fd0b3256576/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt#L115).
|
||||
|
||||
## Eu sou GKI1.0, posso usar isso?
|
||||
|
||||
GKI1 é completamente diferente do GKI2, você deve compilar o kernel sozinho.
|
||||
|
||||
## Como posso fazer `/system` RW?
|
||||
|
||||
Não recomendamos que você modifique a partição do sistema diretamente. Você deve usar [Guias de módulo](module.md) para modificá-lo sem sistema. Se você insiste em fazer isso, verifique [magisk_overlayfs](https://github.com/HuskyDG/magic_overlayfs).
|
||||
|
||||
## O KernelSU pode modificar hosts? Como posso usar AdAway?
|
||||
|
||||
Claro. Mas o KernelSU não tem suporte a hosts integrados, você pode instalar [systemless-hosts](https://github.com/symbuzzer/systemless-hosts-KernelSU-module) para fazer isso.
|
||||
|
||||
@@ -44,22 +44,20 @@ tools/bazel build --config=fast //common:kernel_aarch64_dist
|
||||
|
||||
Se você conseguir construir o kernel com sucesso, então construir o KernelSU é muito fácil. Selecione qualquer um executado no diretório raiz de origem do kernel:
|
||||
|
||||
- Tag mais recente (estável)
|
||||
::: code-group
|
||||
|
||||
```sh
|
||||
```sh[Tag mais recente (estável)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||||
```
|
||||
|
||||
- branch principal (dev)
|
||||
|
||||
```sh
|
||||
```sh[Branch principal (dev)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main
|
||||
```
|
||||
|
||||
- Selecione a tag (Como v0.5.2)
|
||||
|
||||
```sh
|
||||
```sh[Selecionar tag (como v0.5.2)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
E então reconstrua o kernel e você obterá uma imagem do kernel com KernelSU!
|
||||
|
||||
@@ -46,27 +46,27 @@ Se o kprobe não funcionar no seu kernel (pode ser um bug do upstream ou do kern
|
||||
|
||||
Primeiro, adicione o KernelSU à árvore de origem do kernel:
|
||||
|
||||
- Tag mais recente (estável)
|
||||
::: code-group
|
||||
|
||||
```sh
|
||||
```sh[Tag mais recente (estável)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||||
```
|
||||
|
||||
- branch principal (dev)
|
||||
|
||||
```sh
|
||||
```sh[Branch principal (dev)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main
|
||||
```
|
||||
|
||||
- Selecione a tag (Como v0.5.2)
|
||||
|
||||
```sh
|
||||
```sh[Selecionar tag (como v0.5.2)]
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
Em seguida, adicione chamadas KernelSU à fonte do kernel. Aqui está um patch para referência:
|
||||
|
||||
```diff
|
||||
::: code-group
|
||||
|
||||
```diff[exec.c]
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index ac59664eaecf..bdd585e1d2cc 100644
|
||||
--- a/fs/exec.c
|
||||
@@ -92,7 +92,7 @@ index ac59664eaecf..bdd585e1d2cc 100644
|
||||
return __do_execve_file(fd, filename, argv, envp, flags, NULL);
|
||||
}
|
||||
```
|
||||
```diff
|
||||
```diff[open.c]
|
||||
diff --git a/fs/open.c b/fs/open.c
|
||||
index 05036d819197..965b84d486b8 100644
|
||||
--- a/fs/open.c
|
||||
@@ -123,7 +123,7 @@ index 05036d819197..965b84d486b8 100644
|
||||
if (mode & ~S_IRWXO) /* where's F_OK, X_OK, W_OK, R_OK? */
|
||||
return -EINVAL;
|
||||
```
|
||||
```diff
|
||||
```diff[read_write.c]
|
||||
diff --git a/fs/read_write.c b/fs/read_write.c
|
||||
index 650fc7e0f3a6..55be193913b6 100644
|
||||
--- a/fs/read_write.c
|
||||
@@ -146,7 +146,7 @@ index 650fc7e0f3a6..55be193913b6 100644
|
||||
return -EBADF;
|
||||
if (!(file->f_mode & FMODE_CAN_READ))
|
||||
```
|
||||
```diff
|
||||
```diff[stat.c]
|
||||
diff --git a/fs/stat.c b/fs/stat.c
|
||||
index 376543199b5a..82adcef03ecc 100644
|
||||
--- a/fs/stat.c
|
||||
@@ -170,6 +170,8 @@ index 376543199b5a..82adcef03ecc 100644
|
||||
return -EINVAL;
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
Você deve encontrar as quatro funções no código-fonte do kernel:
|
||||
|
||||
1. do_faccessat, geralmente em `fs/open.c`
|
||||
@@ -262,3 +264,7 @@ index 45306f9ef247..815091ebfca4 100755
|
||||
```
|
||||
|
||||
Finalmente, construa seu kernel novamente, e então, o KernelSU deve funcionar bem.
|
||||
|
||||
:::info ENTRANDO NO MODO DE SEGURANÇA ACIDENTALMENTE?
|
||||
Se você estiver usando a integração manual e não desabilitar `CONFIG_KPROBES`, o usuário poderá acionar o Modo de Segurança pressionando o botão de diminuir volume após a inicialização! Portanto, se estiver usando a integração manual, você precisa desabilitar `CONFIG_KPROBES`!
|
||||
:::
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
|
||||
## Verifique se o seu dispositivo é compatível
|
||||
|
||||
Baixe o app gerenciador do KernelSU em [GitHub Releases](https://github.com/tiann/KernelSU/releases) ou [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu), e instale-o no seu dispositivo:
|
||||
Baixe o app gerenciador do KernelSU em [GitHub Releases](https://github.com/tiann/KernelSU/releases), e instale-o no seu dispositivo:
|
||||
|
||||
- Se o app mostrar `Sem suporte`, significa que **você deve compilar o kernel sozinho**, o KernelSU não fornecerá e nunca fornecerá uma boot image para você instalar.
|
||||
- Se o app mostrar `Sem suporte`, significa que **você deve compilar o kernel sozinho**. O KernelSU não fornecerá e nunca fornecerá uma boot.img para você instalar.
|
||||
- Se o app mostrar `Não instalado`, então seu dispositivo é oficialmente suportado pelo KernelSU.
|
||||
|
||||
::: info INFORMAÇÕES
|
||||
Para dispositivos mostrando `Sem suporte`, aqui está os [Dispositivos com suporte não oficial](unofficially-support-devices.md), você mesmo pode compilar o kernel.
|
||||
Para dispositivos mostrando `Sem suporte`, aqui está os [Dispositivos com suporte não oficial](unofficially-support-devices.md). Você mesmo pode compilar o kernel.
|
||||
:::
|
||||
|
||||
## Backup padrão do boot.img
|
||||
|
||||
Antes de fazer o flash, você deve primeiro fazer backup de seu boot.img padrão. Se você encontrar algum bootloop, você sempre pode restaurar o sistema voltando para o boot de fábrica usando o fastboot.
|
||||
Antes de fazer o flash, você deve primeiro fazer backup de seu boot.img padrão. Se você encontrar algum bootloop, você sempre pode restaurar o sistema voltando para o boot padrão de fábrica usando o fastboot.
|
||||
|
||||
::: warning AVISO
|
||||
Fleshar pode causar perda de dados, certifique-se de executar esta etapa bem antes de prosseguir para a próxima! Você também pode fazer backup de todos os dados do seu telefone, se necessário.
|
||||
Flashar pode causar perda de dados, certifique-se de executar esta etapa bem antes de prosseguir para a próxima! Você também pode fazer backup de todos os dados do seu telefone, se necessário.
|
||||
:::
|
||||
|
||||
## Conhecimento necessário
|
||||
@@ -27,9 +27,9 @@ Por padrão, você usará as ferramentas ADB e fastboot neste tutorial, portanto
|
||||
|
||||
### KMI
|
||||
|
||||
Kernel Module Interface (KMI), versões de kernel com o mesmo KMI são **compatíveis**, isso é o que "geral" significa no GKI; por outro lado, se o KMI for diferente, então esses kernels não são compatíveis entre si, e atualizar uma imagem do kernel com um KMI diferente do seu dispositivo pode causar um bootloop.
|
||||
Kernel Module Interface (KMI), versões de kernel com o mesmo KMI são **compatíveis**, isso é o que "geral" significa no GKI. Por outro lado, se o KMI for diferente, então esses kernels não são compatíveis entre si, e atualizar uma imagem do kernel com um KMI diferente do seu dispositivo pode causar um bootloop.
|
||||
|
||||
Especificamente, para dispositivos GKI, o formato da versão do kernel deve ser o seguinte:
|
||||
Especificamente, para dispositivos GKI, o formato da versão do kernel deve ser a seguinte:
|
||||
|
||||
```txt
|
||||
KernelRelease :=
|
||||
@@ -43,6 +43,12 @@ w .x .y -zzz -k -something
|
||||
Observe que o SubLevel na versão do kernel não faz parte do KMI! Isso significa que `5.10.101-android12-9-g30979850fc20` tem o mesmo KMI que `5.10.137-android12-9-g30979850fc20`!
|
||||
:::
|
||||
|
||||
### Nível do patch de segurança {#security-patch-level}
|
||||
|
||||
Dispositivos Android mais recentes podem ter mecanismos anti-rollback que não permitem flashar uma boot.img com um nível de patch de segurança antigo. Por exemplo, se o kernel do seu dispositivo for `5.10.101-android12-9-g30979850fc20`, o patch de segurança será `2023-11`, mesmo se você atualizar o kernel consistente com o KMI do kernel, se o nível do patch de segurança for anterior a `2023-11` (como `2023-06`), então isso pode causar bootloop.
|
||||
|
||||
Portanto, os kernels com os níveis de patch de segurança mais recentes são preferidos, mantendo a consistência do KMI.
|
||||
|
||||
### Versão do kernel vs Versão do Android
|
||||
|
||||
Por favor, observe: **A versão do kernel e a versão do Android não são necessariamente iguais!**
|
||||
@@ -53,51 +59,22 @@ Se você descobrir que a versão do seu kernel é `android12-5.10.101`, mas a ve
|
||||
|
||||
Existem vários métodos de instalação do KernelSU, cada um adequado para um cenário diferente, portanto escolha conforme necessário.
|
||||
|
||||
1. Instalar com Recovery personalizado (por exemplo, TWRP)
|
||||
2. Instalar com um app kernel flash, como Franco Kernel Manager
|
||||
3. Instalar com fastboot usando o boot.img fornecido por KernelSU
|
||||
4. Repare o boot.img manualmente e instale-o
|
||||
|
||||
## Instalar com Recovery personalizado
|
||||
|
||||
Pré-requisito: Seu dispositivo deve ter um Recovery personalizado, como TWRP. Se apenas o Recovery oficial estiver disponível, use outro método.
|
||||
|
||||
Etapa:
|
||||
|
||||
1. Na [página de lançamento](https://github.com/tiann/KernelSU/releases) do KernelSU, baixe o pacote zip começando com AnyKernel3 que corresponde à versão do seu telefone; por exemplo, a versão do kernel do telefone é `android12-5.10. 66`, então você deve baixar o arquivo `AnyKernel3-android12-5.10.66_yyyy-MM.zip` (onde `yyyy` é o ano e `MM` é o mês).
|
||||
2. Reinicie o telefone no TWRP.
|
||||
3. Use o adb para colocar AnyKernel3-*.zip no telefone /sdcard e escolha instalá-lo na interface do TWRP; ou você pode diretamente `adb sideload AnyKernel-*.zip` para instalar.
|
||||
|
||||
PS. Este método é adequado para qualquer instalação (não limitado à instalação inicial ou atualizações subsequentes), desde que você use TWRP.
|
||||
|
||||
## Instalar com Kernel Flasher
|
||||
|
||||
Pré-requisito: Seu dispositivo deve estar rooteado. Por exemplo, você instalou o Magisk para obter root ou instalou uma versão antiga do KernelSU e precisa atualizar para outra versão do KernelSU. Se o seu dispositivo não estiver rooteado, tente outros métodos.
|
||||
|
||||
Etapa:
|
||||
|
||||
1. Baixe o zip AnyKernel3; consulte a seção *Instalar com Recovery personalizado* para obter instruções de download.
|
||||
2. Abra o app Kernel Flash e use o zip AnyKernel3 fornecido para fazer o flash.
|
||||
|
||||
Se você nunca usou algum app kernel flash antes, os seguintes são os mais populares.
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
PS. Este método é mais conveniente ao atualizar o KernelSU e pode ser feito sem um computador (backup primeiro).
|
||||
1. Instalar com fastboot usando o boot.img fornecido por KernelSU
|
||||
2. Instalar com um app kernel flash, como KernelFlasher
|
||||
3. Repare o boot.img manualmente e instale-o
|
||||
4. Instalar com Recovery personalizado (por exemplo, TWRP)
|
||||
|
||||
## Instalar com o boot.img fornecido por KernelSU
|
||||
|
||||
Este método não requer que você tenha TWRP, nem que seu telefone tenha privilégios de root; é adequado para sua primeira instalação do KernelSU.
|
||||
Se o `boot.img` do seu dispositivo usa um formato de compactação comumente usado, você pode usar as imagens GKI fornecidas pelo KernelSU para atualizá-lo diretamente. Não requer TWRP ou autocorreção da imagem.
|
||||
|
||||
### Encontre o boot.img adequado
|
||||
|
||||
O KernelSU fornece um boot.img genérico para dispositivos GKI e você deve liberar o boot.img para a partição boot do dispositivo.
|
||||
|
||||
Você pode baixar o boot.img em [GitHub Release](https://github.com/tiann/KernelSU/releases), por favor, observe que você deve usar a versão correta do boot.img. Por exemplo, se o seu dispositivo exibe o kernel `android12-5.10.101` , você precisa baixar `android-5.10.101_yyyy-MM.boot-<format>.img`. (Mantenha o KMI consistente!)
|
||||
Você pode baixar o boot.img em [GitHub Release](https://github.com/tiann/KernelSU/releases), por favor, observe que você deve usar a versão correta do boot.img. Se você não sabe qual arquivo baixar, leia atentamente a descrição de [KMI](#kmi) e [Nível do patch de segurança](#security-patch-level) neste documento.
|
||||
|
||||
Onde `<format>` se refere ao formato de compactação do kernel do seu boot.img oficial, por favor, verifique o formato de compactação do kernel de seu boot.img original. Você deve usar o formato correto, por exemplo: `lz4`, `gz`. Se você usar um formato de compactação incorreto, poderá encontrar bootloop.
|
||||
Normalmente, existem três arquivos de inicialização em formatos diferentes no mesmo KMI e nível do patch de segurança. Eles são todos iguais, exceto pelo formato de compactação do kernel. Por favor, verifique o formato de compactação do kernel de seu boot.img original. Você deve usar o formato correto, como `lz4`, `gz`. Se você usar um formato de compactação incorreto, poderá encontrar bootloop após flashar o boot.img.
|
||||
|
||||
::: info INFORMAÇÕES
|
||||
1. Você pode usar o magiskboot para obter o formato de compactação de seu boot original; é claro que você também pode perguntar a outras pessoas mais experientes com o mesmo modelo do seu dispositivo. Além disso, o formato de compactação do kernel geralmente não muda, portanto, se você inicializar com êxito com um determinado formato de compactação, poderá tentar esse formato mais tarde.
|
||||
@@ -107,7 +84,7 @@ Onde `<format>` se refere ao formato de compactação do kernel do seu boot.img
|
||||
|
||||
### Flash boot.img para o dispositivo
|
||||
|
||||
Use o `adb` para conectar seu dispositivo, execute `adb reboot bootloader` para entrar no modo fastboot e use este comando para atualizar o KernelSU:
|
||||
Use o `adb` para conectar seu dispositivo, execute `adb reboot bootloader` para entrar no modo fastboot e use este comando para flashar o KernelSU:
|
||||
|
||||
```sh
|
||||
fastboot flash boot boot.img
|
||||
@@ -125,45 +102,86 @@ Após a conclusão do flash, você deve reiniciar o dispositivo:
|
||||
fastboot reboot
|
||||
```
|
||||
|
||||
## Instalar com Kernel Flasher
|
||||
|
||||
Etapa:
|
||||
|
||||
1. Baixe o zip AnyKernel3. Se você não sabe qual arquivo baixar, leia atentamente a descrição de [KMI](#kmi) e [Nível do patch de segurança](#security-patch-level) neste documento.
|
||||
2. Abra o app Kernel Flash (conceda as permissões de root necessárias) e use o zip AnyKernel3 fornecido para fazer o flash.
|
||||
|
||||
Dessa forma, é necessário que o app Kernel Flasher tenha permissões root. Você pode usar os seguintes métodos para conseguir isso:
|
||||
|
||||
1. Seu dispositivo está rooteado. Por exemplo, você instalou o KernelSU e deseja atualizar para a versão mais recente ou fez o root por meio de outros métodos (como Magisk).
|
||||
2. Se o seu telefone não estiver rooteado, mas o telefone suportar o método de inicialização temporária de `fastboot boot boot.img`, você pode usar a imagem GKI fornecida pelo KernelSU para inicializar temporariamente o seu dispositivo, obter permissões de root temporária e, em seguida, usar o Kernel Flasher para obter privilégios de root permanente.
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
PS. Este método é mais conveniente ao atualizar o KernelSU e pode ser feito sem um computador (backup primeiro).
|
||||
|
||||
## Corrigir boot.img manualmente
|
||||
|
||||
Para alguns dispositivos, o formato boot.img não é tão comum, como `lz4`, `gz` e `uncompressed`. O mais típico é o Pixel, seu formato boot.img é `lz4_legacy` compactado, ramdisk pode ser `gz` também pode ser compactado `lz4_legacy`. Neste momento, se você fleshar diretamente o boot.img fornecido pelo KernelSU, o telefone pode não conseguir inicializar. Neste momento, você pode corrigir manualmente o boot.img para conseguir isso.
|
||||
Para alguns dispositivos, o formato boot.img não é tão comum como `lz4`, `gz` e `uncompressed`. O mais típico é o Pixel, seu formato boot.img é `lz4_legacy` compactado, ramdisk pode ser `gz` também pode ser compactado `lz4_legacy`. Neste momento, se você flashar diretamente o boot.img fornecido pelo KernelSU, o telefone pode não conseguir inicializar. Neste momento, você pode corrigir manualmente o boot.img para conseguir isso.
|
||||
|
||||
Geralmente existem dois métodos de patch:
|
||||
É sempre recomendado usar `magiskboot` para corrigir imagens, existem duas maneiras:
|
||||
|
||||
1. [Android-Image-Kitchen](https://forum.xda-developers.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/)
|
||||
2. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
1. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
2. [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci)
|
||||
|
||||
Entre eles, o Android-Image-Kitchen é adequado para operação no PC e o magiskboot precisa da cooperação do telefone.
|
||||
A versão oficial do `magiskboot` só pode rodar em dispositivos Android, se você quiser rodar no PC, você pode tentar a segunda.
|
||||
|
||||
::: tip DICA
|
||||
Android-Image-Kitchen não é recomendado agora, porque ele não lida corretamente com os metadados de inicialização (como o nível do patch de segurança). Portanto, pode não funcionar em alguns dispositivos.
|
||||
:::
|
||||
|
||||
### Preparação
|
||||
|
||||
1. Obtenha o boot.img padrão do telefone; você pode obtê-lo com os fabricantes do seu dispositivo, você pode precisar do [payload-dumper-go](https://github.com/ssut/payload-dumper-go).
|
||||
2. Baixe o arquivo zip AnyKernel3 fornecido pelo KernelSU que corresponde à versão KMI do seu dispositivo (você pode consultar *Instalar com Recovery personalizado*).
|
||||
1. Obtenha o boot.img padrão do telefone. Você pode obtê-lo com os fabricantes do seu dispositivo, talvez você precise do [payload-dumper-go](https://github.com/ssut/payload-dumper-go).
|
||||
2. Baixe o arquivo zip AnyKernel3 fornecido pelo KernelSU que corresponde à versão KMI do seu dispositivo. Você pode consultar [Instalar com Recovery personalizado](#install-with-custom-recovery).
|
||||
3. Descompacte o pacote AnyKernel3 e obtenha o arquivo `Image`, que é o arquivo do kernel do KernelSU.
|
||||
|
||||
### Usando o Android-Image-Kitchen
|
||||
|
||||
1. Baixe o Android-Image-Kitchen para o seu computador.
|
||||
2. Coloque o boot.img padrão na pasta raiz do Android-Image-Kitchen.
|
||||
3. Execute `./unpackimg.sh boot.img` no diretório raiz do Android-Image-Kitchen, este comando descompactará o boot.img e você obterá alguns arquivos.
|
||||
4. Substitua `boot.img-kernel` no diretório `split_img` pela `Image` que você extraiu do AnyKernel3 (observe a mudança de nome para boot.img-kernel).
|
||||
5. Execute `./repackimg.sh` no diretório raiz de 在 Android-Image-Kitchen, e você obterá um arquivo chamado `image-new.img`. Faça o flash deste boot.img por fastboot (consulte a seção anterior).
|
||||
|
||||
### Usando o magiskboot
|
||||
### Usando o magiskboot em dispositivos Android {#using-magiskboot-on-Android-devices}
|
||||
|
||||
1. Baixe o Magisk mais recente em [GitHub Releases](https://github.com/topjohnwu/Magisk/releases).
|
||||
2. Renomeie o Magisk-*.apk para Magisk-vesion.zip e descompacte-o.
|
||||
3. Envie `Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so` para o seu dispositivo por adb: `adb push Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so /data/local/tmp/magiskboot`.
|
||||
3. Envie `Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so` para o seu dispositivo por ADB: `adb push Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so /data/local/tmp/magiskboot`.
|
||||
4. Envie o boot.img padrão e Image em AnyKernel3 para o seu dispositivo.
|
||||
5. Entre no diretório adb shell e cd `/data/local/tmp/` e, em seguida, `chmod +x magiskboot`.
|
||||
6. Entre no shell adb e no diretório cd `/data/local/tmp/`, execute `./magiskboot unpack boot.img` para descompactar `boot.img`, você obterá um arquivo `kernel`, este é o seu kernel padrão.
|
||||
5. Entre no ADB shell e no diretório cd `/data/local/tmp/`, em seguida, `chmod +x magiskboot`.
|
||||
6. Entre no ADB shell e no diretório cd `/data/local/tmp/`, execute `./magiskboot unpack boot.img` para descompactar `boot.img`, você obterá um arquivo `kernel`, este é o seu kernel padrão.
|
||||
7. Substitua `kernel` por `Image`: `mv -f Image kernel`.
|
||||
8. Execute `./magiskboot repack boot.img` para reembalar o boot.img, e você obterá um arquivo `new-boot.img`, faça o flash deste arquivo para o dispositivo por fastboot.
|
||||
|
||||
### Usando o magiskboot no PC Windows/macOS/Linux {#using-magiskboot-on-PC}
|
||||
|
||||
1. Baixe o `magiskboot` adequado para o seu sistema operacional em [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci).
|
||||
2. Prepare o boot.img padrão e Image em seu PC.
|
||||
3. `chmod +x magiskboot`
|
||||
4. Entre no diretório apropriado, execute `./magiskboot unpack boot.img` para descompactar `boot.img`. Você obterá um arquivo `kernel`, este é o seu kernel padrão.
|
||||
5. Substitua `kernel` por `Image`: `mv -f Image kernel`.
|
||||
6. Execute `./magiskboot repack boot.img` para reembalar o boot.img, e você obterá um arquivo `new-boot.img`, faça o flash deste arquivo para o dispositivo por fastboot.
|
||||
|
||||
::: info INFORMAÇÕES
|
||||
O `magiskboot` oficial pode executar o dispositivo `Linux` normalmente. Se você for um usuário Linux, você pode usar a versão oficial.
|
||||
:::
|
||||
|
||||
## Instalar com Recovery personalizado
|
||||
|
||||
Pré-requisito: Seu dispositivo deve ter um Recovery personalizado, como TWRP. Se apenas o Recovery oficial estiver disponível, use outro método.
|
||||
|
||||
Etapa:
|
||||
|
||||
1. Na [página de lançamento](https://github.com/tiann/KernelSU/releases) do KernelSU, baixe o pacote zip começando com AnyKernel3 que corresponde à versão do seu telefone; por exemplo, a versão do kernel do telefone é `android12-5.10. 66`, então você deve baixar o arquivo `AnyKernel3-android12-5.10.66_yyyy-MM.zip` (onde `yyyy` é o ano e `MM` é o mês).
|
||||
2. Reinicie o telefone no TWRP.
|
||||
3. Use o adb para colocar AnyKernel3-*.zip no telefone /sdcard e escolha instalá-lo na interface do TWRP; ou você pode diretamente `adb sideload AnyKernel-*.zip` para instalar.
|
||||
|
||||
PS. Este método é adequado para qualquer instalação (não limitado à instalação inicial ou atualizações subsequentes), desde que você use TWRP.
|
||||
|
||||
## Outros métodos
|
||||
|
||||
Na verdade, todos esses métodos de instalação têm apenas uma ideia principal, que é **substituir o kernel original pelo fornecido pelo KernelSU**, desde que isso possa ser alcançado, ele pode ser instalado. Por exemplo, a seguir estão outros métodos possíveis.
|
||||
|
||||
1. Primeiro instale o Magisk, obtenha privilégios de root através do Magisk e então use o kernel flasher para fazer o flash no zip AnyKernel do KernelSU.
|
||||
2. Use algum kit de ferramentas de flash em PCs para fleshar no kernel fornecido pelo KernelSU.
|
||||
2. Use algum kit de ferramentas de flash em PCs para flashar no kernel fornecido pelo KernelSU.
|
||||
|
||||
Mas se não funcionar, por favor, tente o método `magiskboot`.
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
Ao atualizar um dispositivo, podemos encontrar situações em que o dispositivo fica "bloqueado". Em teoria, se você usar o fastboot apenas para atualizar a partição boot ou instalar módulos inadequados que causam falha na inicialização do dispositivo, isso poderá ser restaurado por meio de operações apropriadas. Este documento tem como objetivo fornecer alguns métodos de emergência para ajudá-lo a se recuperar de um dispositivo "bloqueado".
|
||||
|
||||
## Bloqueio por fleshear partição boot
|
||||
## Bloqueio por flashar partição boot
|
||||
|
||||
No KernelSU, as seguintes situações podem causar bloqueio de inicialização ao fleshear a partição boot:
|
||||
No KernelSU, as seguintes situações podem causar bloqueio de inicialização ao flashar a partição boot:
|
||||
|
||||
1. Você atualizou uma imagem boot no formato errado. Por exemplo, se o formato de boot do seu telefone for `gz`, mas você atualizou uma imagem no formato `lz4`, o telefone não será capaz de inicializar.
|
||||
2. Seu telefone precisa desativar a verificação AVB para inicializar corretamente (geralmente exigindo a limpeza de todos os dados do telefone).
|
||||
3. Seu kernel tem alguns bugs ou não é adequado para o flash do seu telefone.
|
||||
|
||||
Não importa qual seja a situação, você pode recuperar **fleshando a imagem de boot padrão**. Portanto, no início do tutorial de instalação, recomendamos fortemente que você faça backup de seu boot padrão antes de fazer o flash. Se você não fez backup, poderá obter o boot original de fábrica de outros usuários com o mesmo dispositivo que você ou do firmware oficial.
|
||||
Não importa qual seja a situação, você pode recuperar **flashando a imagem de boot padrão**. Portanto, no início do tutorial de instalação, recomendamos fortemente que você faça backup de seu boot padrão antes de fazer o flash. Se você não fez backup, poderá obter o boot original de fábrica de outros usuários com o mesmo dispositivo que você ou do firmware oficial.
|
||||
|
||||
## Bloqueio por módulos
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ O KernelSU é uma solução root para dispositivos Android GKI, funciona no modo
|
||||
|
||||
## Características
|
||||
|
||||
A principal característica do KernelSU é que ele é **baseado em kernel**. O KernelSU funciona no modo kernel, portanto pode fornecer uma interface de kernel que nunca tivemos antes. Por exemplo, podemos adicionar um ponto de interrupção de hardware a qualquer processo no modo kernel; Podemos acessar a memória física de qualquer processo sem que ninguém perceba; Podemos interceptar qualquer syscall no espaço do kernel; etc.
|
||||
A principal característica do KernelSU é que ele é **baseado em kernel**. O KernelSU funciona no modo kernel, portanto pode fornecer uma interface de kernel que nunca tivemos antes. Por exemplo, podemos adicionar um ponto de interrupção de hardware a qualquer processo no modo kernel, podemos acessar a memória física de qualquer processo sem que ninguém perceba, podemos interceptar qualquer syscall no espaço do kernel, etc.
|
||||
|
||||
E também, o KernelSU fornece um sistema de módulos via overlayfs, que permite carregar seu plugin personalizado no sistema. Ele também fornece um mecanismo para modificar arquivos na partição `/system`.
|
||||
|
||||
|
||||
@@ -24,5 +24,5 @@ features:
|
||||
details: Somente apps permitidos podem acessar ou ver su, todos os outros apps não estão cientes disso.
|
||||
- title: Privilégios de root personalizáveis
|
||||
details: KernelSU permite a personalização de uid, gid, grupos, capacidades e regras SELinux do su, bloqueando privilégios de root.
|
||||
- title: Módulo
|
||||
details: Os módulos podem modificar /system sem sistema usando overlayfs permitindo grande potência.
|
||||
- title: Módulos
|
||||
details: Os módulos podem modificar /system sem sistema usando overlayfs permitindo uma grande potência.
|
||||
|
||||
23
website/docs/public/templates/cemiuiler.readproc
Normal file
23
website/docs/public/templates/cemiuiler.readproc
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id":"cemiuiler.readproc",
|
||||
"name":"Cemiuiler",
|
||||
"author":"refined-fish",
|
||||
"description":"Grant Cemiuiler the minimum permissions to work properly-to restart the application.",
|
||||
"namespace":"INHERITED",
|
||||
"uid":10000,
|
||||
"gid":10000,
|
||||
"groups":[
|
||||
"READPROC"
|
||||
],
|
||||
"capabilities":[
|
||||
"CAP_KILL"
|
||||
],
|
||||
"context":"u:r:su:s0",
|
||||
"rules":"",
|
||||
"locales": {
|
||||
"zh_CN": {
|
||||
"name":"西米露Cemiuiler",
|
||||
"description":"授予Cemiuiler能正常工作——重启作用域应用的最小限度权限。"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,8 @@
|
||||
"CAP_SYS_RESOURCE",
|
||||
"CAP_KILL",
|
||||
"CAP_SYSLOG",
|
||||
"CAP_PERFMON"
|
||||
"CAP_PERFMON",
|
||||
"CAP_SYS_BOOT"
|
||||
],
|
||||
"context":"u:r:su:s0",
|
||||
"namespace":"INHERITED",
|
||||
|
||||
@@ -69,13 +69,6 @@
|
||||
"kernel_link": "https://github.com/Diva-Room/Miku_kernel_xiaomi_wayne",
|
||||
"devices": "wayne"
|
||||
},
|
||||
{
|
||||
"maintainer": "YamazakuraH",
|
||||
"maintainer_link": "https://github.com/YamazakuraH",
|
||||
"kernel_name": "kernel_xiaomi_cepheus",
|
||||
"kernel_link": "https://github.com/169163-Network/kernel_xiaomi_cepheus",
|
||||
"devices": "cepheus for pixel experience"
|
||||
},
|
||||
{
|
||||
"maintainer": "SakuraNotStupid",
|
||||
"maintainer_link": "https://github.com/SakuraKyuo",
|
||||
@@ -119,17 +112,10 @@
|
||||
"devices": "Apollo(Redmi K30S Ultra/Mi 10T/Mi 10T Pro)\uff0cAlioth(Redmi K40/POCO F3/Mi 11X)\uff0cMunch(Redmi K40S/POCO F4), both MIUI and AOSP."
|
||||
},
|
||||
{
|
||||
"maintainer": "lateautumn233",
|
||||
"maintainer_link": "https://github.com/lateautumn233",
|
||||
"kernel_name": "android_kernel_oneplus_sm8250",
|
||||
"kernel_link": "https://github.com/lateautumn233/android_kernel_oneplus_sm8250",
|
||||
"devices": "OnePlus 8 Serials"
|
||||
},
|
||||
{
|
||||
"maintainer": "Sreeshankar K",
|
||||
"maintainer_link": "https://github.com/sreeshankark",
|
||||
"kernel_name": "NeverSettle Kernel",
|
||||
"kernel_link": "https://github.com/sreeshankark/android_kernel_oneplus_avicii",
|
||||
"maintainer": "PSavarMattas",
|
||||
"maintainer_link": "https://github.com/psavarmattas",
|
||||
"kernel_name": "PSM Kernel",
|
||||
"kernel_link": "https://github.com/psavarmattas/android_kernel_oneplus_sm7250-WKSU",
|
||||
"devices": "OnePlus Nord (avicii)"
|
||||
},
|
||||
{
|
||||
@@ -276,7 +262,7 @@
|
||||
"maintainer": "bggRGjQaUbCoE",
|
||||
"maintainer_link": "https://github.com/bggRGjQaUbCoE",
|
||||
"kernel_name": "android_kernel_samsung_sm8250",
|
||||
"kernel_link": "https://github.com/bggRGjQaUbCoE/android_kernel_samsung_sm8250",
|
||||
"kernel_link": "https://github.com/bggRGjQaUbCoE/android_kernel_samsung_sm8250-mohammad92",
|
||||
"devices": "Samsung Galaxy S20+ 5G (y2q)"
|
||||
},
|
||||
{
|
||||
@@ -321,13 +307,6 @@
|
||||
"kernel_link": "https://github.com/Sr-Han/kernel_xiaomi_mojito",
|
||||
"devices": "Redmi Note 10 (Sunny/Mojito)"
|
||||
},
|
||||
{
|
||||
"maintainer": "dabao1955",
|
||||
"maintainer_link": "https://github.com/dabao1955",
|
||||
"kernel_name": "android_kernel_OPPO_OP4ED5",
|
||||
"kernel_link": "https://github.com/dabao1955/android_kernel_OPPO_OP4ED5",
|
||||
"devices": "OPPO Reno6 on ColorOS11.x/ColorOS12.x\uff0ckernel version4.14.186+"
|
||||
},
|
||||
{
|
||||
"maintainer": "rushiranpise",
|
||||
"maintainer_link": "https://github.com/rushiranpise",
|
||||
@@ -422,8 +401,8 @@
|
||||
{
|
||||
"maintainer": "Coconutat",
|
||||
"maintainer_link": "https://github.com/Coconutat",
|
||||
"kernel_name": "android_kernel_xiaomi_sdm845_exp",
|
||||
"kernel_link": "https://github.com/Coconutat/android_kernel_xiaomi_sdm845_exp",
|
||||
"kernel_name": "android_kernel_xiaomi_sdm845_byd_exp",
|
||||
"kernel_link": "https://github.com/Coconutat/android_kernel_xiaomi_sdm845_byd_exp",
|
||||
"devices": "Xiaomi Mi 8 Pro(UD)[equuleus]/Explorer Edition[ursa]"
|
||||
},
|
||||
{
|
||||
@@ -433,13 +412,6 @@
|
||||
"kernel_link": "https://github.com/Nova-Kernels/kernel_xiaomi_mt6785",
|
||||
"devices": "Redmi Note 8 Pro (Begonia/Begoniain)"
|
||||
},
|
||||
{
|
||||
"maintainer": "Abdul Wahid Khan",
|
||||
"maintainer_link": "https://github.com/Wahid7852",
|
||||
"kernel_name": "kernel_xiaomi_marble",
|
||||
"kernel_link": "https://github.com/Nova-Kernels/kernel_xiaomi_marble",
|
||||
"devices": "Xiaomi Poco F5 / Redmi Note 12 Turbo (Marble)"
|
||||
},
|
||||
{
|
||||
"maintainer": "zfdx123",
|
||||
"maintainer_link": "https://github.com/zfdx123",
|
||||
@@ -452,21 +424,7 @@
|
||||
"maintainer_link": "https://github.com/wxt1221",
|
||||
"kernel_name": "android_kernel_oneplus_sdm845",
|
||||
"kernel_link": "https://github.com/wxt1221/android_kernel_oneplus_sdm845",
|
||||
"devices": "Oneplus 6 (enchilada) | Oneplus 6T (fajita) with no Retrofit Dynamic Partitions"
|
||||
},
|
||||
{
|
||||
"maintainer": "zharzinhoo",
|
||||
"maintainer_link": "https://github.com/zharzinhoo",
|
||||
"kernel_name": "Kernel-Oriente-Guamp",
|
||||
"kernel_link": "https://github.com/zharzinhoo/Kernel-Oriente-Guamp",
|
||||
"devices": "Moto g9 play"
|
||||
},
|
||||
{
|
||||
"maintainer": "hc841",
|
||||
"maintainer_link": "https://github.com/hc841",
|
||||
"kernel_name": "NovaCore_kernel",
|
||||
"kernel_link": "https://github.com/hc841/NovaCore_kernel",
|
||||
"devices": "Moto g9 play"
|
||||
"devices": "Oneplus 6 (enchilada) | Oneplus 6T (fajita) with Retrofit Dynamic Partitions"
|
||||
},
|
||||
{
|
||||
"maintainer": "zlm324",
|
||||
@@ -489,13 +447,6 @@
|
||||
"kernel_link": "https://github.com/Vincent4440/android_kernel_xiaomi_sm8250",
|
||||
"devices": "Poco F4: munch"
|
||||
},
|
||||
{
|
||||
"maintainer": "zharzinhoo",
|
||||
"maintainer_link": "https://github.com/zharzinhoo",
|
||||
"kernel_name": "android_kernel_motorola_cebu",
|
||||
"kernel_link": "https://github.com/zharzinhoo/android_kernel_motorola_cebu",
|
||||
"devices": "Moto g9 power"
|
||||
},
|
||||
{
|
||||
"maintainer": "tiandoufayale",
|
||||
"maintainer_link": "https://github.com/tiandoufayale",
|
||||
@@ -529,7 +480,7 @@
|
||||
"maintainer_link": "https://github.com/whyakari",
|
||||
"kernel_name": "android_kernel_xiaomi_ginkgo",
|
||||
"kernel_link": "https://github.com/whyakari/android_kernel_xiaomi_ginkgo",
|
||||
"devices": "non-GKI ginkgo"
|
||||
"devices": "Xiaomi Redmi Note 8/8T (ginkgo/willow)"
|
||||
},
|
||||
{
|
||||
"maintainer": "wulan17",
|
||||
@@ -551,5 +502,61 @@
|
||||
"kernel_name": "liquid_kernel_realme_even",
|
||||
"kernel_link": "https://github.com/liquidprjkt/liquid_kernel_realme_even",
|
||||
"devices": "Realme C25/s and Narzo50A (even)"
|
||||
},
|
||||
{
|
||||
"maintainer": "CoolestEnoch",
|
||||
"maintainer_link": "https://github.com/CoolestEnoch",
|
||||
"kernel_name": "kernel-su-huawei-nova2",
|
||||
"kernel_link": "https://github.com/CoolestEnoch/kernel-su-huawei-nova2",
|
||||
"devices": "Huawei nova 2 (pic)"
|
||||
},
|
||||
{
|
||||
"maintainer": "BlackMesa123",
|
||||
"maintainer_link": "https://xdaforums.com/t/kernel-a528b-n-kernelsu-v0-7-1-for-galaxy-a52s-5g.4603287/",
|
||||
"kernel_name": "android_kernel_samsung_sm7325",
|
||||
"kernel_link": "https://github.com/BlackMesa123/android_kernel_samsung_sm7325/tree/sep-14.1/ksu",
|
||||
"devices": "Samsung Galaxy A52s 5G (a52sxq)"
|
||||
},
|
||||
{
|
||||
"maintainer": "BlackMesa123",
|
||||
"maintainer_link": "https://xdaforums.com/t/kernel-m526b-br-kernelsu-v0-7-1-for-galaxy-m52-5g.4603295/",
|
||||
"kernel_name": "android_kernel_samsung_sm7325",
|
||||
"kernel_link": "https://github.com/BlackMesa123/android_kernel_samsung_sm7325/tree/sep-14.1/ksu",
|
||||
"devices": "Samsung Galaxy M52 5G (m52xq)"
|
||||
},
|
||||
{
|
||||
"maintainer": "A-JiuA",
|
||||
"maintainer_link": "https://github.com/A-JiuA",
|
||||
"kernel_name": "sirius_Kernel",
|
||||
"kernel_link": "https://github.com/A-JiuA/sirius_Kernel",
|
||||
"devices": "Xiaomi MI 8 SE(MIUI12/12.5)"
|
||||
},
|
||||
{
|
||||
"maintainer": "picasso09",
|
||||
"maintainer_link": "https://github.com/picasso09",
|
||||
"kernel_name": "KernelSU-RM6765R",
|
||||
"kernel_link": "https://github.com/picasso09/RMX2189R/tree/c05-ksu",
|
||||
"devices": "Realme C11 12 15 (RM6765)"
|
||||
},
|
||||
{
|
||||
"maintainer": "josedelinux",
|
||||
"maintainer_link": "https://github.com/josedelinux",
|
||||
"kernel_name": "kernel_google_msm-4.9",
|
||||
"kernel_link": "https://github.com/josedelinux/kernel_google_msm-4.9",
|
||||
"devices": "Google Pixel 3a & 3a XL (sargo & bonito)"
|
||||
},
|
||||
{
|
||||
"maintainer": "rsuntk",
|
||||
"maintainer_link": "https://github.com/rsuntk",
|
||||
"kernel_name": "android_kernel_samsung_a12s-4.19-rebased",
|
||||
"kernel_link": "https://github.com/rsuntk/android_kernel_samsung_a12s-4.19-rebased",
|
||||
"devices": "Samsung Galaxy A12s (Nacho) | Exynos 850"
|
||||
},
|
||||
{
|
||||
"maintainer": "Lonelystar9x",
|
||||
"maintainer_link": "https://github.com/lonelystar9x",
|
||||
"kernel_name": "Kernel_xiaomi_sdm845",
|
||||
"kernel_link": "https://github.com/lonelystar9x/android_kernel_xiaomi_sdm845",
|
||||
"devices": "Poco F1 | MI8 | MiMix2S | MiMix3"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Проверьте, поддерживается ли ваше устройство {#check-if-supported}
|
||||
|
||||
Скачайте приложение менеджера KernelSU с сайта [GitHub Releases](https://github.com/tiann/KernelSU/releases) или [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu) и установите его на устройство:
|
||||
Скачайте приложение менеджера KernelSU с сайта [GitHub Releases](https://github.com/tiann/KernelSU/releases) и установите его на устройство:
|
||||
|
||||
- Если приложение показывает `Unsupported`, это означает, что **Вы должны скомпилировать ядро самостоятельно**, KernelSU не будет и никогда не предоставит Вам загрузочный образ для прошивки.
|
||||
- Если приложение показывает `Не установлено`, значит, ваши устройства официально поддерживаются KernelSU.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Kiểm tra xem thiết bị của bạn có được hỗ trợ không
|
||||
|
||||
Tải xuống APP KernelSU manager từ [GitHub Releases](https://github.com/tiann/KernelSU/releases) hoặc [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu) và cài đặt nó vào thiết bị của bạn:
|
||||
Tải xuống APP KernelSU manager từ [GitHub Releases](https://github.com/tiann/KernelSU/releases) và cài đặt nó vào thiết bị của bạn:
|
||||
|
||||
- Nếu ứng dụng hiển thị `Unsupported`, nghĩa là **Bạn nên tự biên dịch kernel**, KernelSU sẽ không và không bao giờ cung cấp boot image để bạn flash.
|
||||
- Nếu ứng dụng hiển thị `Not installed` thì thiết bị của bạn đã được KernelSU hỗ trợ chính thức.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 检查您的设备是否被支持 {#check-if-supported}
|
||||
|
||||
从 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 或 [酷安](https://www.coolapk.com/apk/me.weishu.kernelsu) 下载 KernelSU 管理器应用,然后将应用程序安装到设备并打开:
|
||||
从 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 下载 KernelSU 管理器应用,然后将应用程序安装到设备并打开:
|
||||
|
||||
- 如果应用程序显示 “不支持”,则表示您的设备不支持 KernelSU,你需要自己编译设备的内核才能使用,KernelSU 官方不会也永远不会为你提供一个可以刷写的 boot 镜像。
|
||||
- 如果应用程序显示 “未安装”,那么 KernelSU 支持您的设备;可以进行下一步操作。
|
||||
@@ -43,61 +43,38 @@ w .x .y -zzz -k -something
|
||||
请注意,内核版本中的 SubLevel 不属于 KMI 的范畴!也就是说 `5.10.101-android12-9-g30979850fc20` 与 `5.10.137-android12-9-g30979850fc20` 的 KMI 相同!
|
||||
:::
|
||||
|
||||
### 安全补丁级别 {#security-patch-level}
|
||||
|
||||
新的 Android 设备上可能采取了防回滚机制,它不允许刷入一个安全补丁更旧的内核。比如,如果你的设备内核是 `5.10.101-android12-9-g30979850fc20`,它的安全补丁为 `2023-11`;即使你刷入与内核 KMI 一致的内核,如果安全补丁级别比 `2023-11`要老(例如`2023-06`),那么很可能会无法开机。
|
||||
|
||||
因此,在保持 KMI 一致的情况下,优先采用安全补丁级别更新的内核。
|
||||
|
||||
### 内核版本与 Android 版本 {#kernel-version-vs-android-version}
|
||||
|
||||
请注意:**内核版本与 Android 版本并不一定相同!**
|
||||
|
||||
如果您发现您的内核版本是 `android12-5.10.101`,然而你 Android 系统的版本为 Android 13 或者其他;请不要觉得奇怪,因为 Android 系统的版本与 Linux 内核的版本号不一定是一致的;Linux 内核的版本号一般与**设备出厂的时候自带的 Android 系统的版本一致**,如果后续 Android 系统升级,内核版本一般不会发生变化。如果你需要刷机,**请以内核版本为准!!**
|
||||
|
||||
## 安装介绍 {#installation-introduction}
|
||||
## 安装介绍 {#installationintroduction}
|
||||
|
||||
KernelSU 的安装方法有如下几种,各自适用于不同的场景,请按需选择:
|
||||
|
||||
1. 使用自定义 Recovery(如 TWRP)安装
|
||||
2. 使用内核刷写 App,如 (Franco Kernel Manager)安装
|
||||
3. 使用 KernelSU 提供的 boot.img 使用 fastboot 安装
|
||||
4. 手动修补 boot.img 然后安装
|
||||
|
||||
## 使用自定义 Recovery 安装 {#install-by-recovery}
|
||||
|
||||
前提:你的设备必须有自定义的 Recovery,如 TWRP;如果没有或者只有官方 Recovery,请使用其他方法。
|
||||
|
||||
步骤:
|
||||
|
||||
1. 在 KernelSU 的 [Release 页面](https://github.com/tiann/KernelSU/releases) 下载与你手机版本匹配的以 AnyKernel3 开头的 zip 刷机包;例如,手机内核版本为 `android12-5.10.66`,那么你应该下载 `AnyKernel3-android12-5.10.66_yyyy-MM.zip` 这个文件(其中 `yyyy` 为年份,`MM` 为月份)。
|
||||
2. 重启手机进入 TWRP。
|
||||
3. 使用 adb 将 AnyKernel3-*.zip 放到手机 /sdcard 然后在 TWRP 图形界面选择安装;或者你也可以直接 `adb sideload AnyKernel-*.zip` 安装。
|
||||
|
||||
PS. 这种方法适用于任何情况下的安装(不限于初次安装或者后续升级),只要你用 TWRP 就可以操作。
|
||||
|
||||
## 使用内核刷写 App 安装 {#install-by-kernel-flasher}
|
||||
|
||||
前提:你的设备必须已经 root。例如你已经安装了 Magisk 获取了 root,或者你已经安装了旧版本的 KernelSU 需要升级到其他版本的 KernelSU;如果你的设备无 root,请尝试其他方法。
|
||||
|
||||
步骤:
|
||||
|
||||
1. 下载 AnyKernel3 的刷机包;下载方法参考 *使用自定义 Recovery 安装*那一节的内容。
|
||||
2. 打开内核刷写 App 使用提供的 AnyKernel3 刷机包刷入。
|
||||
|
||||
如果你之前没有用过内核刷写 App,那么下面几个是比较流行的:
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
PS. 这种方法在升级 KernelSU 的时候较为方便,无需电脑即可完成(注意备份!)。
|
||||
1. 使用 KernelSU 提供的**通用内核镜像**使用 fastboot 安装
|
||||
2. 使用内核刷写 App(如 KernelFlasher)安装
|
||||
3. 手动修补 boot.img 然后安装
|
||||
4. 使用自定义 Recovery(如 TWRP)安装
|
||||
|
||||
## 使用 KernelSU 提供的 boot.img 安装 {#install-by-kernelsu-boot-image}
|
||||
|
||||
这种方法无需你有 TWRP,也不需要你的手机有 root 权限;适用于你初次安装 KernelSU。
|
||||
如果你设备的 `boot.img` 采用常用的压缩格式,那么可以采用 KernelSU 提供的的通用内核镜像直接刷入,它不需要 TWRP 或者自行修补镜像。
|
||||
|
||||
### 找到合适的 boot.img {#found-propery-image}
|
||||
|
||||
KernelSU 为 GKI 设备提供了通用的 boot.img,您应该将 boot.img 刷写到设备的 boot 分区。
|
||||
|
||||
您可以从 [GitHub Release](https://github.com/tiann/KernelSU/releases) 下载 boot.img, 请注意您应该使用正确版本的 boot.img. 例如,如果您的设备显示内核是 `android12-5.10.101`, 需要下载 `android-5.10.101_yyyy-MM.boot-<format>.img`.
|
||||
您可以从 [GitHub Release](https://github.com/tiann/KernelSU/releases) 下载 boot.img, 请注意您应该使用正确版本的 boot.img。如果您不知道应该下载哪一个文件,请仔细阅读本文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述。
|
||||
|
||||
其中 `<format>` 指的是你的官方 boot.img 的内核压缩格式,请检查您原有 boot.img 的内核压缩格式,您应该使用正确的格式,例如 `lz4`、`gz`;如果是用不正确的压缩格式,刷入 boot 后可能无法开机。
|
||||
通常情况下,同一个 KMI 和 安全补丁级别下会有三个不同格式的 boot 文件,它们除了内核压缩格式不同之外都一样。请检查您原有 boot.img 的内核压缩格式,您应该使用正确的格式,例如 `lz4`、`gz`;如果是用不正确的压缩格式,刷入 boot 后可能无法开机。
|
||||
|
||||
::: info
|
||||
1. 您可以通过 magiskboot 来获取你原来 boot 的压缩格式;当然您也可以询问与您机型相同的其他更有经验的童鞋。另外,内核的压缩格式通常不会发生变化,如果您使用某个压缩格式成功开机,后续可优先尝试这个格式。
|
||||
@@ -125,32 +102,47 @@ fastboot flash boot boot.img
|
||||
fastboot reboot
|
||||
```
|
||||
|
||||
## 使用内核刷写 App 安装 {#install-by-kernel-flasher}
|
||||
|
||||
步骤:
|
||||
|
||||
1. 下载 AnyKernel3 的刷机包,如果你不知道下载哪一个,请仔细查阅上述文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
|
||||
2. 打开内核刷写 App(授予必要的 root 权限),使用提供的 AnyKernel3 刷机包刷入。
|
||||
|
||||
这种方法需要内核刷写 App 拥有 root 权限,你可以用如下几种方法实现:
|
||||
|
||||
1. 你的设备已经获取了 root 权限,比如你已经安装好了 KernelSU 想升级到最新的版本,又或者你通过其他方法(如 Magisk)获取了 root。
|
||||
2. 如果你的手机没有 root,但手机支持 `fastboot boot boot.img` 这种临时启动的方法,你可以用 KernelSU 提供的 GKI 镜像临时启动你的设备,获取临时的 root 权限,然后使用内核刷写器刷入获取永久 root 权限。
|
||||
|
||||
|
||||
If you haven’t used kernel flashing apps before, the following are recommended:
|
||||
|
||||
1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases)
|
||||
2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel)
|
||||
3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager)
|
||||
|
||||
## 手动修补 boot.img {#patch-boot-image}
|
||||
|
||||
对于某些设备来说,其 boot.img 格式不那么常见,比如不是 `lz4`, `gz` 和未压缩;最典型的就是 Pixel,它 boot.img 的格式是 `lz4_legacy` 压缩,ramdisk 可能是 `gz` 也可能是 `lz4_legacy` 压缩;此时如果你直接刷入 KernelSU 提供的 boot.img,手机可能无法开机;这时候,你可以通过手动修补 boot.img 来实现。
|
||||
|
||||
修补方法总体有两种:
|
||||
任何情况下都推荐使用 `magiskboot` 来修补 boot 镜像,有两个方法:
|
||||
|
||||
1. [Android-Image-Kitchen](https://forum.xda-developers.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/)
|
||||
2. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
1. [magiskboot](https://github.com/topjohnwu/Magisk/releases)
|
||||
2. [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci)
|
||||
|
||||
其中,Android-Image-Kitchen 适用于 PC 上操作,magiskboot 需要手机配合。
|
||||
Magisk 官方提供的 `magiskboot` 只能运行在 Android/Linux 设备上,如果你想在 macOS/Windows 上使用 `magiskboot` 可以使用第二个方法。
|
||||
|
||||
::: tip
|
||||
不再推荐使用 Android-Image-Kitchen,因为它可能没有合理地处理 boot 元数据(比如安全补丁级别),从而导致某些设备上会无法启动。
|
||||
:::
|
||||
|
||||
### 准备 {#patch-preparation}
|
||||
|
||||
1. 获取你手机的原厂 boot.img;你可以通过你手机的线刷包解压后之间获取,如果你是卡刷包,那你也许需要[payload-dumper-go](https://github.com/ssut/payload-dumper-go)
|
||||
2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包(可以参考 *自定义 TWRP 刷入一节*)。
|
||||
2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包;如果您不知道应该下载哪一个文件,请仔细阅读本文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述。
|
||||
3. 解压缩 AnyKernel3 刷机包,获取其中的 `Image` 文件,此文件为 KernelSU 的内核文件。
|
||||
|
||||
### 使用 Android-Image-Kitchen {#using-android-image-kitchen}
|
||||
|
||||
1. 下载 Android-Image-Kitchen 至你电脑
|
||||
2. 将手机原厂 boot.img 放入 Android-Image-Kitchen 根目录
|
||||
3. 在 Android-Image-Kitchen 根目录执行 `./unpackimg.sh boot.img`;此命名会将 boot.img 拆开,你会得到若干文件。
|
||||
4. 将`split_img` 目录中的 `boot.img-kernel` 替换为你从 AnyKernel3 解压出来的 `Image`(注意名字改为 boot.img-kernel)。
|
||||
5. 在 Android-Image-Kitchecn 根目录执行 `./repackimg.sh`;此时你会得到一个 `image-new.img` 的文件;使用此 boot.img 通过 fastboot 刷入即可(刷入方法参考上一节)。
|
||||
|
||||
### 使用 magiskboot {#using magiskboot}
|
||||
### 在 Android 设备上使用 magiskboot {#using-magiskboot-on-Android-devices}
|
||||
|
||||
1. 在 Magisk 的 [Release 页面](https://github.com/topjohnwu/Magisk/releases) 下载最新的 Magisk 安装包。
|
||||
2. 将 Magisk-*.apk 重命名为 Magisk-vesion.zip 然后解压缩。
|
||||
@@ -161,9 +153,36 @@ fastboot reboot
|
||||
7. 使用 `Image` 替换 `kernel`: `mv -f Image kernel`
|
||||
8. 执行 `./magiskboot repack boot.img` 打包 img,此时你会得到一个 `new-boot.img` 的文件,使用这个文件 fastboot 刷入设备即可。
|
||||
|
||||
### 在 macOS/Windows/Linux 上使用 magiskboot {#using-magiskboot-on-PC}
|
||||
|
||||
1. 在 [magiskboot_build](https://github.com/ookiineko/magiskboot_build/releases/tag/last-ci) 下载适合你操作系统的 `magiskboot` 二进制文件。
|
||||
2. 在你的 PC 上准备好设备原厂的 boot.img 和 KernelSU 的 Image。
|
||||
3. `chmod +x magiskboot`
|
||||
4. 在你 PC 上合适的目录执行 `./magiskboot unpack boot.img` 来解包 `boot.img`, 你会得到一个 `kernel` 文件,这个文件是你设备原厂的 kernel。
|
||||
5. 使用 `Image` 替换 `kernel`: `mv -f Image kernel`
|
||||
6. 执行 `./magiskboot repack boot.img` 打包 img,此时你会得到一个 `new-boot.img` 的文件,使用这个文件 fastboot 刷入设备即可。
|
||||
|
||||
:::info
|
||||
Magisk 官方的 `magiskboot` 可以在 Linux 设备上执行,如果你是 Linux 用户,可以直接用官方版本。
|
||||
:::
|
||||
|
||||
## 使用自定义 Recovery 安装 {#install-by-recovery}
|
||||
|
||||
前提:你的设备必须有自定义的 Recovery,如 TWRP;如果没有或者只有官方 Recovery,请使用其他方法。
|
||||
|
||||
步骤:
|
||||
|
||||
1. 在 KernelSU 的 [Release 页面](https://github.com/tiann/KernelSU/releases) 下载与你手机版本匹配的以 AnyKernel3 开头的 zip 刷机包;如果你不知道下载哪一个,请仔细查阅上述文档中关于**KMI**和**安全补丁级别**的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
|
||||
2. 重启手机进入 TWRP。
|
||||
3. 使用 adb 将 AnyKernel3-*.zip 放到手机 /sdcard 然后在 TWRP 图形界面选择安装;或者你也可以直接 `adb sideload AnyKernel-*.zip` 安装。
|
||||
|
||||
PS. 这种方法适用于任何情况下的安装(不限于初次安装或者后续升级),只要你用 TWRP 就可以操作。
|
||||
|
||||
## 其他变通方法 {#other-methods}
|
||||
|
||||
其实所有这些安装方法的主旨只有一个,那就是**替换原厂的内核为 KernelSU 提供的内核**;只要能实现这个目的,就可以安装;比如以下是其他可行的方法:
|
||||
|
||||
1. 首先安装 Magisk,通过 Magisk 获取 root 权限后使用内核刷写器刷入 KernelSU 的 AnyKernel 包。
|
||||
2. 使用某些 PC 上的刷机工具箱刷入 KernelSU 提供的内核。
|
||||
|
||||
如果这些方法导致无法开机,请优先尝试用 `magiskboot` 的方法。
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 檢查您的裝置是否受支援 {#check-if-supported}
|
||||
|
||||
從 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 或 [酷安](https://www.coolapk.com/apk/me.weishu.kernelsu) 下載 KernelSU 管理員應用程式,然後將應用程式安裝至裝置並開啟:
|
||||
從 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 下載 KernelSU 管理員應用程式,然後將應用程式安裝至裝置並開啟:
|
||||
|
||||
- 如果應用程式顯示「不支援」,則表示您的裝置不支援 KernelSU,您需要自行編譯核心才能繼續使用,,KernelSU 官方也永遠不會為您提供一個可以刷新的 Boot 映像。
|
||||
- 如果應用程式顯示「未安裝」,那麼 KernelSU 支援您的裝置;可以進行下一步作業。
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"author": "weishu",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.0.0-rc.25",
|
||||
"vitepress": "^1.0.0-rc.33",
|
||||
"vue": "^3.3.8"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -138,6 +138,11 @@
|
||||
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9"
|
||||
integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==
|
||||
|
||||
"@babel/parser@^7.23.6":
|
||||
version "7.23.6"
|
||||
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
|
||||
integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
|
||||
|
||||
"@docsearch/css@3.5.2", "@docsearch/css@^3.5.2":
|
||||
version "3.5.2"
|
||||
resolved "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.2.tgz#610f47b48814ca94041df969d9fcc47b91fc5aac"
|
||||
@@ -161,130 +166,200 @@
|
||||
"@docsearch/css" "3.5.2"
|
||||
algoliasearch "^4.19.1"
|
||||
|
||||
"@esbuild/android-arm64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
|
||||
integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
|
||||
"@esbuild/aix-ppc64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz#fb3922a0183d27446de00cf60d4f7baaadf98d84"
|
||||
integrity sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==
|
||||
|
||||
"@esbuild/android-arm@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
|
||||
integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
|
||||
"@esbuild/android-arm64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz#ef31015416dd79398082409b77aaaa2ade4d531a"
|
||||
integrity sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==
|
||||
|
||||
"@esbuild/android-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
|
||||
integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
|
||||
"@esbuild/android-arm@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.10.tgz#1c23c7e75473aae9fb323be5d9db225142f47f52"
|
||||
integrity sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==
|
||||
|
||||
"@esbuild/darwin-arm64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
|
||||
integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
|
||||
"@esbuild/android-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.10.tgz#df6a4e6d6eb8da5595cfce16d4e3f6bc24464707"
|
||||
integrity sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==
|
||||
|
||||
"@esbuild/darwin-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
|
||||
integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
|
||||
"@esbuild/darwin-arm64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz#8462a55db07c1b2fad61c8244ce04469ef1043be"
|
||||
integrity sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
|
||||
integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
|
||||
"@esbuild/darwin-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz#d1de20bfd41bb75b955ba86a6b1004539e8218c1"
|
||||
integrity sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==
|
||||
|
||||
"@esbuild/freebsd-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
|
||||
integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
|
||||
"@esbuild/freebsd-arm64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz#16904879e34c53a2e039d1284695d2db3e664d57"
|
||||
integrity sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==
|
||||
|
||||
"@esbuild/linux-arm64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
|
||||
integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
|
||||
"@esbuild/freebsd-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz#8ad9e5ca9786ca3f1ef1411bfd10b08dcd9d4cef"
|
||||
integrity sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==
|
||||
|
||||
"@esbuild/linux-arm@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
|
||||
integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
|
||||
"@esbuild/linux-arm64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz#d82cf2c590faece82d28bbf1cfbe36f22ae25bd2"
|
||||
integrity sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==
|
||||
|
||||
"@esbuild/linux-ia32@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
|
||||
integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
|
||||
"@esbuild/linux-arm@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz#477b8e7c7bcd34369717b04dd9ee6972c84f4029"
|
||||
integrity sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==
|
||||
|
||||
"@esbuild/linux-loong64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
|
||||
integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
|
||||
"@esbuild/linux-ia32@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz#d55ff822cf5b0252a57112f86857ff23be6cab0e"
|
||||
integrity sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==
|
||||
|
||||
"@esbuild/linux-mips64el@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
|
||||
integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
|
||||
"@esbuild/linux-loong64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz#a9ad057d7e48d6c9f62ff50f6f208e331c4543c7"
|
||||
integrity sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==
|
||||
|
||||
"@esbuild/linux-ppc64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
|
||||
integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
|
||||
"@esbuild/linux-mips64el@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz#b011a96924773d60ebab396fbd7a08de66668179"
|
||||
integrity sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==
|
||||
|
||||
"@esbuild/linux-riscv64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
|
||||
integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
|
||||
"@esbuild/linux-ppc64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz#5d8b59929c029811e473f2544790ea11d588d4dd"
|
||||
integrity sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==
|
||||
|
||||
"@esbuild/linux-s390x@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
|
||||
integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
|
||||
"@esbuild/linux-riscv64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz#292b06978375b271bd8bc0a554e0822957508d22"
|
||||
integrity sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==
|
||||
|
||||
"@esbuild/linux-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
|
||||
integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
|
||||
"@esbuild/linux-s390x@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz#d30af63530f8d4fa96930374c9dd0d62bf59e069"
|
||||
integrity sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==
|
||||
|
||||
"@esbuild/netbsd-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
|
||||
integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
|
||||
"@esbuild/linux-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz#898c72eeb74d9f2fb43acf316125b475548b75ce"
|
||||
integrity sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==
|
||||
|
||||
"@esbuild/openbsd-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
|
||||
integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
|
||||
"@esbuild/netbsd-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz#fd473a5ae261b43eab6dad4dbd5a3155906e6c91"
|
||||
integrity sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==
|
||||
|
||||
"@esbuild/sunos-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
|
||||
integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
|
||||
"@esbuild/openbsd-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz#96eb8992e526717b5272321eaad3e21f3a608e46"
|
||||
integrity sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==
|
||||
|
||||
"@esbuild/win32-arm64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
|
||||
integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
|
||||
"@esbuild/sunos-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz#c16ee1c167f903eaaa6acf7372bee42d5a89c9bc"
|
||||
integrity sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==
|
||||
|
||||
"@esbuild/win32-ia32@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
|
||||
integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
|
||||
"@esbuild/win32-arm64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz#7e417d1971dbc7e469b4eceb6a5d1d667b5e3dcc"
|
||||
integrity sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==
|
||||
|
||||
"@esbuild/win32-x64@0.18.20":
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
|
||||
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
|
||||
"@esbuild/win32-ia32@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz#2b52dfec6cd061ecb36171c13bae554888b439e5"
|
||||
integrity sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==
|
||||
|
||||
"@esbuild/win32-x64@0.19.10":
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz#bd123a74f243d2f3a1f046447bb9b363ee25d072"
|
||||
integrity sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.15":
|
||||
version "1.4.15"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
||||
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz#beaf518ee45a196448e294ad3f823d2d4576cf35"
|
||||
integrity sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz#6f76cfa759c2d0fdb92122ffe28217181a1664eb"
|
||||
integrity sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz#9aaefe33a5481d66322d1c62f368171c03eabe2b"
|
||||
integrity sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz#707dcaadcdc6bd3fd6c69f55d9456cd4446306a3"
|
||||
integrity sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz#7a4dbbd1dd98731d88a55aefcef0ec4c578fa9c7"
|
||||
integrity sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz#967ba8e6f68a5f21bd00cd97773dcdd6107e94ed"
|
||||
integrity sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz#d3a4e1c9f21eef3b9f4e4989f334a519a1341462"
|
||||
integrity sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz#415c0533bb752164effd05f5613858e8f6779bc9"
|
||||
integrity sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz#0983385dd753a2e0ecaddea7a81dd37fea5114f5"
|
||||
integrity sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz#eb7494ebc5199cbd2e5c38c2b8acbe2603f35e03"
|
||||
integrity sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz#5bebc66e3a7f82d4b9aa9ff448e7fc13a69656e9"
|
||||
integrity sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz#34156ebf8b4de3b20e6497260fe519a30263f8cf"
|
||||
integrity sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.9.1":
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz#d146db7a5949e10837b323ce933ed882ac878262"
|
||||
integrity sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==
|
||||
|
||||
"@types/linkify-it@*":
|
||||
version "3.0.5"
|
||||
resolved "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8"
|
||||
integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==
|
||||
|
||||
"@types/markdown-it@^13.0.4":
|
||||
version "13.0.6"
|
||||
resolved "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-13.0.6.tgz#5aedafc4ab60adc66397d2b2f622e44b6a938a12"
|
||||
integrity sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==
|
||||
"@types/markdown-it@^13.0.7":
|
||||
version "13.0.7"
|
||||
resolved "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-13.0.7.tgz#4a495115f470075bd4434a0438ac477a49c2e152"
|
||||
integrity sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==
|
||||
dependencies:
|
||||
"@types/linkify-it" "*"
|
||||
"@types/mdurl" "*"
|
||||
@@ -299,10 +374,10 @@
|
||||
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597"
|
||||
integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
|
||||
|
||||
"@vitejs/plugin-vue@4.3.1":
|
||||
version "4.3.1"
|
||||
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz#635cf512dd1d5c78adf9e24615696e4918cd9d88"
|
||||
integrity sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==
|
||||
"@vitejs/plugin-vue@^5.0.0":
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.0.tgz#8e8946548e6dfd9eb0391bbc282ec8e52103e0dd"
|
||||
integrity sha512-7x5e8X4J1Wi4NxudGjJBd2OFerAi/0nzF80ojCzvfj347WVr0YSn82C8BSsgwSHzlk9Kw5xnZfj0/7RLnNwP5w==
|
||||
|
||||
"@vue/compiler-core@3.3.8":
|
||||
version "3.3.8"
|
||||
@@ -314,6 +389,17 @@
|
||||
estree-walker "^2.0.2"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
"@vue/compiler-core@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.0-rc.3.tgz#85e35a5bc51190a14d3ceb9d492c2f8c5a82eb65"
|
||||
integrity sha512-95BL62LmfjoFe5QgE3eFYliOxg/euI3iDqAZWvh1XRlj/33bNrnyQo4eZI4Mmf+/e/8pOX4RBCer12STtotQIg==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.23.6"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
entities "^4.5.0"
|
||||
estree-walker "^2.0.2"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
"@vue/compiler-dom@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b"
|
||||
@@ -322,6 +408,14 @@
|
||||
"@vue/compiler-core" "3.3.8"
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
"@vue/compiler-dom@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.0-rc.3.tgz#d5280f753bc305f5853a28c6121fcb286a9977b0"
|
||||
integrity sha512-oPY5qFm80A+WfuH96XyaG2iN85fR5JcDcIcZ6bdKl10DsF3GxDMRzQ+XrTJQ/MCLs/kTQ89aYlfJsCu937Fysg==
|
||||
dependencies:
|
||||
"@vue/compiler-core" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
"@vue/compiler-sfc@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1"
|
||||
@@ -338,6 +432,21 @@
|
||||
postcss "^8.4.31"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
"@vue/compiler-sfc@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.0-rc.3.tgz#1e2f4358caf92f8d90627f989214d39466293c91"
|
||||
integrity sha512-aeQmKzHhBPXtTKwzlsR9fsmZQwN+IUMOmyIrrTjUiIzqZEA5ra1+1uBsyOFNX00ci/j09OpTjOkGLdNxfy4DDw==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.23.6"
|
||||
"@vue/compiler-core" "3.4.0-rc.3"
|
||||
"@vue/compiler-dom" "3.4.0-rc.3"
|
||||
"@vue/compiler-ssr" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.30.5"
|
||||
postcss "^8.4.32"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
"@vue/compiler-ssr@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce"
|
||||
@@ -346,6 +455,14 @@
|
||||
"@vue/compiler-dom" "3.3.8"
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
"@vue/compiler-ssr@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.0-rc.3.tgz#e2ea43ba370c7a06fdab507a58af9fd36201c430"
|
||||
integrity sha512-xZ38otNwqiWOHFhVrRBaZReqrBNfSBCvT9//gPbgPX39qwMEw8WeNGyWa4jhn7F54aiBzo48Nw+b5C1ez1Jr/Q==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
"@vue/devtools-api@^6.5.1":
|
||||
version "6.5.1"
|
||||
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697"
|
||||
@@ -369,6 +486,13 @@
|
||||
dependencies:
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
"@vue/reactivity@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.0-rc.3.tgz#65b89d3870058d21c4189e304e6c5f5d790bc49d"
|
||||
integrity sha512-B/7Yx2sfx6mJlSlzcVquFjmp3MO5i2mbPKHd/2lqnZtKh3wk3jbsz5g9fAXgIY/6Ih2CQ+4tQTPIK7/6nbJjvQ==
|
||||
dependencies:
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
"@vue/runtime-core@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb"
|
||||
@@ -377,6 +501,14 @@
|
||||
"@vue/reactivity" "3.3.8"
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
"@vue/runtime-core@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.0-rc.3.tgz#14e5873d97402461764804b93f5fa99f834c5343"
|
||||
integrity sha512-TOa0qrKaqDo1uFQyYBjDnX2/uVAXglFpfe1sgkMIINkgR023U1QxjAJt3W4K+m8SUSx492lnP0bnuSX6YEqtsA==
|
||||
dependencies:
|
||||
"@vue/reactivity" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
"@vue/runtime-dom@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4"
|
||||
@@ -386,6 +518,15 @@
|
||||
"@vue/shared" "3.3.8"
|
||||
csstype "^3.1.2"
|
||||
|
||||
"@vue/runtime-dom@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.0-rc.3.tgz#8f6390e99052c020e7e72099438225de22ac1ba7"
|
||||
integrity sha512-PT19ABVq+Cc82YMPk5CKE1zZGhlzlQ3BfZkQoh9jyU1ntcwUikj2hR93azRPMn37vEdCJqrUWPb6xOAIqMhD9A==
|
||||
dependencies:
|
||||
"@vue/runtime-core" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
csstype "^3.1.3"
|
||||
|
||||
"@vue/server-renderer@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2"
|
||||
@@ -394,39 +535,52 @@
|
||||
"@vue/compiler-ssr" "3.3.8"
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
"@vue/server-renderer@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.0-rc.3.tgz#b50fd4ab4215615227bb3ce3b31d61821140221b"
|
||||
integrity sha512-n7mPsj0NV8bLtsMhgSszC4Swx6m0O47hHK8DyDMdGKIYoKPguxJk9OlnFqZp1b9ImUimfTM1i8TiTeVoGvYU8A==
|
||||
dependencies:
|
||||
"@vue/compiler-ssr" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
"@vue/shared@3.3.8":
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d"
|
||||
integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==
|
||||
|
||||
"@vueuse/core@10.6.0", "@vueuse/core@^10.5.0":
|
||||
version "10.6.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-10.6.0.tgz#de4113cc63680d04a0c3e1e156992ca3e0d52115"
|
||||
integrity sha512-+Yee+g9+9BEbvkyGdn4Bf4yZx9EfocAytpV2ZlrlP7xcz+qznLmZIDqDroTvc5vtMkWZicisgEv8dt3+jL+HQg==
|
||||
"@vue/shared@3.4.0-rc.3":
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.0-rc.3.tgz#1374abf510576a9a20ed3c8c89d5a7991f94393c"
|
||||
integrity sha512-tUMGBEKC6QP3ekhSLt/7oAGQu98gXgaMXrbZKay9Haijf5oXhsQQb8533hxxc4+MBup+WeWGn0/uxiEBCoK9tw==
|
||||
|
||||
"@vueuse/core@10.7.1", "@vueuse/core@^10.7.0":
|
||||
version "10.7.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-10.7.1.tgz#b4bfe3355dbb0ec17d34d737385e1c8a0156ccf1"
|
||||
integrity sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==
|
||||
dependencies:
|
||||
"@types/web-bluetooth" "^0.0.20"
|
||||
"@vueuse/metadata" "10.6.0"
|
||||
"@vueuse/shared" "10.6.0"
|
||||
"@vueuse/metadata" "10.7.1"
|
||||
"@vueuse/shared" "10.7.1"
|
||||
vue-demi ">=0.14.6"
|
||||
|
||||
"@vueuse/integrations@^10.5.0":
|
||||
version "10.6.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-10.6.0.tgz#12c8d6df3a6a5a64c34bb5b98919d99e1ef071f1"
|
||||
integrity sha512-4RsM5+HF2IUOCFngdyQyvhDEFjus2gzOnPR2FbX4l+pQ4KPMMqzic1AFIq4bMYaVp32p/HF+pidTXwLJIZSQtA==
|
||||
"@vueuse/integrations@^10.7.0":
|
||||
version "10.7.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-10.7.1.tgz#c16676744bf5f0a764eea9517c78d882988cf5f7"
|
||||
integrity sha512-cKo5LEeKVHdBRBtMTOrDPdR0YNtrmN9IBfdcnY2P3m5LHVrsD0xiHUtAH1WKjHQRIErZG6rJUa6GA4tWZt89Og==
|
||||
dependencies:
|
||||
"@vueuse/core" "10.6.0"
|
||||
"@vueuse/shared" "10.6.0"
|
||||
"@vueuse/core" "10.7.1"
|
||||
"@vueuse/shared" "10.7.1"
|
||||
vue-demi ">=0.14.6"
|
||||
|
||||
"@vueuse/metadata@10.6.0":
|
||||
version "10.6.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.6.0.tgz#f652829668ba4146ab0f79d52ea26b5544f12fe8"
|
||||
integrity sha512-mzKHkHoiK6xVz01VzQjM2l6ofUanEaofgEGPgDHcAzlvOTccPRTIdEuzneOUTYxgfm1vkDikS6rtrEw/NYlaTQ==
|
||||
"@vueuse/metadata@10.7.1":
|
||||
version "10.7.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.7.1.tgz#190a8d0e97216941cc95120c89dfa2c4228b2a53"
|
||||
integrity sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==
|
||||
|
||||
"@vueuse/shared@10.6.0":
|
||||
version "10.6.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.6.0.tgz#e13f3b0f642db6467bd8aadf9693409f33f45fc4"
|
||||
integrity sha512-0t4MVE18sO+/4Gh0jfeOXBTjKeV4606N9kIrDOLPjFl8Rwnlodn+QC5A4LfJuysK7aOsTMjF3KnzNeueaI0xlQ==
|
||||
"@vueuse/shared@10.7.1":
|
||||
version "10.7.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.7.1.tgz#b9892fc31784d685619015fba287cde53873485d"
|
||||
integrity sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==
|
||||
dependencies:
|
||||
vue-demi ">=0.14.6"
|
||||
|
||||
@@ -450,43 +604,49 @@ algoliasearch@^4.19.1:
|
||||
"@algolia/requester-node-http" "4.20.0"
|
||||
"@algolia/transporter" "4.20.0"
|
||||
|
||||
ansi-sequence-parser@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed"
|
||||
integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==
|
||||
|
||||
csstype@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
|
||||
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
||||
|
||||
esbuild@^0.18.10:
|
||||
version "0.18.20"
|
||||
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
|
||||
integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
|
||||
csstype@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
|
||||
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
|
||||
|
||||
entities@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
|
||||
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
|
||||
|
||||
esbuild@^0.19.3:
|
||||
version "0.19.10"
|
||||
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.10.tgz#55e83e4a6b702e3498b9f872d84bfb4ebcb6d16e"
|
||||
integrity sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==
|
||||
optionalDependencies:
|
||||
"@esbuild/android-arm" "0.18.20"
|
||||
"@esbuild/android-arm64" "0.18.20"
|
||||
"@esbuild/android-x64" "0.18.20"
|
||||
"@esbuild/darwin-arm64" "0.18.20"
|
||||
"@esbuild/darwin-x64" "0.18.20"
|
||||
"@esbuild/freebsd-arm64" "0.18.20"
|
||||
"@esbuild/freebsd-x64" "0.18.20"
|
||||
"@esbuild/linux-arm" "0.18.20"
|
||||
"@esbuild/linux-arm64" "0.18.20"
|
||||
"@esbuild/linux-ia32" "0.18.20"
|
||||
"@esbuild/linux-loong64" "0.18.20"
|
||||
"@esbuild/linux-mips64el" "0.18.20"
|
||||
"@esbuild/linux-ppc64" "0.18.20"
|
||||
"@esbuild/linux-riscv64" "0.18.20"
|
||||
"@esbuild/linux-s390x" "0.18.20"
|
||||
"@esbuild/linux-x64" "0.18.20"
|
||||
"@esbuild/netbsd-x64" "0.18.20"
|
||||
"@esbuild/openbsd-x64" "0.18.20"
|
||||
"@esbuild/sunos-x64" "0.18.20"
|
||||
"@esbuild/win32-arm64" "0.18.20"
|
||||
"@esbuild/win32-ia32" "0.18.20"
|
||||
"@esbuild/win32-x64" "0.18.20"
|
||||
"@esbuild/aix-ppc64" "0.19.10"
|
||||
"@esbuild/android-arm" "0.19.10"
|
||||
"@esbuild/android-arm64" "0.19.10"
|
||||
"@esbuild/android-x64" "0.19.10"
|
||||
"@esbuild/darwin-arm64" "0.19.10"
|
||||
"@esbuild/darwin-x64" "0.19.10"
|
||||
"@esbuild/freebsd-arm64" "0.19.10"
|
||||
"@esbuild/freebsd-x64" "0.19.10"
|
||||
"@esbuild/linux-arm" "0.19.10"
|
||||
"@esbuild/linux-arm64" "0.19.10"
|
||||
"@esbuild/linux-ia32" "0.19.10"
|
||||
"@esbuild/linux-loong64" "0.19.10"
|
||||
"@esbuild/linux-mips64el" "0.19.10"
|
||||
"@esbuild/linux-ppc64" "0.19.10"
|
||||
"@esbuild/linux-riscv64" "0.19.10"
|
||||
"@esbuild/linux-s390x" "0.19.10"
|
||||
"@esbuild/linux-x64" "0.19.10"
|
||||
"@esbuild/netbsd-x64" "0.19.10"
|
||||
"@esbuild/openbsd-x64" "0.19.10"
|
||||
"@esbuild/sunos-x64" "0.19.10"
|
||||
"@esbuild/win32-arm64" "0.19.10"
|
||||
"@esbuild/win32-ia32" "0.19.10"
|
||||
"@esbuild/win32-x64" "0.19.10"
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
@@ -505,10 +665,10 @@ fsevents@~2.3.2:
|
||||
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
jsonc-parser@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
||||
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
||||
fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
magic-string@^0.30.5:
|
||||
version "0.30.5"
|
||||
@@ -522,22 +682,32 @@ mark.js@8.11.1:
|
||||
resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
|
||||
integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
|
||||
|
||||
minisearch@^6.1.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.npmmirror.com/minisearch/-/minisearch-6.2.0.tgz#310b50508551f22e10815f5baedeeeded03a6b5d"
|
||||
integrity sha512-BECkorDF1TY2rGKt9XHdSeP9TP29yUbrAaCh/C03wpyf1vx3uYcP/+8XlMcpTkgoU0rBVnHMAOaP83Rc9Tm+TQ==
|
||||
minisearch@^6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmmirror.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b"
|
||||
integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==
|
||||
|
||||
mrmime@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4"
|
||||
integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
|
||||
|
||||
nanoid@^3.3.6:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
|
||||
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
|
||||
|
||||
nanoid@^3.3.7:
|
||||
version "3.3.7"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
|
||||
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
postcss@^8.4.27, postcss@^8.4.31:
|
||||
postcss@^8.4.31:
|
||||
version "8.4.31"
|
||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
|
||||
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
|
||||
@@ -546,27 +716,58 @@ postcss@^8.4.27, postcss@^8.4.31:
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
postcss@^8.4.32:
|
||||
version "8.4.32"
|
||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
|
||||
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
|
||||
dependencies:
|
||||
nanoid "^3.3.7"
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
preact@^10.0.0:
|
||||
version "10.11.3"
|
||||
resolved "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19"
|
||||
integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==
|
||||
|
||||
rollup@^3.27.1:
|
||||
version "3.29.4"
|
||||
resolved "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
|
||||
integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
|
||||
rollup@^4.2.0:
|
||||
version "4.9.1"
|
||||
resolved "https://registry.npmmirror.com/rollup/-/rollup-4.9.1.tgz#351d6c03e4e6bcd7a0339df3618d2aeeb108b507"
|
||||
integrity sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.9.1"
|
||||
"@rollup/rollup-android-arm64" "4.9.1"
|
||||
"@rollup/rollup-darwin-arm64" "4.9.1"
|
||||
"@rollup/rollup-darwin-x64" "4.9.1"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.9.1"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.9.1"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.9.1"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.9.1"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.9.1"
|
||||
"@rollup/rollup-linux-x64-musl" "4.9.1"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.9.1"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.9.1"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.9.1"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
shiki@^0.14.5:
|
||||
version "0.14.5"
|
||||
resolved "https://registry.npmmirror.com/shiki/-/shiki-0.14.5.tgz#375dd214e57eccb04f0daf35a32aa615861deb93"
|
||||
integrity sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==
|
||||
shikiji-core@0.9.12:
|
||||
version "0.9.12"
|
||||
resolved "https://registry.npmmirror.com/shikiji-core/-/shikiji-core-0.9.12.tgz#9acebc32e6563c32a2aea165d24ada97462a8923"
|
||||
integrity sha512-AYsAtsbZuq0FPT3mdskNMa+yxD5VwXrFC2sH7R2ELmncVGNYvSzR6Zlfq8iEzINq7/kKL5prtt81UFzFWTTbxQ==
|
||||
|
||||
shikiji-transformers@^0.9.12:
|
||||
version "0.9.12"
|
||||
resolved "https://registry.npmmirror.com/shikiji-transformers/-/shikiji-transformers-0.9.12.tgz#f89849aedfb92f5cb677c936f7c64c5a7cdba032"
|
||||
integrity sha512-ge+47j4MLTbKAnTnhTTolD9DKGW2Fhp80MV7Tb2E+p4HsJixu4slq2SDV/eFR34iH/egtyi/cjGMD8vJbNLBUA==
|
||||
dependencies:
|
||||
ansi-sequence-parser "^1.1.0"
|
||||
jsonc-parser "^3.2.0"
|
||||
vscode-oniguruma "^1.7.0"
|
||||
vscode-textmate "^8.0.0"
|
||||
shikiji "0.9.12"
|
||||
|
||||
shikiji@0.9.12, shikiji@^0.9.12:
|
||||
version "0.9.12"
|
||||
resolved "https://registry.npmmirror.com/shikiji/-/shikiji-0.9.12.tgz#14e629f0a76ec454d2550bf75d5032168e1531de"
|
||||
integrity sha512-jYbulSGcPKYKu2uFZOSg4lgrF7s9s8/ITFzRvczE6633wypMjnnTcRnG/mCFe6v1Dbov7bRCMsXVINBUD2FV9w==
|
||||
dependencies:
|
||||
shikiji-core "0.9.12"
|
||||
|
||||
source-map-js@^1.0.2:
|
||||
version "1.0.2"
|
||||
@@ -578,52 +779,44 @@ tabbable@^6.2.0:
|
||||
resolved "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
|
||||
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
|
||||
|
||||
vite@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26"
|
||||
integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==
|
||||
vite@^5.0.10:
|
||||
version "5.0.10"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-5.0.10.tgz#1e13ef5c3cf5aa4eed81f5df6d107b3c3f1f6356"
|
||||
integrity sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==
|
||||
dependencies:
|
||||
esbuild "^0.18.10"
|
||||
postcss "^8.4.27"
|
||||
rollup "^3.27.1"
|
||||
esbuild "^0.19.3"
|
||||
postcss "^8.4.32"
|
||||
rollup "^4.2.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
fsevents "~2.3.3"
|
||||
|
||||
vitepress@^1.0.0-rc.25:
|
||||
version "1.0.0-rc.25"
|
||||
resolved "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-rc.25.tgz#9c6d94b817a9e38aa29a1f960bb464564d928b2d"
|
||||
integrity sha512-1dqWiHNThNrVZ08ixmfEDBEH+764KOgnev9oXga/x6cN++Vb9pnuu8p3K6DQP+KZrYcG+WiX7jxal0iSNpAWuQ==
|
||||
vitepress@^1.0.0-rc.33:
|
||||
version "1.0.0-rc.33"
|
||||
resolved "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-rc.33.tgz#94d13e6b54c92d569898235a811768a8ac75655b"
|
||||
integrity sha512-XMwr5eXEB3KB1uCuOkojVaqsVSijmd6N9QmaM2M6aqJqzXzxNwuvWSiEGYl4qbwRAX6/nFRofhx9+FndtCNjGQ==
|
||||
dependencies:
|
||||
"@docsearch/css" "^3.5.2"
|
||||
"@docsearch/js" "^3.5.2"
|
||||
"@types/markdown-it" "^13.0.4"
|
||||
"@vitejs/plugin-vue" "4.3.1"
|
||||
"@types/markdown-it" "^13.0.7"
|
||||
"@vitejs/plugin-vue" "^5.0.0"
|
||||
"@vue/devtools-api" "^6.5.1"
|
||||
"@vueuse/core" "^10.5.0"
|
||||
"@vueuse/integrations" "^10.5.0"
|
||||
"@vueuse/core" "^10.7.0"
|
||||
"@vueuse/integrations" "^10.7.0"
|
||||
focus-trap "^7.5.4"
|
||||
mark.js "8.11.1"
|
||||
minisearch "^6.1.0"
|
||||
shiki "^0.14.5"
|
||||
vite "^4.5.0"
|
||||
vue "^3.3.6"
|
||||
|
||||
vscode-oniguruma@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
|
||||
integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
|
||||
|
||||
vscode-textmate@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
|
||||
integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
|
||||
minisearch "^6.3.0"
|
||||
mrmime "^2.0.0"
|
||||
shikiji "^0.9.12"
|
||||
shikiji-transformers "^0.9.12"
|
||||
vite "^5.0.10"
|
||||
vue "^3.4.0-rc.2"
|
||||
|
||||
vue-demi@>=0.14.6:
|
||||
version "0.14.6"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
|
||||
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
|
||||
|
||||
vue@^3.3.6, vue@^3.3.8:
|
||||
vue@^3.3.8:
|
||||
version "3.3.8"
|
||||
resolved "https://registry.npmmirror.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc"
|
||||
integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==
|
||||
@@ -633,3 +826,14 @@ vue@^3.3.6, vue@^3.3.8:
|
||||
"@vue/runtime-dom" "3.3.8"
|
||||
"@vue/server-renderer" "3.3.8"
|
||||
"@vue/shared" "3.3.8"
|
||||
|
||||
vue@^3.4.0-rc.2:
|
||||
version "3.4.0-rc.3"
|
||||
resolved "https://registry.npmmirror.com/vue/-/vue-3.4.0-rc.3.tgz#dc0ec1a50e6e9f189c1b29c3993e9f9d70f6cc2f"
|
||||
integrity sha512-2UqOv58PSVsxIXQxS7QrHmaHwJgBHBSrQL6wjKf8HVuZoWxf45rVUTGXMP3Z1fS1jb+3hYcniPt5icdLVV9+VA==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.4.0-rc.3"
|
||||
"@vue/compiler-sfc" "3.4.0-rc.3"
|
||||
"@vue/runtime-dom" "3.4.0-rc.3"
|
||||
"@vue/server-renderer" "3.4.0-rc.3"
|
||||
"@vue/shared" "3.4.0-rc.3"
|
||||
|
||||
Reference in New Issue
Block a user