Compare commits

...

6 Commits

Author SHA1 Message Date
Arbri çoçka
9cc830c565 Update strings.xml values_sq 2025-12-05 16:22:03 -08:00
hajs1664
ddbac50645 update korean translation 2025-12-05 11:15:21 -08:00
南宫雪珊
b5138a4af0 Update unpack boot image help message 2025-12-05 11:14:45 -08:00
topjohnwu
64752f38e8 Do not unwrap when getting decoder and encoder
Or else things will crash mysteriously when unexpected input occurs
2025-12-05 03:40:18 -08:00
topjohnwu
9ac4b5ce7d Add proper lzma format detection 2025-12-05 03:40:18 -08:00
topjohnwu
505053f9b4 Properly support AVD with minor SDK version 2025-12-04 20:55:46 -08:00
8 changed files with 275 additions and 240 deletions

View File

@@ -15,18 +15,18 @@
<string name="app_changelog">앱 변경 사항</string>
<string name="loading">로딩중…</string>
<string name="update">업데이트</string>
<string name="not_available">N/A</string>
<string name="not_available">알 수 없음</string>
<string name="hide">숨기기</string>
<string name="home_package">패키지</string>
<string name="home_app_title"></string>
<string name="home_notice_content">공식 Github 페이지에서 Magisk를 다운로드하십시오. 알 수 없는 소스의 파일이 악의적일 수 있습니다!</string>
<string name="home_notice_content">공식 Github 페이지에서 Magisk를 다운로드하십시오. 알 수 없는 출처에서 받은 파일이 위험할 수 있습니다!</string>
<string name="home_support_title">후원하기</string>
<string name="home_item_source">소스</string>
<string name="home_support_content">Magisk는 항상 무료일 것이며, 오픈소스일 것입니다. 그러나 소액의 후원을 통해 관심을 표할 수 있습니다.</string>
<string name="home_installed_version">설치됨</string>
<string name="home_latest_version">최신</string>
<string name="invalid_update_channel">올바르지 않은 업데이트 채널</string>
<string name="invalid_update_channel">잘못된 업데이트 채널</string>
<string name="uninstall_magisk_title">Magisk 제거</string>
<string name="uninstall_magisk_msg">모든 모듈이 비활성화/제거됩니다. 루트도 제거될 것이며, 데이터도 암호화 되어있지 않으면 암호화될 수도 있습니다.</string>
@@ -51,11 +51,11 @@
<!--Superuser-->
<string name="su_request_title">슈퍼유저 요청</string>
<string name="touch_filtered_warning">앱이 슈퍼유저 요청을 가려, Magisk에서 응답을 확인할 수 없습니다.</string>
<string name="deny">일괄 거부</string>
<string name="prompt">수동 허가</string>
<string name="grant">일괄 허용</string>
<string name="su_warning">기기에 대한 전체 액세스 권한을 부여합니다.\n확실하지 않은 경우 거부하세요!</string>
<string name="forever">영구적으로</string>
<string name="deny">모두 거부</string>
<string name="prompt">물어보기</string>
<string name="grant">모두 허용</string>
<string name="su_warning">기기에 대한 슈퍼유저 권한을 부여합니다.\n확실하지 않은 경우 거부하세요!</string>
<string name="forever">영구</string>
<string name="once">한 번만</string>
<string name="tenmin">10분</string>
<string name="twentymin">20분</string>
@@ -69,20 +69,20 @@
<string name="su_snack_notif_off">%1$s의 알림이 비활성화됨</string>
<string name="su_snack_log_on">%1$s의 로깅이 활성화됨</string>
<string name="su_snack_log_off">%1$s의 로깅이 비활성화됨</string>
<string name="su_revoke_title">취소하시겠습니까?</string>
<string name="su_revoke_msg">정말 %1$s의 권한을 취소하시겠습니까?</string>
<string name="su_revoke_title">제거하시겠습니까?</string>
<string name="su_revoke_msg">정말 %1$s의 권한을 제거하시겠습니까?</string>
<string name="toast">토스트</string>
<string name="none">없음</string>
<string name="superuser_toggle_notification">알림</string>
<string name="superuser_toggle_revoke">권한삭제</string>
<string name="superuser_toggle_revoke">권한 제거</string>
<string name="superuser_policy_none">슈퍼유저 권한을 요청한 앱이 없습니다.</string>
<!--Logs-->
<string name="log_data_none">로그가 없습니다. 슈퍼유저 권한을 필요로 하는 앱을 사용하십시오.</string>
<string name="log_data_magisk_none">Magisk 로그가 없습니다.</string>
<string name="menuSaveLog">로그 저장</string>
<string name="menuClearLog">지금 로그 삭제</string>
<string name="menuClearLog">로그 삭제</string>
<string name="logs_cleared">로그 삭제 완료.</string>
<string name="pid">PID: %1$d</string>
<string name="target_uid">Target UID: %1$d</string>
@@ -96,9 +96,9 @@
<string name="hide_search">검색</string>
<!--Module-->
<string name="no_info_provided">(제공된 정보 없음)</string>
<string name="no_info_provided">(정보 없음)</string>
<string name="reboot_userspace">조용히 다시 시작</string>
<string name="reboot_recovery">리커버리로 다시 시작</string>
<string name="reboot_recovery">복구 모드로 다시 시작</string>
<string name="reboot_bootloader">부트로더로 다시 시작</string>
<string name="reboot_download">다운로드 모드로 다시 시작</string>
<string name="reboot_edl">EDL로 다시 시작</string>
@@ -107,20 +107,20 @@
<string name="module_state_restore">복구</string>
<string name="module_action_install_external">저장소에서 설치</string>
<string name="update_available">업데이트 가능</string>
<string name="suspend_text_riru">%1$s 가 활성화 되어있어 모듈 로드가 일시정지 되었습니다.</string>
<string name="suspend_text_zygisk">%1$s 가 활성화 되어있어 모듈이 로드되지 않았습니다.</string>
<string name="suspend_text_riru">%1$s 가 활성화 되어있어 모듈 로드되지 않았습니다.</string>
<string name="suspend_text_zygisk">%1$s 가 활성화되어 있지 않아 모듈이 로드되지 않았습니다.</string>
<string name="zygisk_module_unloaded">호환성 문제로 인해 Zygisk 모듈이 로드되지 않았습니다.</string>
<!--Settings-->
<string name="settings_dark_mode_title">테마 선택</string>
<string name="settings_dark_mode_message">원하는 테마 모드를 선택하세요!</string>
<string name="settings_dark_mode_light">기본</string>
<string name="settings_dark_mode_system">시스템 설정값</string>
<string name="settings_dark_mode_system">자동</string>
<string name="settings_dark_mode_dark">다크 모드</string>
<string name="settings_download_path_title">다운로드 경로</string>
<string name="settings_download_path_title">다운로드 위치</string>
<string name="settings_download_path_message">파일이 %1$s에 저장됩니다</string>
<string name="settings_hide_app_title">Magisk 앱 숨기기</string>
<string name="settings_hide_app_summary">랜덤 패키지 ID와 커스텀 앱 이름으로 Magisk 프록시 앱을 설치합니다.</string>
<string name="settings_hide_app_summary">무작위 패키지명과 사용자 지정 앱 이름으로 Magisk 프록시 앱을 설치합니다.</string>
<string name="settings_restore_app_title">Magisk 앱 복원</string>
<string name="settings_restore_app_summary">앱 숨기기를 해제하고 원래 APK로 복원합니다.</string>
<string name="language">언어</string>
@@ -167,12 +167,12 @@
<string name="settings_doh_description">일부 국가에 존재하는 DNS 포이즈닝을 해결합니다.</string>
<string name="multiuser_mode">다중 사용자 모드</string>
<string name="settings_owner_only">기기 소유자만</string>
<string name="settings_owner_manage">기기 소유자에 의해 관리됨</string>
<string name="settings_user_independent">사용자별</string>
<string name="owner_only_summary">소유자만 루트 액세스를 갖습니다.</string>
<string name="owner_manage_summary">소유자만 루트 액세스를 관리하고 요청을 받을 수 있습니다.</string>
<string name="user_independent_summary">각각의 사용자가 개별적인 권한을 갖습니다.</string>
<string name="settings_owner_only">주인 사용자만</string>
<string name="settings_owner_manage">주인 사용자에 의해 관리됨</string>
<string name="settings_user_independent">사용자별 분리</string>
<string name="owner_only_summary">주인 사용자만 루트 액세스를 갖습니다.</string>
<string name="owner_manage_summary">주인 사용자가 다른 사용자들의 루트 액세스를 관리하고 요청을 받을 수 있습니다.</string>
<string name="user_independent_summary">각각의 사용자가 권한을 관리합니다.</string>
<string name="mount_namespace_mode">네임스페이스 마운트 모드</string>
<string name="settings_ns_global">전역 네임스페이스</string>
@@ -187,7 +187,7 @@
<string name="progress_channel">진행 상황</string>
<string name="updated_channel">업데이트 완료</string>
<string name="download_complete">다운로드 완료</string>
<string name="download_file_error">파일 다운로드 오류</string>
<string name="download_file_error">파일 다운로드 실패</string>
<string name="magisk_update_title">새 버전의 Magisk를 사용할 수 있습니다!</string>
<string name="updated_title">Magisk가 업데이트 되었습니다!</string>
<string name="updated_text">터치하여 앱 열기</string>
@@ -208,7 +208,7 @@
<string name="restore_img">이미지 복구</string>
<string name="restore_img_msg">복구하는 중…</string>
<string name="restore_done">복구 완료!</string>
<string name="restore_fail">백업이 존재하지 않습니다!</string>
<string name="restore_fail">백업이 존재하지 않습니다!</string>
<string name="setup_fail">설치 실패</string>
<string name="env_fix_title">추가 설정 필요</string>
<string name="env_fix_msg">Magisk가 제대로 작동하려면 추가 설정이 필요합니다. 다시 시작 하시겠습니까?</string>
@@ -219,10 +219,10 @@
<string name="unsupport_system_app_msg">해당 앱을 시스템 앱으로 실행하는 것은 지원되지 않습니다. 앱을 일반 사용자 앱으로 실행해 주세요.</string>
<string name="unsupport_other_su_msg">Magisk으로 부터 설치되지 않은 \"su\" 바이너리가 감지되었습니다. 다른 루팅 방법을 제거하거나, Magisk 를 다시 설치해주세요.</string>
<string name="unsupport_external_storage_msg">Magisk 가 외부 저장소에 설치되어 있습니다. Magisk 를 내부 저장소에 설치 해주세요.</string>
<string name="unsupport_nonroot_stub_msg">숨겨진 Magisk 앱은 루팅이 풀려 더이상 작동하지 못합니다. 래 APK 를 복원하거나 재설치 해주세요.</string>
<string name="unsupport_nonroot_stub_msg">숨겨진 Magisk 앱은 루트 권한이 손실되어 사용할 수 없습니다. 래 APK 를 복원하거나 재설치 해주세요.</string>
<string name="unsupport_nonroot_stub_title">@string/settings_restore_app_title</string>
<string name="external_rw_permission_denied">해당 기능을 사용하려면 저장소 권한을 허용해 주십시오.</string>
<string name="install_unknown_denied">이 기능을 활성화 하려면 "알 수 없는 앱 설치"를 허용해주세요.</string>
<string name="install_unknown_denied">이 기능을 활성화 하려면 "출처를 알 수 없는 앱 설치"를 허용해주세요.</string>
<string name="add_shortcut_title">홈 화면에 바로가기 추가</string>
<string name="add_shortcut_msg">앱을 숨긴 후 아이콘과 이름을 알아보기 힘들 경우를 위해 알아보기 쉬운 바로가기를 홈 화면에 추가합니다.</string>
<string name="app_not_found">해당 작업을 처리할 어플리케이션이 없습니다.</string>

View File

@@ -2,242 +2,255 @@
<!--Sections-->
<string name="modules">Modulet</string>
<string name="superuser">Super-përdoruesi</string>
<string name="logs">Regjistrat</string>
<string name="settings">Cilësimet</string>
<string name="superuser">Superuser</string>
<string name="logs">Regjistrimet</string>
<string name="settings">Parametrat</string>
<string name="install">Instalo</string>
<string name="section_home">Shtëpi</string>
<string name="section_theme">Tema</string>
<string name="denylist">Lista e mohimit</string>
<string name="section_home">Shtëpia</string>
<string name="section_theme">Temat</string>
<string name="denylist">Lista e ndaluar</string>
<!--Home-->
<string name="no_connection">Nuk ka lidhje interneti</string>
<string name="app_changelog">Ndryshimet</string>
<string name="loading">Po ngarkohet</string>
<string name="no_connection">Nuk ka lidhje të disponueshme</string>
<string name="app_changelog">Shënimet e ndryshimeve</string>
<string name="loading">Duke u ngarkuar</string>
<string name="update">Përditëso</string>
<string name="not_available">N/A</string>
<string name="hide">Fshih</string>
<string name="home_package">Paketa</string>
<string name="home_app_title">App</string>
<string name="home_notice_content">Shkarkoni Magisk VETEM nga faqja zyrtare e GitHub. Skedarët nga burime të panjohura mund të jenë me qëllim të keq! </string>
<string name="home_app_title">Aplikacioni</string>
<string name="home_notice_content">Shkarkoni Magisk VETËM nga faqja zyrtare në GitHub. Skedarët nga burime të panjohura mund të jenë të dëmshëm!</string>
<string name="home_support_title">Na mbështetni</string>
<string name="home_follow_title">Na ndiqni</string>
<string name="home_item_source">Burimi</string>
<string name="home_support_content">Magisk është, dhe gjithmonë do të jetë, falas dhe me burim të hapur. Sidoqoftë, mund të na tregoni se kujdeseni duke dërguar një donacion të vogël.</string>
<string name="home_support_content">Magisk është dhe do të mbetet gjithmonë falas dhe me burim të hapur. Megjithatë, mund të na mbështesni duke bërë një donacion.</string>
<string name="home_installed_version">Instaluar</string>
<string name="home_latest_version">E fundit</string>
<string name="invalid_update_channel">Kanali i përditësimit i pavlefshëm</string>
<string name="home_latest_version">Më i fundit</string>
<string name="invalid_update_channel">Kanal i pavlefshëm për përditësime</string>
<string name="uninstall_magisk_title">Çinstalo Magisk</string>
<string name="uninstall_magisk_msg">Të gjitha modulet do të çaktivizohen/hiqen!\nRrënja do të hiqet!\nTë dhënat tuaja potencialisht të koduara nëse jo tashmë!</string>
<string name="uninstall_magisk_msg">Të gjitha modulet do të çaktivizohen/hiqen!
Root-i do të hiqet!
Çdo memorie e brendshme që është çenkriptuar përmes Magisk do të rikriptohet!</string>
<!--Install-->
<string name="keep_force_encryption">Ruaj kriptimin me forcë</string>
<string name="keep_force_encryption">Ruaj enkriptimin e detyruar</string>
<string name="keep_dm_verity">Ruaj AVB 2.0/dm-verity</string>
<string name="recovery_mode">Recovery Mode</string>
<string name="recovery_mode">Mënyra Recovery</string>
<string name="install_options_title">Opsionet</string>
<string name="install_method_title">Metoda</string>
<string name="install_next">Tjetër</string>
<string name="install_start">Shkojme</string>
<string name="manager_download_install">Shtypni për ta shkarkuar dhe instaluarl</string>
<string name="direct_install">Instalimi i direkt (Rekomandohet)</string>
<string name="install_inactive_slot">Instaloni në slotin joaktiv(Pas OTA)</string>
<string name="install_inactive_slot_msg">Pajisja juaj do të detyrohet të fillojë në folenë aktuale joaktive pas një rindezje!\nPërdoreni këtë opsion vetëm pasi të keni përfunduar OTA.\nVazhdo?</string>
<string name="setup_title">Konfigurimet shtesë</string>
<string name="select_patch_file">Zgjidhni dhe Patch një skader</string>
<string name="patch_file_msg">Zgjidhni një imazh të papërpunuar (*.img) ose një skedar ODIN (*.tar) ose një payload.bin (*.bin)</string>
<string name="reboot_delay_toast">Rinisje pas 5 sekondash…</string>
<string name="install_next">Vazhdoni</string>
<string name="install_start">Le të fillojmë</string>
<string name="manager_download_install">Shtypni për të shkarkuar dhe instaluar</string>
<string name="direct_install">Instalim i drejtpërdrejtë (Rekomandohet)</string>
<string name="install_inactive_slot">Instalo në slot-in joaktiv (Pas OTA)</string>
<string name="install_inactive_slot_msg">Pajisja juaj do të detyrohet të niset në slot-in joaktiv pas rinisjes!
Përdorni këtë opsion vetëm pasi OTA të ketë përfunduar.
Të vazhdoj?</string>
<string name="setup_title">Konfigurim shtesë</string>
<string name="select_patch_file">Zgjidh dhe përpuno një skedar</string>
<string name="patch_file_msg">Zgjidh një imazh të papërpunuar (*.img) ose një skedar ODIN (*.tar) ose një payload.bin (*.bin)</string>
<string name="reboot_delay_toast">Rinisja pas 5 sekondash…</string>
<string name="flash_screen_title">Instalimi</string>
<!--Superuser-->
<string name="su_request_title">Kërkesë nga superpërdoruesi</string>
<string name="touch_filtered_warning">Për shkak se një aplikacion po errëson një kërkesë të superpërdoruesit, Magisk nuk mund të verifikojë përgjigjen tuaj</string>
<string name="su_request_title">Kërkesë Superuser</string>
<string name="touch_filtered_warning">Për shkak se një aplikacion po mbivendos kërkesën Superuser, Magisk nuk mund të verifikojë përgjigjen tuaj.</string>
<string name="deny">Refuzo</string>
<string name="prompt">Pyet</string>
<string name="prompt">Pyete</string>
<string name="restrict">Kufizo</string>
<string name="grant">Lejo</string>
<string name="su_warning">Jep akses të plotë në pajisjen tuaj.\nRefuzo nëse nuk jeni të sigurt!</string>
<string name="forever">Gjithmonë</string>
<string name="su_warning">Jep akses të plotë në pajisjen tuaj.
Refuzoni nëse nuk jeni të sigurt!</string>
<string name="forever">Përgjithmonë</string>
<string name="once">Një herë</string>
<string name="tenmin">10 minuta</string>
<string name="twentymin">20 minuta</string>
<string name="thirtymin">30 minuta</string>
<string name="sixtymin">60 minuta</string>
<string name="su_allow_toast">%1$s iu dha aksesi te Super-përdoruesi</string>
<string name="su_deny_toast">%1$s iu refuzua aksesi te Super -përdoruesi</string>
<string name="su_snack_grant">Aksesi i super-përdoruesit te %1$s është lenuar</string>
<string name="su_snack_deny">Aksesi i super-përdoruesit te %1$s është refuzuar</string>
<string name="su_snack_notif_on">Njoftimet e %1$s janë aktivizuar</string>
<string name="su_snack_notif_off">Njoftimet e %1$s janë çaktivizuar</string>
<string name="su_snack_log_on">Regjistrat e %1$s janë aktivizuar</string>
<string name="su_snack_log_off">Regjistrat e %1$s janë çaktivizuar</string>
<string name="su_revoke_title">drejtat?</string>
<string name="su_revoke_msg">Konfirmo për të hequr të drejtat e %1$s?</string>
<string name="toast">Dolli</string>
<string name="su_allow_toast">%1$s mori të drejtat Superuser</string>
<string name="su_deny_toast">%1$s u refuzua të drejtat Superuser</string>
<string name="su_snack_grant">%1$s mori të drejtat Superuser</string>
<string name="su_snack_deny">%1$s u refuzua të drejtat Superuser</string>
<string name="su_snack_notif_on">Njoftimet për %1$s u aktivizuan</string>
<string name="su_snack_notif_off">Njoftimet për %1$s u çaktivizuan</string>
<string name="su_snack_log_on">Regjistrimi për %1$s u aktivizua</string>
<string name="su_snack_log_off">Regjistrimi për %1$s u çaktivizua</string>
<string name="su_revoke_title">hiqen?</string>
<string name="su_revoke_msg">Konfirmoni heqjen e të drejtave Superuser për %1$s</string>
<string name="toast">Njoftim</string>
<string name="none">Asnjë</string>
<string name="superuser_toggle_notification">Njoftimet</string>
<string name="superuser_toggle_revoke">Të drejtat</string>
<string name="superuser_policy_none">Asnjë aplikacion nuk ka kërkuar akoma akses për super-përdoruesin.</string>
<string name="superuser_toggle_revoke">Hiq</string>
<string name="superuser_policy_none">Asnjë aplikacion nuk ka kërkuar ende leje Superuser.</string>
<!--Logs-->
<string name="log_data_none">Nuk ka regjistra, provoni të përdorni më shumë aplikacionet tuaja me SU</string>
<string name="log_data_magisk_none">Regjistrat Magisk janë bosh, kjo është e çuditshme</string>
<string name="menuSaveLog">Ruaj regjistrar</string>
<string name="menuClearLog">Pastro regjistrat tani</string>
<string name="logs_cleared">Regjistrat u pastuan me sukses</string>
<string name="log_data_none">Nuk keni regjistrime. Provojeni të përdorni më shumë aplikacionet me root.</string>
<string name="log_data_magisk_none">Regjistrimet e Magisk janë bosh — çuditërisht.</string>
<string name="menuSaveLog">Ruaj regjistrimin</string>
<string name="menuClearLog">Pastro regjistrimin tani</string>
<string name="logs_cleared">Regjistrimet u pastruan me sukses</string>
<string name="pid">PID: %1$d</string>
<string name="target_uid">Target UID: %1$d</string>
<string name="target_pid">Montoni PID synuar ns: %s</string>
<string name="target_uid">UID i synuar: %1$d</string>
<string name="target_pid">PID i synuar: %s</string>
<string name="selinux_context">Konteksti SELinux: %s</string>
<string name="supp_group">Grupi suplementar: %s</string>
<string name="supp_group">Grupi shtesë: %s</string>
<!--MagiskHide-->
<string name="show_system_app">Shfaq aplikacionet e sistemit</string>
<string name="show_os_app">Shfaq aplikacionet e sistemit operativ</string>
<string name="hide_filter_hint">Kërko sipas emrit</string>
<string name="show_os_app">Shfaq aplikacionet e OS</string>
<string name="hide_filter_hint">Filtro sipas emrit</string>
<string name="hide_search">Kërko</string>
<!--Module-->
<string name="no_info_provided">(Nuk ka asnjë informacion)</string>
<string name="reboot_userspace">Rinisje e shpejtë</string>
<string name="reboot_recovery">Rinis te Recovery</string>
<string name="reboot_bootloader">Rinis te Bootloader</string>
<string name="reboot_download">Rinis te Download</string>
<string name="reboot_edl">Rinis te EDL</string>
<string name="reboot_safe_mode">Rinis në safe mode</string>
<string name="no_info_provided">(Nuk u dha informacion)</string>
<string name="reboot_userspace">Rinisje Normale</string>
<string name="reboot_recovery">Rinis Recovery</string>
<string name="reboot_bootloader">Rinis Bootloader</string>
<string name="reboot_download">Rinis Download</string>
<string name="reboot_edl">Rinis EDL</string>
<string name="reboot_safe_mode">Mënyra e sigurt</string>
<string name="module_version_author">%1$s nga %2$s</string>
<string name="module_state_remove">Hiqe</string>
<string name="module_action">Veprim</string>
<string name="module_state_restore">Rikëthe</string>
<string name="module_action_install_external">Instaloni nga sdcard</string>
<string name="update_available">Përditësimi dispozicion</string>
<string name="suspend_text_riru">Moduli u pezullua sepse %1$s është aktivizuar</string>
<string name="suspend_text_zygisk">Moduli është pezulluar sepse %1$s nuk është i aktivizuar</string>
<string name="zygisk_module_unloaded">Moduli Zygisk nuk është ngarkuar për shkak të papajtueshmërisë</string>
<string name="module_empty">Ska module të instaluar</string>
<string name="module_action">Veprimi</string>
<string name="module_state_restore">Rikthe</string>
<string name="module_action_install_external">Instalo nga memoria</string>
<string name="update_available">Përditësim i disponueshëm</string>
<string name="suspend_text_riru">Moduli u pezullua sepse %1$s është aktiv</string>
<string name="suspend_text_zygisk">Moduli u pezullua sepse %1$s nuk është aktiv</string>
<string name="zygisk_module_unloaded">Moduli Zygisk nuk u ngarkua për shkak të mospërputhjes</string>
<string name="module_empty">Nuk ka module të instaluara</string>
<string name="confirm_install">Të instalohet moduli %1$s?</string>
<string name="confirm_install_title">Konfirmo instalimin</string>
<string name="confirm_install_title">Konfirmim instalimi</string>
<!--Settings-->
<string name="settings_dark_mode_title">Mënyra e temës</string>
<string name="settings_dark_mode_message">Zgjidhni mënyrën që i përshtatet më shumë stilit tuaj!</string>
<string name="settings_dark_mode_light">Gjithmonë e bardhë</string>
<string name="settings_dark_mode_system">Sipas sistemit</string>
<string name="settings_dark_mode_dark">Gjithmonë e zezë</string>
<string name="settings_download_path_title">Vendodhje e shkarkimit</string>
<string name="settings_download_path_message">Shkarkimet do të ruhen në %1$s</string>
<string name="settings_hide_app_title">Fsheh aplikacionin Magisk</string>
<string name="settings_hide_app_summary">Instaloni një aplikacion përfaqësues me ID paketës të rastësishme dhe etiketë të personalizuar të aplikacionitl</string>
<string name="settings_restore_app_title">Rivendosni aplikacionin Magisk</string>
<string name="settings_restore_app_summary">un-fsheh aplikacionin dhe riktheni atë në APK origjinale</string>
<string name="settings_dark_mode_message">Zgjidh mënyrën që i përshtatet më shumë stilit tënd!</string>
<string name="settings_dark_mode_light">Gjithmonë e ndritshme</string>
<string name="settings_dark_mode_system">Ndiq sistemin</string>
<string name="settings_dark_mode_dark">Gjithmonë e errët</string>
<string name="settings_download_path_title">Rruga e shkarkimit</string>
<string name="settings_download_path_message">Skedarët do të ruhen në %1$s</string>
<string name="settings_hide_app_title">Fshi aplikacionin Magisk</string>
<string name="settings_hide_app_summary">Instalo një aplikacion proxy me një ID pakete të rastësishme dhe emër të personalizuar</string>
<string name="settings_restore_app_title">Rikthe aplikacionin Magisk</string>
<string name="settings_restore_app_summary">Zbulo aplikacionin dhe rikthe APK-në origjinale</string>
<string name="language">Gjuha</string>
<string name="system_default">(Parazgjedhja e sistemit)</string>
<string name="settings_check_update_title">Kontrollo për përditësime</string>
<string name="settings_check_update_summary">Kontrolloni automatikisht për përditësime në sfond</string>
<string name="settings_update_channel_title">Perditeso kanalin</string>
<string name="settings_update_stable">E qëndrueshme</string>
<string name="settings_check_update_summary">Kontrollo periodikisht për përditësimet në sfond</string>
<string name="settings_update_channel_title">Kanal për përditësime</string>
<string name="settings_update_stable">Stable</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Kanal me porosi</string>
<string name="settings_update_custom_msg">Fut një URL të personalizuar</string>
<string name="settings_zygisk_summary">Drejtoni pjesë të Magisk në demonin zygote</string>
<string name="settings_denylist_title">Zbato Listën e Mohimit</string>
<string name="settings_denylist_summary">Proceset në listën e mohimit do të kenë të gjitha modifikimet e Magisk</string>
<string name="settings_denylist_config_title">Konfiguro Listën e Mohimit</string>
<string name="settings_denylist_config_summary">Zgjidhni proceset që do të përfshihen në listën e mohimit</string>
<string name="settings_hosts_title">Pritësit pa sistem</string>
<string name="settings_hosts_summary">Pritësit pa sistem mbështesin aplikacionet Adblock</string>
<string name="settings_hosts_toast">Moduli i hosteve pa sistem u shtua</string>
<string name="settings_app_name_hint">Emri i ri</string>
<string name="settings_app_name_helper">Aplikacioni do të ripaketohet me këtë emër</string>
<string name="settings_update_debug">Debug</string>
<string name="settings_update_custom">Custom</string>
<string name="settings_update_custom_msg">Fut një URL të personalizuar të kanalit</string>
<string name="settings_zygisk_summary">Ekzekuto pjesë të Magisk në demonin Zygote</string>
<string name="settings_denylist_title">Zbato listën e ndaluar</string>
<string name="settings_denylist_summary">Proceset në listën e ndaluar do të rikthehen pa modifikimet e Magisk</string>
<string name="settings_denylist_config_title">Konfiguro listën e ndaluar</string>
<string name="settings_denylist_config_summary">Zgjidh proceset që do të përfshihen në listën e ndaluar</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Mbështetje për systemless hosts për aplikacionet që bllokojnë reklamat</string>
<string name="settings_hosts_toast">U shtua moduli systemless hosts</string>
<string name="settings_app_name_hint">Emër i ri</string>
<string name="settings_app_name_helper">Aplikacioni do të ripaketizohet me këtë emër</string>
<string name="settings_app_name_error">Format i pavlefshëm</string>
<string name="settings_su_app_adb">Aplikacionet dhe ADB</string>
<string name="settings_su_app">Vetëm aplikacionet</string>
<string name="settings_su_adb">Vetëm ADB</string>
<string name="settings_su_disable">Çaktivizuar</string>
<string name="settings_su_request_10">10 Sekonda</string>
<string name="settings_su_request_15">15 Sekonda</string>
<string name="settings_su_request_20">20 Sekonda</string>
<string name="settings_su_request_30">30 Sekonda</string>
<string name="settings_su_request_45">45 Sekonda</string>
<string name="settings_su_request_60">60 Sekonda</string>
<string name="superuser_access">Aksesi i Super-përdorues</string>
<string name="settings_su_request_10">10 sekonda</string>
<string name="settings_su_request_15">15 sekonda</string>
<string name="settings_su_request_20">20 sekonda</string>
<string name="settings_su_request_30">30 sekonda</string>
<string name="settings_su_request_45">45 sekonda</string>
<string name="settings_su_request_60">60 sekonda</string>
<string name="superuser_access">Akses Superuser</string>
<string name="auto_response">Përgjigje automatike</string>
<string name="request_timeout">Koha për mbarimit të Kërkesës</string>
<string name="superuser_notification">Njoftimi i Super-përdoruesit</string>
<string name="settings_su_reauth_title">Ri-vërtetimi pas azhurnimit</string>
<string name="settings_su_reauth_summary">Ri-vërtetoni lejet e super-përdoruesit pas azhurnimit të aplikacionit</string>
<string name="settings_su_tapjack_title">Aktivizo mbrojtjen tapjacking</string>
<string name="settings_su_tapjack_summary">Dialogu i menjëhershëm i super-përdoruesit nuk do ti përgjigjet hyrjes ndërsa është i errësuar nga ndonjë dritare ose mbivendosje tjetër</string>
<string name="request_timeout">Koha e skadimit të kërkesës</string>
<string name="superuser_notification">Njoftimi Superuser</string>
<string name="settings_su_reauth_title">Riautentifikimi pas përditësimit</string>
<string name="settings_su_reauth_summary">Kërko sërish lejet Superuser pas përditësimit të aplikacioneve</string>
<string name="settings_su_tapjack_title">Mbrojtje nga mbivendosja e klikimeve</string>
<string name="settings_su_tapjack_summary">Dritarja e kërkesës Superuser nuk do të pranojë input kur është e mbuluar nga ndonjë dritare tjetër</string>
<string name="settings_su_auth_title">Autentifikimi i përdoruesit</string>
<string name="settings_su_auth_summary">Kërko autentifikim të përdoruesit gjatë kërkesave Superuser</string>
<string name="settings_su_auth_insecure">Nuk ka asnjë metodë autentifikimi të konfiguruar në pajisje</string>
<string name="settings_su_restrict_title">Kufizo aftësitë e root</string>
<string name="settings_su_restrict_summary">Do të kufizojë aplikacionet e reja Superuser si parazgjedhje. Kujdes: kjo mund të prishë shumicën e aplikacioneve. Mos e aktivizoni nëse nuk dini çfarë bëni.</string>
<string name="settings_customization">Personalizimi</string>
<string name="setting_add_shortcut_summary">Shtoni një shkurtore mjaft të mirë në ekranin fillestar në rast se emri dhe ikona janë të vështira për tu njohur pasi keni fshehur aplikacionin</string>
<string name="setting_add_shortcut_summary">Shto një shkurtore në ekranin bazë nëse emri/ikona bëhen të vështira për tu dalluar pas fshehjes së aplikacionit</string>
<string name="settings_doh_title">DNS mbi HTTPS</string>
<string name="settings_doh_description">Helmimi i paqartë nga DNS në disa kombe</string>
<string name="multiuser_mode">Mënyra Multi-përdoruesit</string>
<string name="settings_owner_only">Vetëm pronari i paisjes</string>
<string name="settings_owner_manage">Pronari i paisjes që e manaxhon</string>
<string name="settings_user_independent">I pavarur nga përdoruesi</string>
<string name="owner_only_summary">Vetëm pronari ka akses në rrënjë</string>
<string name="owner_manage_summary">Vetëm pronari mund të menaxhojë aksesin në rrënjë dhe të marrë kërkesat</string>
<string name="user_independent_summary">Çdo përdorues ka rregullat e veta të veçanta rrënjësore</string>
<string name="mount_namespace_mode">Mënyra e Montimit të Hapësirës Emërore</string>
<string name="settings_ns_global">Hapësira globale e emrave</string>
<string name="settings_ns_requester">Trashëgoni hapësirën e emrave</string>
<string name="settings_ns_isolate">Hapësira e izoluar e emrave</string>
<string name="global_summary">Të gjitha sesionet rrënjë përdorin hapësirën globale të emrave të montimit</string>
<string name="requester_summary">Seancat rrënjësore do të trashëgojnë hapësirën e emrave të kërkuesit të tyre</string>
<string name="isolate_summary">Çdo sesion rrënjë do të ketë hapësirën e vet të izoluar të emrave</string>
<string name="settings_su_auth_title">Vërtetimi i përdoruesit</string>
<string name="settings_su_auth_summary">Kërkoni vërtetimin e përdoruesit gjatë kërkesave të Superpërdoruesit</string>
<string name="settings_su_auth_insecure">Asnjë metodë vërtetimi nuk është konfiguruar në pajisje</string>
<string name="settings_doh_description">Zgjidhje për helmimin e DNS në disa shtete</string>
<string name="settings_random_name_title">Emër i rastësishëm</string>
<string name="settings_random_name_description">Rastësizo emrin e skedarit të daljes për imazhet e patch-uara dhe skedarët tar për të shmangur detektimin</string>
<string name="multiuser_mode">Mënyra multi-përdorues</string>
<string name="settings_owner_only">Vetëm pronari i pajisjes</string>
<string name="settings_owner_manage">Menaxhuar nga pronari</string>
<string name="settings_user_independent">I pavarur për përdoruesit</string>
<string name="owner_only_summary">Vetëm pronari ka akses root</string>
<string name="owner_manage_summary">Vetëm pronari mund të menaxhojë aksesin root dhe të marrë kërkesat</string>
<string name="user_independent_summary">Çdo përdorues ka rregullat e veta të root</string>
<string name="mount_namespace_mode">Mënyra e mount namespace</string>
<string name="settings_ns_global">Namespace global</string>
<string name="settings_ns_requester">Trashëgo namespace</string>
<string name="settings_ns_isolate">Namespace i izoluar</string>
<string name="global_summary">Të gjitha sesionet root përdorin namespace global</string>
<string name="requester_summary">Sesioni root trashëgon namespace-in e kërkuesit</string>
<string name="isolate_summary">Çdo sesion root do të ketë namespace të izoluar</string>
<!--Notifications-->
<string name="update_channel">Përditësimet e magisk</string>
<string name="updated_channel">Përditësimi përfundoi</string>
<string name="update_channel">Përditësimet e Magisk</string>
<string name="progress_channel">Njoftimet e progresit</string>
<string name="updated_channel">Përditësimi përfundoi</string>
<string name="download_complete">Shkarkimi përfundoi</string>
<string name="download_file_error">Gabim në shkarkimin e skedarit</string>
<string name="magisk_update_title">Përditësimi Magisk i disponueshëm!</string>
<string name="download_file_error">Gabim gjatë shkarkimit të skedarit</string>
<string name="magisk_update_title">Përditësim i ri i Magisk!</string>
<string name="updated_title">Magisk u përditësua</string>
<string name="updated_text">Prekni për të hapur aplikacionin</string>
<string name="updated_text">Shtypni për të hapur aplikacionin</string>
<!--Toasts, Dialogs-->
<string name="yes">Po</string>
<string name="no">Jo</string>
<string name="repo_install_title">Instalo %1$s %2$s(%3$d)</string>
<string name="download">Shkarko</string>
<string name="reboot">Rinis</string>
<string name="close">Mbylle</string>
<string name="release_notes">Shënimet e lëshimit</string>
<string name="flashing">Duke flashuar</string>
<string name="running">Duke vepruar...</string>
<string name="reboot">Rinise</string>
<string name="close">Mbyll</string>
<string name="release_notes">Shënimet e versionit</string>
<string name="flashing">Duke flashuar..</string>
<string name="running">Duke u ekzekutuar..</string>
<string name="done">U krye!</string>
<string name="done_action">Veprimi i ekzekutimit të %1$s u krye</string>
<string name="done_action">Veprimi i %1$s u krye</string>
<string name="failure">Dështoi!</string>
<string name="hide_app_title">Fshehja e aplikacionit Magisk</string>
<string name="hide_app_title">Duke fshehur aplikacionin Magisk..</string>
<string name="open_link_failed_toast">Nuk u gjet asnjë aplikacion për të hapur lidhjen</string>
<string name="complete_uninstall">Çinstalimi i plotë</string>
<string name="restore_img">Rivendosni imazhet</string>
<string name="restore_img_msg">Duke rivendosur…</string>
<string name="restore_done">Rivendosja u krye!</string>
<string name="restore_fail">Rezervimi i aksioneve nuk ekziston!</string>
<string name="complete_uninstall">Çinstalim i plotë</string>
<string name="restore_img">Rikthe imazhet</string>
<string name="restore_img_msg">Duke rikthyer..</string>
<string name="restore_done">Rikthimi u krye!</string>
<string name="restore_fail">Backup-i origjinal nuk ekziston!</string>
<string name="setup_fail">Konfigurimi dështoi</string>
<string name="env_fix_title">Kërkon Konfigurim shtesë</string>
<string name="env_fix_msg">Pajisja juaj ka nevojë për konfigurim shtesë që Magisk të funksionojë siç duhet. Dëshironi të vazhdoni dhe rindizni?</string>
<string name="env_full_fix_msg">Pajisja juaj ka nevojë për re-flashuar Magisk të funksionojë siç duhet. Ju lutemi ri-instaloni Magisk brenda aplikacionit, modaliteti i rikuperimit nuk mund të marrë informacionin e saktë të pajisjes.</string>
<string name="setup_msg">Konfigurimi i mjedisit të funksionimit…</string>
<string name="unsupport_magisk_title">Version Magjik i Pambështetur</string>
<string name="unsupport_magisk_msg">Ky version i aplikacionit nuk e mbështet versionin Magisk më të ulët se %1$s.\n\nAplikacioni do të sillet sikur të mos jetë i instaluar Magisk, ju lutemi azhurnoni Magisk sa më shpejt të jetë e mundur.</string>
<string name="env_fix_title">Kërkohet konfigurim shtesë</string>
<string name="env_fix_msg">Pajisja ka nevojë për konfigurim shtesë që Magisk të funksionojë si duhet. Dëshironi të vazhdoni dhe të rinisni pajisjen?</string>
<string name="env_full_fix_msg">Pajisja ka nevojë për ri-flash Magisk për të funksionuar saktë. Ju lutemi riinstaloni Magisk brenda aplikacionit; Recovery nuk mund të marrë informacionet e sakta të pajisjes.</string>
<string name="setup_msg">Duke ekzekutuar konfigurimin e mjedisit..</string>
<string name="unsupport_magisk_title">Version i Magisk i pambështetur</string>
<string name="unsupport_magisk_msg">Ky version i aplikacionit nuk mbështet versione të Magisk më të ulëta se %1$s.
Aplikacioni do të sillet sikur Magisk nuk është i instaluar. Ju lutemi përditësoni Magisk sa më shpejt të jetë e mundur.</string>
<string name="unsupport_general_title">Gjendje jonormale</string>
<string name="unsupport_system_app_msg">Drejtimi i këtij aplikacioni si një aplikacion sistemi nuk mbështetet. Ju lutemi kthejeni aplikacionin në një aplikacion përdoruesi.</string>
<string name="unsupport_other_su_msg">Një komandë \"su"\ që nuk i përket Magisk është zbuluar. Ju lutemi hiqni SU-në tjetër të pambështetur.</string>
<string name="unsupport_external_storage_msg">Magisk është instaluar në ruajtjen e jashtme. Ju lutemi zhvendosni aplikacionin në ruajtjen e brendshme.</string>
<string name="unsupport_nonroot_stub_msg">Aplikacioni nuk mund të vazhdojë të punojë në gjendjen e fshehur pasi rrënja ishte e humbur. Ju lutemi rivendoseni përsëri në APK-në origjinale.</string>
<string name="unsupport_system_app_msg">Ekzekutimi i këtij aplikacioni si aplikacion sistemi nuk mbështetet. Ju lutemi kthejeni në aplikacion përdoruesi.</string>
<string name="unsupport_other_su_msg">Është zbuluar një binar "su" që nuk është nga Magisk. Ju lutemi hiqni çdo zgjidhje tjetër root dhe/ose riinstaloni Magisk.</string>
<string name="unsupport_external_storage_msg">Magisk është instaluar në memorien e jashtme. Lëvizni aplikacionin në memorien e brendshme.</string>
<string name="unsupport_nonroot_stub_msg">Aplikacioni i fshehur i Magisk nuk mund të vazhdojë të funksionojë sepse root u humb. Ju lutemi riktheni APK-në origjinale.</string>
<string name="unsupport_nonroot_stub_title">@string/settings_restore_app_title</string>
<string name="external_rw_permission_denied">Jepni lejen e ruajtjes për të aktivizuar këtë funksion</string>
<string name="external_rw_permission_denied">Jepni lejen e magazinimit për të aktivizuar këtë funksion</string>
<string name="post_notifications_denied">Jepni lejen e njoftimeve për të aktivizuar këtë funksion</string>
<string name="install_unknown_denied">Lejo "instaloni aplikacione të panjohura" për të aktivizuar këtë funksion</string>
<string name="install_unknown_denied">Lejoni "Instalo aplikacione të panjohura" për të aktivizuar këtë funksion</string>
<string name="add_shortcut_title">Shto shkurtore në ekranin bazë</string>
<string name="add_shortcut_msg">Pas fshehjes së këtij aplikacioni, emri dhe ikona e tij mund të bëhen të vështira për tu njohur. Dëshironi të shtoni një shkurtore mjaft të bukur në ekranin bazë?</string>
<string name="app_not_found">Asnjë aplikacion nuk u gjet për të trajtuar këtë veprim</string>
<string name="add_shortcut_msg">Pas fshehjes së aplikacionit, emri dhe ikona mund të jenë të vështira për tu njohur. Dëshironi të shtoni një shkurtore të bukur në ekranin bazë?</string>
<string name="app_not_found">Nuk u gjet aplikacion për të kryer këtë veprim</string>
<string name="reboot_apply_change">Rinisni për të aplikuar ndryshimet</string>
<string name="restore_app_confirmation">Kjo do të rivendosë aplikacionin e fshehur në aplikacionin origjinal. A dëshironi vërtet ta bëni këtë?</string>
<string name="restore_app_confirmation">Kjo do të rikthejë aplikacionin e fshehur në gjendjen origjinale. Jeni të sigurt që dëshironi ta bëni këtë?</string>
</resources>

View File

@@ -53,6 +53,19 @@ static bool check_env(const char *name) {
return val != nullptr && val == "true"sv;
}
static bool guess_lzma(const uint8_t *buf, size_t len) {
// 0 : (pb * 5 + lp) * 9 + lc
// 1 - 4 : dict size, must be 2^n
// 5 - 12: all 0xFF
if (len <= 13) return false;
if (memcmp(buf, "\x5d", 1) != 0) return false;
uint32_t dict_sz = 0;
memcpy(&dict_sz, buf + 1, sizeof(dict_sz));
if (dict_sz == 0 || (dict_sz & (dict_sz - 1)) != 0) return false;
if (memcmp(buf + 5, "\xff\xff\xff\xff\xff\xff\xff\xff", 8) != 0) return false;
return true;
}
FileFormat check_fmt(const void *buf, size_t len) {
if (CHECKED_MATCH(CHROMEOS_MAGIC)) {
return FileFormat::CHROMEOS;
@@ -66,8 +79,7 @@ FileFormat check_fmt(const void *buf, size_t len) {
return FileFormat::LZOP;
} else if (CHECKED_MATCH(XZ_MAGIC)) {
return FileFormat::XZ;
} else if (len >= 13 && memcmp(buf, "\x5d\x00\x00", 3) == 0
&& (((char *)buf)[12] == '\xff' || ((char *)buf)[12] == '\x00')) {
} else if (guess_lzma(static_cast<const uint8_t *>(buf), len)) {
return FileFormat::LZMA;
} else if (CHECKED_MATCH(BZIP_MAGIC)) {
return FileFormat::BZIP2;

View File

@@ -205,7 +205,7 @@ Supported actions:
dumped to the file 'header', which can be used to modify header
configurations during repacking.
Return values:
0:valid 1:error 2:chromeos
0:valid 1:error 2:chromeos 3:vendor_boot
repack [-n] <origbootimg> [outbootimg]
Repack boot image components using files from the current directory

View File

@@ -1,8 +1,6 @@
use crate::ffi::{FileFormat, check_fmt};
use base::nix::fcntl::OFlag;
use base::{
Chunker, FileOrStd, LoggedResult, ReadExt, ResultExt, Utf8CStr, Utf8CString, WriteExt, log_err,
};
use base::{Chunker, FileOrStd, LoggedResult, ReadExt, Utf8CStr, Utf8CString, WriteExt, log_err};
use bzip2::Compression as BzCompression;
use bzip2::read::BzDecoder;
use bzip2::write::BzEncoder;
@@ -218,16 +216,21 @@ impl<R: Read> Read for LZ4BlockDecoder<R> {
// Top-level APIs
pub fn get_encoder<'a, W: Write + 'a>(format: FileFormat, w: W) -> Box<dyn WriteFinish<W> + 'a> {
match format {
pub fn get_encoder<'a, W: Write + 'a>(
format: FileFormat,
w: W,
) -> std::io::Result<Box<dyn WriteFinish<W> + 'a>> {
Ok(match format {
FileFormat::XZ => {
let mut opt = XzOptions::with_preset(9);
opt.set_check_sum_type(CheckType::Crc32);
Box::new(XzWriter::new(w, opt).unwrap())
}
FileFormat::LZMA => {
Box::new(LzmaWriter::new_use_header(w, &LzmaOptions::with_preset(9), None).unwrap())
Box::new(XzWriter::new(w, opt)?)
}
FileFormat::LZMA => Box::new(LzmaWriter::new_use_header(
w,
&LzmaOptions::with_preset(9),
None,
)?),
FileFormat::BZIP2 => Box::new(BzEncoder::new(w, BzCompression::best())),
FileFormat::LZ4 => {
let encoder = LZ4FrameEncoderBuilder::new()
@@ -237,8 +240,7 @@ pub fn get_encoder<'a, W: Write + 'a>(format: FileFormat, w: W) -> Box<dyn Write
.block_checksum(BlockChecksum::BlockChecksumEnabled)
.level(9)
.auto_flush(true)
.build(w)
.unwrap();
.build(w)?;
Box::new(encoder)
}
FileFormat::LZ4_LEGACY => Box::new(LZ4BlockEncoder::new(w, false)),
@@ -250,23 +252,26 @@ pub fn get_encoder<'a, W: Write + 'a>(format: FileFormat, w: W) -> Box<dyn Write
maximum_block_splits: 1,
..Default::default()
};
Box::new(ZopFliEncoder::new_buffered(opt, BlockType::Dynamic, w).unwrap())
Box::new(ZopFliEncoder::new_buffered(opt, BlockType::Dynamic, w)?)
}
FileFormat::GZIP => Box::new(GzEncoder::new(w, GzCompression::best())),
_ => unreachable!(),
}
})
}
pub fn get_decoder<'a, R: Read + 'a>(format: FileFormat, r: R) -> Box<dyn Read + 'a> {
match format {
pub fn get_decoder<'a, R: Read + 'a>(
format: FileFormat,
r: R,
) -> std::io::Result<Box<dyn Read + 'a>> {
Ok(match format {
FileFormat::XZ => Box::new(XzReader::new(r, true)),
FileFormat::LZMA => Box::new(LzmaReader::new_mem_limit(r, u32::MAX, None).unwrap()),
FileFormat::LZMA => Box::new(LzmaReader::new_mem_limit(r, u32::MAX, None)?),
FileFormat::BZIP2 => Box::new(BzDecoder::new(r)),
FileFormat::LZ4 => Box::new(LZ4FrameDecoder::new(r).unwrap()),
FileFormat::LZ4 => Box::new(LZ4FrameDecoder::new(r)?),
FileFormat::LZ4_LG | FileFormat::LZ4_LEGACY => Box::new(LZ4BlockDecoder::new(r)),
FileFormat::ZOPFLI | FileFormat::GZIP => Box::new(MultiGzDecoder::new(r)),
_ => unreachable!(),
}
})
}
// C++ FFI
@@ -274,9 +279,9 @@ pub fn get_decoder<'a, R: Read + 'a>(format: FileFormat, r: R) -> Box<dyn Read +
pub fn compress_bytes(format: FileFormat, in_bytes: &[u8], out_fd: RawFd) {
let mut out_file = unsafe { ManuallyDrop::new(File::from_raw_fd(out_fd)) };
let mut encoder = get_encoder(format, out_file.deref_mut());
let _: LoggedResult<()> = try {
encoder.write_all(in_bytes)?;
let mut encoder = get_encoder(format, out_file.deref_mut())?;
std::io::copy(&mut Cursor::new(in_bytes), encoder.deref_mut())?;
encoder.finish()?;
};
}
@@ -284,8 +289,10 @@ pub fn compress_bytes(format: FileFormat, in_bytes: &[u8], out_fd: RawFd) {
pub fn decompress_bytes(format: FileFormat, in_bytes: &[u8], out_fd: RawFd) {
let mut out_file = unsafe { ManuallyDrop::new(File::from_raw_fd(out_fd)) };
let mut decoder = get_decoder(format, in_bytes);
std::io::copy(decoder.as_mut(), out_file.deref_mut()).log_ok();
let _: LoggedResult<()> = try {
let mut decoder = get_decoder(format, in_bytes)?;
std::io::copy(decoder.as_mut(), out_file.deref_mut())?;
};
}
// Command-line entry points
@@ -341,7 +348,7 @@ pub(crate) fn decompress_cmd(infile: &Utf8CStr, outfile: Option<&Utf8CStr>) -> L
FileOrStd::File(outfile.create(OFlag::O_WRONLY | OFlag::O_TRUNC, 0o644)?)
};
let mut decoder = get_decoder(format, Cursor::new(buf).chain(input.as_file()));
let mut decoder = get_decoder(format, Cursor::new(buf).chain(input.as_file()))?;
std::io::copy(decoder.as_mut(), &mut output.as_file())?;
if rm_in {
@@ -384,7 +391,7 @@ pub(crate) fn compress_cmd(
FileOrStd::File(outfile)
};
let mut encoder = get_encoder(method, output.as_file());
let mut encoder = get_encoder(method, output.as_file())?;
std::io::copy(&mut input.as_file(), encoder.as_mut())?;
encoder.finish()?;

View File

@@ -691,8 +691,8 @@ impl CpioEntry {
if self.mode & S_IFMT != S_IFREG {
return false;
}
let mut encoder = get_encoder(FileFormat::XZ, Vec::new());
let Ok(data): std::io::Result<Vec<u8>> = (try {
let mut encoder = get_encoder(FileFormat::XZ, Vec::new())?;
encoder.write_all(&self.data)?;
encoder.finish()?
}) else {
@@ -710,7 +710,7 @@ impl CpioEntry {
}
let Ok(data): std::io::Result<Vec<u8>> = (try {
let mut decoder = get_decoder(FileFormat::XZ, Cursor::new(&self.data));
let mut decoder = get_decoder(FileFormat::XZ, Cursor::new(&self.data))?;
let mut data = Vec::new();
std::io::copy(decoder.as_mut(), &mut data)?;
data

View File

@@ -164,8 +164,8 @@ pub fn extract_boot_from_payload(
out_file.seek(SeekFrom::Start(out_offset))?;
let fmt = check_fmt(data);
let mut decoder = get_decoder(fmt, Cursor::new(data));
let Ok(_): std::io::Result<()> = (try {
let mut decoder = get_decoder(fmt, Cursor::new(data))?;
std::io::copy(decoder.as_mut(), &mut out_file)?;
}) else {
return Err(bad_payload!("decompression failed"));

View File

@@ -32,17 +32,17 @@ case $(uname -m) in
esac
cleanup() {
pkill -INT -P $$
wait
trap - EXIT
rm -f magisk_*.img
"$avd" delete avd -n test
exit 1
}
test_error() {
trap - EXIT
print_error "! An error occurred"
pkill -INT -P $$
wait
cleanup
exit 1
}
wait_for_boot() {
@@ -72,13 +72,14 @@ wait_emu() {
dump_vars() {
local val
for name in $@; do
for name in $@ emu_args; do
eval val=\$$name
echo $name=\"$val\"\;
done
}
resolve_vars() {
set +x
local arg_list="$1"
local ver=$2
local type=$3
@@ -138,8 +139,14 @@ dl_emu() {
setup_emu() {
local avd_pkg=$1
local ver=$2
dl_emu $avd_pkg
echo no | "$avd" create avd -f -n test -k $avd_pkg
# avdmanager is outdated, it might not set the proper target
local ini=$ANDROID_AVD_HOME/test.ini
sed "s:^target\s*=.*:target=android-$ver:g" $ini > $ini.new
mv $ini.new $ini
}
test_emu() {
@@ -169,16 +176,15 @@ test_emu() {
}
test_main() {
local avd_pkg ramdisk vars
vars=$(resolve_vars "emu_args avd_pkg ramdisk" $1 $2)
eval $vars
local ver avd_pkg ramdisk
eval $(resolve_vars "ver avd_pkg ramdisk" $1 $2)
# Specify an explicit port so that tests can run with other emulators running at the same time
local emu_port=5682
emu_args="$emu_args -port $emu_port"
export ANDROID_SERIAL="emulator-$emu_port"
setup_emu "$avd_pkg"
setup_emu "$avd_pkg" $ver
# Restart ADB daemon just in case
adb kill-server
@@ -211,24 +217,21 @@ test_main() {
test_emu release
fi
# Cleanup
rm -f magisk_*.img
"$avd" delete avd -n test
cleanup
}
run_main() {
local avd_pkg vars
vars=$(resolve_vars "emu_args avd_pkg" $1 $2)
eval $vars
setup_emu "$avd_pkg"
local ver avd_pkg
eval $(resolve_vars "ver avd_pkg" $1 $2)
setup_emu "$avd_pkg" $ver
print_title "* Launching $avd_pkg"
"$emu" @test $emu_args 2>/dev/null
cleanup
}
dl_main() {
local avd_pkg vars
vars=$(resolve_vars "avd_pkg" $1 $2)
eval $vars
local avd_pkg
eval $(resolve_vars "avd_pkg" $1 $2)
print_title "* Downloading $avd_pkg"
dl_emu "$avd_pkg"
}