diff --git a/Android.mk b/Android.mk index 442d2cff..db3bb221 100755 --- a/Android.mk +++ b/Android.mk @@ -62,7 +62,6 @@ LOCAL_SRC_FILES := \ find_file.cpp \ infomanager.cpp \ data.cpp \ - kernel_module_loader.cpp \ partition.cpp \ partitionmanager.cpp \ progresstracking.cpp \ @@ -108,7 +107,6 @@ LOCAL_C_INCLUDES += \ bionic \ system/extras \ system/core/adb \ - system/core/libmodprobe/include \ system/core/libsparse \ external/zlib \ system/core/libziparchive/include \ @@ -129,7 +127,7 @@ LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/minuitwrp/include \ $(LOCAL_PATH)/twinstall/include -LOCAL_STATIC_LIBRARIES += libguitwrp libmodprobe +LOCAL_STATIC_LIBRARIES += libguitwrp LOCAL_SHARED_LIBRARIES += libz libc libcutils libstdc++ libtar libblkid libminuitwrp libmtdutils libtwadbbu LOCAL_SHARED_LIBRARIES += libbootloader_message libcrecovery libtwrpdigest libc++ libaosprecovery libcrypto libbase LOCAL_SHARED_LIBRARIES += libziparchive libselinux libdl_android.bootstrap @@ -307,6 +305,9 @@ ifneq ($(TW_ADDITIONAL_APEX_FILES),) LOCAL_CFLAGS += -DTW_ADDITIONAL_APEX_FILES=$(TW_ADDITIONAL_APEX_FILES) endif ifneq ($(TW_LOAD_VENDOR_MODULES),) + LOCAL_SRC_FILES += kernel_module_loader.cpp + LOCAL_C_INCLUDES += system/core/libmodprobe/include + LOCAL_STATIC_LIBRARIES += libmodprobe LOCAL_CFLAGS += -DTW_LOAD_VENDOR_MODULES=$(TW_LOAD_VENDOR_MODULES) endif ifeq ($(TW_INCLUDE_CRYPTO), true) @@ -407,6 +408,12 @@ endif ifneq ($(TARGET_OTA_ASSERT_DEVICE),) LOCAL_CFLAGS += -DTARGET_OTA_ASSERT_DEVICE='"$(TARGET_OTA_ASSERT_DEVICE)"' endif +ifneq ($(TW_BACKUP_EXCLUSIONS),) + LOCAL_CFLAGS += -DTW_BACKUP_EXCLUSIONS='"$(TW_BACKUP_EXCLUSIONS)"' +endif +ifeq ($(TW_INCLUDE_FASTBOOTD), true) + LOCAL_CFLAGS += -DTW_INCLUDE_FASTBOOTD +endif ifeq ($(TW_EXCLUDE_TWRPAPP), true) LOCAL_CFLAGS += -DTW_EXCLUDE_TWRPAPP endif @@ -416,6 +423,7 @@ LOCAL_C_INCLUDES += system/vold \ TWRP_REQUIRED_MODULES += \ relink_libraries \ relink_binaries \ + relink_vendor_hw_binaries \ twrp_ramdisk \ bc \ dump_image \ @@ -446,8 +454,7 @@ TWRP_REQUIRED_MODULES += \ me.twrp.twrpapp.apk \ privapp-permissions-twrpapp.xml \ adbd_system_api_recovery \ - libsync.recovery \ - libmodprobe + libsync.recovery ifneq ($(TW_EXCLUDE_TZDATA), true) TWRP_REQUIRED_MODULES += \ @@ -512,7 +519,7 @@ endif ifeq ($(BOARD_HAS_NO_REAL_SDCARD),) TWRP_REQUIRED_MODULES += sgdisk endif -ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS), true) +ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS),) TWRP_REQUIRED_MODULES += openaes openaes_license endif ifeq ($(TW_INCLUDE_DUMLOCK), true) @@ -552,11 +559,17 @@ ifeq ($(TW_INCLUDE_NTFS_3G),true) mkfs.ntfs endif ifeq ($(TARGET_USERIMAGES_USE_F2FS), true) - TWRP_REQUIRED_MODULES += sload.f2fs \ + TWRP_REQUIRED_MODULES += sload_f2fs \ libfs_mgr \ fs_mgr \ libinit endif +ifneq ($(TW_LOAD_VENDOR_MODULES),) + TWRP_REQUIRED_MODULES += libmodprobe +endif +ifeq ($(TW_INCLUDE_PYTHON),true) + TWRP_REQUIRED_MODULES += python3_twrp +endif TWRP_REQUIRED_MODULES += file_contexts_text @@ -566,12 +579,6 @@ endif LOCAL_REQUIRED_MODULES += $(TWRP_REQUIRED_MODULES) -TW_THEME_VERSION := $(shell grep TW_THEME_VERSION bootable/recovery/variables.h | cut -d ' ' -f 3) - -LOCAL_POST_INSTALL_CMD += \ - sed -i "s/{themeversion}/$(TW_THEME_VERSION)/" $(TARGET_RECOVERY_ROOT_OUT)/twres/splash.xml; \ - sed -i "s/{themeversion}/$(TW_THEME_VERSION)/" $(TARGET_RECOVERY_ROOT_OUT)/twres/ui.xml; - include $(BUILD_EXECUTABLE) # Symlink for file_contexts diff --git a/data.cpp b/data.cpp index 011adf61..955c17fd 100755 --- a/data.cpp +++ b/data.cpp @@ -719,6 +719,10 @@ void DataManager::SetDefaultValues() printf("TW_HAS_EDL_MODE := true\n"); mConst.SetValue(TW_EDL_MODE, "1"); #endif +#ifdef TW_INCLUDE_FASTBOOTD + printf("TW_INCLUDE_FASTBOOTD := true\n"); + mConst.SetValue(TW_FASTBOOT_MODE, "1"); +#endif #ifdef PRODUCT_USE_DYNAMIC_PARTITIONS printf("PRODUCT_USE_DYNAMIC_PARTITIONS := true\n"); mConst.SetValue(TW_FASTBOOT_MODE, "1"); @@ -814,11 +818,10 @@ void DataManager::SetDefaultValues() mData.SetValue("tw_sleep", "5"); mData.SetValue("tw_enable_fastboot", "0"); - if (android::base::GetBoolProperty("ro.virtual_ab.enabled", false)) - mConst.SetValue("tw_virtual_ab.enabled", "1"); + mConst.SetValue(TW_VIRTUAL_AB_ENABLED, "1"); else - mConst.SetValue("tw_virtual_ab.enabled", "0"); + mConst.SetValue(TW_VIRTUAL_AB_ENABLED, "0"); // Brightness handling string findbright; #ifdef TW_BRIGHTNESS_PATH diff --git a/gui/action.cpp b/gui/action.cpp index 819e4ad8..d5b8c8f4 100755 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -1801,9 +1801,9 @@ int GUIAction::flashimage(std::string arg __unused) string current_slot = PartitionManager.Get_Active_Slot_Display(); bool pre_op_status = PartitionManager.Flash_Image(path, filename); - PartitionManager.Set_Active_Slot(current_slot == "A" ? "B" : "A"); + PartitionManager.Override_Active_Slot(current_slot == "A" ? "B" : "A"); op_status = (int) !(pre_op_status && PartitionManager.Flash_Image(path, filename)); - PartitionManager.Set_Active_Slot(current_slot); + PartitionManager.Override_Active_Slot(current_slot); DataManager::SetValue("tw_flash_both_slots", 0); flag = false; @@ -2360,4 +2360,4 @@ int GUIAction::mergesnapshots(string arg __unused) { } operation_end(op_status); return 0; -} \ No newline at end of file +} diff --git a/gui/libguitwrp_defaults.go b/gui/libguitwrp_defaults.go index 4c64f50f..290be250 100644 --- a/gui/libguitwrp_defaults.go +++ b/gui/libguitwrp_defaults.go @@ -4,6 +4,7 @@ import ( "android/soong/android" "android/soong/cc" "fmt" + "io/ioutil" "os" "path" "strconv" @@ -64,6 +65,111 @@ func copyThemeResources(ctx android.BaseContext, dirs []string, files []string) fileDest := twRes + path.Base(file) copyFile(fileToCopy, fileDest) } + data, err := ioutil.ReadFile(recoveryDir + "variables.h") + if err != nil { + fmt.Println(err) + return + } + version := "0" + for _, line := range strings.Split(string(data), "\n") { + if strings.Contains(line, "TW_THEME_VERSION") { + version = strings.Split(line, " ")[2] + } + } + + _props := [3]string{"TW_CUSTOM_BATTERY_POS", "TW_CUSTOM_CPU_POS", "TW_CUSTOM_CLOCK_POS" } + props := [3]string{"0", "0", "0"} + for i, item := range _props { + if getMakeVars(ctx, item) != "" { + props[i] = strings.Trim(getMakeVars(ctx, item), "\"") + } + } + + _files := [2]string{"splash.xml", "ui.xml"} + for _, i := range _files { + var fontsize int = 0 + var width int = 0 + + data, err = ioutil.ReadFile(twRes + i) + if err != nil { + fmt.Println(err) + return + } + + newFile := strings.Replace(string(data), "{themeversion}", version, -1) + + // Custom position for status bar items - start + if i == "ui.xml" { + + for _, line := range strings.Split(string(data), "\n") { + if strings.Contains(line, "name=\"font_m\"") { + fontsize, err = strconv.Atoi(strings.Split(line, "\"")[5]) + if err != nil { + fmt.Println(err) + return + } + } + if strings.Contains(line, "resolution") { + width, err = strconv.Atoi(strings.Split(line, "\"")[1]) + if err != nil { + fmt.Println(err) + return + } + } + } + + var cpusize int = (fontsize * 5) + (width/100) + var clocksize int = (fontsize * 4) + (width/100) + var batterysize int = (fontsize * 6) - (width/100) + var pos_clock_24 string = props[2] + for j := 0; j < len(props); j++ { + if props[j] == "left" { + props[j] = strconv.Itoa(width/50) + if _props[j] == "TW_CUSTOM_CLOCK_POS" { + pos_clock_24 = props[j] + } + } else if props[j] == "center" { + if _props[j] == "TW_CUSTOM_BATTERY_POS" { + props[j] = strconv.Itoa( (width/2) - (batterysize*43/100) ) + } else if _props[j] == "TW_CUSTOM_CLOCK_POS" { + pos := (width/2) - (clocksize*45/100) + props[j] = strconv.Itoa(pos) + pos_clock_24 = strconv.Itoa( pos * 31/30 ) + } else if _props[j] == "TW_CUSTOM_CPU_POS" { + props[j] = strconv.Itoa( (width/2) - (cpusize*41/100) ) + } + } else if props[j] == "right" { + if _props[j] == "TW_CUSTOM_BATTERY_POS" { + props[j] = strconv.Itoa( width - batterysize ) + } else if _props[j] == "TW_CUSTOM_CLOCK_POS" { + props[j] = strconv.Itoa(width - clocksize) + pos_clock_24 = props[j] + } else if _props[j] == "TW_CUSTOM_CPU_POS" { + props[j] = strconv.Itoa( width - cpusize ) + } + } + } + + alignProp := "%status_topalign_header_y%" + if strings.Trim(getMakeVars(ctx, "TW_STATUS_ICONS_ALIGN"), "\"") == "center" || strings.Trim(getMakeVars(ctx, "TW_STATUS_ICONS_ALIGN"), "\"") == "2" { + alignProp = "%status_centeralign_header_y%" + } else if strings.Trim(getMakeVars(ctx, "TW_STATUS_ICONS_ALIGN"), "\"") == "bottom" || strings.Trim(getMakeVars(ctx, "TW_STATUS_ICONS_ALIGN"), "\"") == "3" { + alignProp = "%status_bottomalign_header_y%" + } + newFile = strings.Replace(newFile, "{battery_pos}", props[0], -1) + newFile = strings.Replace(newFile, "{cpu_pos}", props[1], -1) + newFile = strings.Replace(newFile, "{clock_12_pos}", props[2], -1) + newFile = strings.Replace(newFile, "{clock_24_pos}", pos_clock_24, -1) + newFile = strings.Replace(newFile, "{statusicons_align}", alignProp, -1) + } + // Custom position for status bar items - end + + err = ioutil.WriteFile(twRes + i, []byte(newFile), 0) + if err != nil { + fmt.Println(err) + return + } + } } func copyCustomTheme(ctx android.BaseContext, customTheme string) { diff --git a/gui/rapidxml.hpp b/gui/rapidxml.hpp index 33a88601..f47807d3 100644 --- a/gui/rapidxml.hpp +++ b/gui/rapidxml.hpp @@ -1390,7 +1390,15 @@ namespace rapidxml // Parse BOM, if any parse_bom(text); - + + // Abort if it's ABX format + if (text[0] == Ch('A') && + text[1] == Ch('B') && + text[2] == Ch('X')) { + RAPIDXML_PARSE_ERROR("ABX Format Unsupported by RapidXML", text); + return; + } + // Parse children while (1) { diff --git a/gui/theme/common/landscape.xml b/gui/theme/common/landscape.xml index 3da15527..c64d11e5 100755 --- a/gui/theme/common/landscape.xml +++ b/gui/theme/common/landscape.xml @@ -3857,7 +3857,7 @@ - + tw_back=advanced tw_action=unmapsuperdevices diff --git a/gui/theme/common/languages/cz.xml b/gui/theme/common/languages/cz.xml index e15b2a72..5194704c 100644 --- a/gui/theme/common/languages/cz.xml +++ b/gui/theme/common/languages/cz.xml @@ -1,31 +1,38 @@ - + - Czech + Čeština + - + + Systém - Obraz systému - Dodavatel - Obrázek dodavatela + Systém + Vendor + Vendor Boot Recovery Cache Data + Data (bez úložiště) SD karta Interní úložiště Mikro SD karta USB OTG Android Secure Dalvik / ART Cache + SD-EXT - Přijaté data - Přijaté úložiště + Připojená data + Připojené úložiště + Úložiště + + Team Win Recovery Project TWRP %tw_version% CPU: %tw_cpu_temp% °C @@ -43,6 +50,7 @@ OBRAZOVKA VIBRACE JAZYK + Instalovat Vymazat Zálohovat @@ -54,10 +62,10 @@ Soubory Kopírovat log Vyberte typ - Instalovat Zip - Instalovat Zip - Instalovat obraz - Instalovat obraz + Instalovat ZIP + Instalovat ZIP + Instalovat IMG + Instalovat IMG Vybrat soubor Složky Vyberte soubor z: %tw_storage_display_name% (%tw_storage_free_size% MB) @@ -70,43 +78,58 @@ Soubor %tw_zip_queue_count% z 10: Tato operace může nainstalovat nekompatibilní software a znefunkčnit zařízení. - Stlačte Nazpět pro zrušení přidání zip. + Stlačte Nazpět pro zrušení přidání ZIPu. Stlačte Nazpět pro vyčištění seznamu. Adresář: Soubor: - Verifikace podpisu zip + Verifikace podpisu ZIPu Vložit TWRP po instalaci + Po dokončení instalace restartovat Nastavení - Potvrdit flash + Potvrdit instalaci Řada: Nastavení: Potvrdit - Přidat víc Zip - Vyčistit seznam Zip - Nainstaluj Zip %tw_zip_index% z %tw_zip_queue_count% - Instalace Zip: %tw_file% + Přidat víc ZIPů + Vyčistit seznam ZIPů + Instalace ZIPu %tw_zip_index% z %tw_zip_queue_count% + Instalace ZIPu: %tw_file% Neúspěšné Úspěšné Instalace selhala Instalace se podařila Vymazat cache/dalvik + Vymazat Dalvik Restartovat systém Vyberte cílový oddíl Vyberte cílový oddíl pro zápis obrazu: Cílový oddíl: - Zapisování obrazu... - Obraz zapsaný - Smazat cache & dalvik? + Zapisování IMG... + IMG zapsaný + Smazat cache & dalvik? + Vymazat Dalvik? Mazání cache & dalvik... Vymazání cache & dalvik dokončeno + Vymazaní Dalvik hotovo Potáhnout pro vymazání Vymazání - Není nainstalovaný OS! Jste si - si jistý, že chcete restart? + Není nainstalovaný OS! Jste + si jistý, že chcete restartovat? si jistý, že chcete vypnout zařízení? Restartování... - Potáhnout pro restart + Potáhnout pro restartování Restart + Přejete si nainstalovat apku Official TWRP App? + Aplikace může zkontrolovat nové verze TWRP. + Instalovat TWRP apku? + Vyzvat k instalaci TWRP apky, pokud není nainstalována + Nainstalovat jako systémovou aplikaci + Instalace aplikace... + Potáhnout pro instalaci TWRP apky + Odinstalovat TWRP apku ze systému + TWRP apka odinstalována + Odinstalovat TWRP apku ze systému? + Odinstalovávání TWRP apky ze systému... Potáhnout pro potvrzení zápisu Potvrdit akci Pro zrušení stlačte tlačítko nazpět. @@ -115,17 +138,18 @@ Tovární nastavení Tovární nastavení Vymazat Data, Cache a Dalvik - (nezahrnuje vnitřní paměť) + (nezahrnuje vnitřní úložiště) Většinou je potřebné jen vymazaní. + (nezahrnuje uživatelé/zámek obrazovky) Tovární nastavení... Rozšířené vymazání Rozšířené vymazání Vymazat šifrovaní z Data? Formátuji Data... - Swipe pro volbu Formátovat Data + Potáhnout pro volbu Formátovat Data Formátovat Data - Tovární nastavení ukončené + Tovární nastavení dokončeno Vyberte oddíly Vymazat vybraný(é) oddíl(y)? Vymazávání oddílu(ů)... @@ -136,23 +160,24 @@ Formátovat Data Formátování Data vymaže všechny aplikace, zálohy, fotky, videa, hudbu - a vymaže enkrypci vnitřní paměťi. - Zahrnuje adoptovanou paměť + a odstraní šifrovaní úložiště. + Zahrnuje připojenou paměť Formátování Data vymaže všechny aplikace, zálohy, fotografie, videa, hudbu - a vymaže enkrypci vnitřní paměťi. + a odstraní šifrovaní úložiště. Formátování Data vymaže všechny aplikace, zálohy a hudbu. Tento proces je nevratný. Toto je nevratné. Formátování Data je hotové + Napiš \"yes\" pro pokračování. Stlač nazpět pro zrušení. Možnosti pro: %tw_partition_name% Vyber akci Nastavení souborového systému Oddíly: %tw_partition_name% - Mount point: %tw_partition_mount_point% + Připojit část: %tw_partition_mount_point% Souborový systém: %tw_partition_file_system% - Přítomný: Ano - Přítomný: Ne + Současný: Ano + Současný: Ne Vyměnitelný: Ano Vyměnitelný: Ne Velikost: %tw_partition_size%MB @@ -170,7 +195,7 @@ Oprava Opravit %tw_partition_name%? Opravování... - Oprava ukončená + Oprava dokončena Potáhnout pro opravu Oprava Změnit souborový systém @@ -196,11 +221,17 @@ Název: Vybrat oddíly do zálohy: Paměť: - zakázané - pro povolení zadejte heslo - povolené + zakázáno - pro povolení zadejte heslo + povoleno Povolit kompresi Vynechat generovaní Digest během zálohy - Nekontrolovat volné místo + Nekontrolovat volné místo + Přeskočit Digest kontrolu před instalováním ZIPu + Aktuální slot: %tw_active_slot% + Slot A + Slot B + Změna spouštěcího slotu + Změna spouštěcího slotu hotova Obnovit velikosti Potáhnout pro zálohu Připojit datum @@ -210,17 +241,17 @@ Zopakujte heslo: Hesla se nezhodují! Oddíly: - Zakázané - Povolené + Zakázáno + Povoleno Pojmenování zálohy - Příběh: + Průběh: Zálohovaní je dokončeno Obnova Vyberte zálohu Vyberte zálohu z %tw_storage_display_name% (%tw_storage_free_size% MB) Vyberte balíček pro obnovu: Šifrovaná záloha - Heslo je nesprávne, zkuste to znova! + Heslo není správné, zkuste to znova! Smazat zálohu Smazat zálohu? Toto je nevratné! @@ -239,7 +270,7 @@ Přejmenovat zálohu Přejmenovat zálohu? Toto je nevratné! - Přejmenovávaní zálohy... + Přejmenovávání zálohy... Přejmenování zálohy dokončeno Potáhnutím přejmenovat Přejmenovat @@ -248,12 +279,12 @@ Vybrat oddíly pro připojení: Připojit oddíly v režimu čtení Připojit systém v režimu na čtení - Dekryptovat Data + Dešifrovat Data Zakázat MTP Povolit MTP - Připoj. ukl. prostor USB - Ukládací prostor USB - Ukládací prostor USB připojený + Připoj. ulož. prostor USB + Uložný prostor USB + Uložný prostor USB připojen Ujistěte se, že jste zařízení odebrali z počítače před odpojením! Odpojit @@ -262,7 +293,7 @@ Recovery Bootloader Stáhnout - EDL + Edl Vypínání... Potáhnout pro vypnutí Vypnout @@ -270,13 +301,13 @@ Ponechat Systém v režimu na čtení? TWRP může ponechat váš systémový oddíl nezměněný což zjednoduší instalaci oficiálních aktualizací. - TWRP nezabrání tuctové ROMky + TWRP nezabrání tovární ROMce přepsat TWRP a nebude nabízet rootování zařízení. - Instalovaní Zip nebo operace přes adb můžu stále + Instalovaní ZIPu nebo operace přes ADB mohou stále modifikovat systémový oddíl. TWRP může ponechat váš systémový oddíl nezměněný což zjednoduší instalaci oficiálních aktualizací. - TWRP nezabrání tuctové ROMce přepsat TWRP a nebude nabízet rootování zařízení. - Instalování Zip nebo operace přes adb můžou stále modifikovat systémový oddíl. + TWRP nezabrání tovární ROMce přepsat TWRP a nebude nabízet rootování zařízení. + Instalování ZIPu nebo operace přes ADB mohou stále modifikovat systémový oddíl. Nikdy víc nezobrazovat tuto obrazovku po startu Ponechat v režimu na čtení Potáhnout pro povolení změn @@ -286,9 +317,10 @@ Všeobecné Všeobecné Použít rm -rf namísto naformátování + Automaticky obnovit TWRP po instalaci ROM Používat 24-hodin Převrácené uspořádaní lišty - Simulovat akce pro testovaní téma + Simulovat akce pro testovaní tématu Simulovat neúspěchy akcí Centrovat tlačítka navigace Zarovnat tlačítka navigace vlevo @@ -297,10 +329,13 @@ Časové pásmo Obrazovka Jas obrazovky + Vibrace jsou pro toto zařízení deaktivovány Vibrovat Jazyk Časové pásmo Vyberte časové pásmo: + (UTC -11) Samoa, Midwayské ostrovy (UTC -10) Havaj (UTC -9) Aljaška @@ -313,7 +348,7 @@ (UTC -2) Středoatlantický čas (UTC -1) Azory, Cape Verde (UTC 0) Greenwichský čas, Londýn, Dublin, Lisabon - (UTC +1) Stredoevropský čas, Praha, Berlín, Brusel, Paříž + (UTC +1) Středoevropský čas, Praha, Berlín, Brusel, Paříž (UTC +2) Atény, Istanbul, Minsk, Káhira (UTC +3) Moskva, Bagdád, Teherán (UTC +4) Abu Dhabi, Tbilisi, Muscat @@ -344,10 +379,10 @@ Jas: %tw_brightness_pct%% Nastavení jasu nedostupné Vibrovat - Vibrovat při stláčení + Vibrovat při stlačení Vibrovat při psaní Vibrovat při akci - Vibrovat při stláčení: + Vibrovat při stlačení: Vibrovat při psaní: Vibrovat při akci: Výběr jazyka: @@ -355,14 +390,15 @@ Nastavit jazyk Rozšířené Kopírovat log na SD kartu? - Kopírování logu na SD kartu... - Kopírování logu dokončeno + Kopírování logu na SD kartu... + Kopírování logu dokončeno + Oprava kontextů Rozdělit SD kartu SD karta Souborový manažer Jazyk Terminál - Načítat téma + Načíst téma HTC Dumlock Vložit TWRP Znova vložit TWRP? @@ -371,7 +407,7 @@ Potáhnout pro potvrzení Rozdělit SD kartu Musíte zvolit odstranitelné zařízení - Přijdete o všechny soubory na vložené SD kartě! + Příjdete o všechny soubory na vložené SD kartě! Toto je nevratná akce! Velikost EXT: Velikost Swap: @@ -380,18 +416,18 @@ Souborový systém: Potáhnutím rozdělit Rozdělení - Dělím SD kartu... + Rozdělování SD karty... Toto potrvá několik minut. - Rozdělení kompletní + Rozdělení dokončeno HTC Dumlock - Onbovit původní boot - Obnovit původní obraz boot? - Obnovování původního bootu... - Obnova původního bootu dokončená - Přepsání recovery - Přepsat recovery při startu? - Přepisování recovery při startu... - Přepsání recovery při startu dokončeno + Onbovit původní Boot + Obnovit původní Boot? + Obnovování původního Bootu... + Obnova původního Bootu dokončená + Přepsání Recovery + Přepsat Recovery při startu? + Přepisování Recovery při startu... + Přepsání Recovery při startu dokončeno Instalovat HTC Dumlock Instalovat soubory HTC Dumlock do ROM? Instalace HTC Dumlock... @@ -403,8 +439,8 @@ Adresář Soubor Zvolte akci - Zvolené %tw_fm_type%: - Kopíruj + Zvoleno %tw_fm_type%: + Kopírovat Kopírovat soubor Kopírovat adresář Kopírování @@ -424,27 +460,84 @@ Přejmenovat Nastavit práva Práva: - Operace na souboru dokončená + Operace se souborem dokončena + Zde otevřít Terminal + Upravit soubor Dešifrovat data Zadejte heslo. + Heslo selhalo, zkuste to znovu! + Vzor selhal, zkuste to znovu! Zadejte vzor. Pokus o dešifrování + Chybí soubory nutné pro dešifrování: {1} Příkaz terminálu Terminál ZABÍT Navigovat do počátečního adresáře ADB Sideload - Vymazat dalvik cache - Vymazat cache + Vymazat Dalvik Cache + Vymazat Cache Potáhnout pro spuštění sideload Start ADB Sideload Použití: adb sideload název.zip - ADB Sideload dokončený + ADB Sideload dokončeno + Oprava kontextů + Poznámka: Oprava kontextů je zřídka nutná. + Oprava SELinux kontextů může způsobit + problémy se správným spuštěním zařízení. + Oprava kontextů + Potáhnout pro opravu kontextů + Oprava kontextů... + Oprava kontextů hotova Restart Neinstalovat Vyberte úložiště OK + Instalovat Recovery Ramdisk + Instalovat Kernel + Instalovat Kernel? + Instalovat Kernel + Instalovat Recovery? + Instalovat Recovery + Nejprve zálohujte existující IMG + Přebalit + Potáhnout pro potvrzení instalace + Instalování... + Instalace hotova + Chyba při rozbalování IMG. + Chyba při přebalení IMG. + soubory ramdisku byly upraveny, nelze vytvořit ramdisk pro instalaci, spusťte twrp fastboot a zkuste tuto možnost znovu nebo použijte možnost Instalovat Recovery Ramdisk. + Nepodařilo se vytvořit ramdisk k instalováním. + Rozbalování {1}... + Přebalování {1}... + Vybrat IMG + Pokud bylo zařízení dříve rootováno, pak byl root přepsán a bude nutné jej znovu nainstalovat. + Instalace aktualního TWRP + Instalovat aktualní TWRP? + Instalování TWRP... + Instalace TWRP dokončena + Opravit Recovery bootloop + Opravit Recovery bootloop? + Oprava Recovery bootloopu... + Oprava Recovery bootloopu hotova + Záplatování Kernelu... + Chyba záplatování Kernelu. + Dešifrování uživatelů + Zvolte ID uživatele pro dešifrování + Vyberte uživatele + Záloha nezahrnuje některé soubory uživatele {1}, protože uživatel není dešifrován. + Pokus o dešifrování FBE uživatele {1}... + Dešifrování uživatele {1} hotovo + Dešifrování uživatele {1} se nezdařilo + Zadejte heslo pro uživatele [%tw_crypto_user_id%] + Zadejte vzor pro uživatele [%tw_crypto_user_id%] + Nebyli dešifrováni všichni uživatelé! + Operace Záloha/Obnova mohou selhat! + Přesto pokračovat + Multiuživatel varování + + Kernel nemá podporu pro čtení obsahu SELinux. Plná podpora SELinux. Bez podpory SELinux (chybí libselinux). @@ -453,14 +546,15 @@ Úspešně dešifrované s přednastaveným heslem. Nelze dešifrovat s přednastaveným heslem. Možná budete muset naformátovat Data. Generuje se Digest + *Generuje se Digest... - *Digest vygenerované. + *Digest vygenerován. * chyba Digest! * chyba při výpočtu Digest. (Aktuální datum) - (Generovat automaticky) + (Vytvořit automaticky) Nelze najít oddíl \'{1}\' pro výpočet zálohy. - Žádné oddíly vybrané na zálohování. + Nejsou vybrány žádné oddíly na zálohování. * Počet oddílů označených na zálohování: {1} * Konečná velikost zálohy: {1}MB * Zůstatek místa: {1}MB @@ -475,25 +569,29 @@ [ZÁLOHA DOKONČENÁ ZA {1} SEKUND] [ZAČÁTEK OBNOVY] Obnovit adresář: \'{1}\' + + [{1} hotovo ({2} sekund)] Kontrolování Digest Vynechání kontroly Digest na základě uživatelského nastavení. Počítání detailů obnovy... Nelze obnovit {1} -- připojené jen na čtení. Nelze najít oddíl \'{1}\' pro obnovu. - Žádné oddíly nebyly vybrané pro obnovu. + Žádné oddíly nebyly vybrány pro obnovu. Obnova {1} oddílů... - Velikost obnovy je spolu {1}MB + Celková velikost obnovy je {1}MB Obnovování detailů systému [OBNOVA DOKONČENÁ ZA {1} SEKUND] - Chyba při otvírání: \'{1}\' ({2}) + + Chyba při otevírání: \'{1}\' ({2}) Nelze najít oddíl podle názvu zálohy: \'{1}\' Nelze najít oddíl na cestě \'{1}\' Obnova detailů oddílů... ...hotovo - Vymazávání adresářů dalvik cache... + Vymazávání adresářů Dalvik Cache... Vyčištěné: {1}... - -- Vyčištění adresáře Dalvik cache bylo dokončeno! - Žádné zabezpečené android oddíly nebyly nalezeny. + -- Vymazání Dalvik Cache adresáře hotovo! + -- Vyčištění adresáře Dalvik Cache bylo dokončeno! + Žádné Android Secure oddíly nebyly nalezeny. {1} nelze najít. Vymazávání interního úložiště -- /data/media... {1} nelze připojit @@ -501,11 +599,12 @@ Nelze připojit úložiště Nelze dešifrovat data. Tato verze byla zkompilovaná bez podpory šifrování. - Data byly úspěšne dešifrované, nový block device: \'{1}\' + Data byla úspěšně dešifrována, nový blok zařízení: \'{1}\' + Data byla úspěšně dešifrována Hotovo. - Dělení SD karty... + Rozdělování SD karty... Nelze najít zařízení na rozdělení. - Velikost EXT + Swap je větší jako velikost SD karty. + Velikost EXT + Swap je větší než velikost SD karty. Vymazávání tabulky rozdělení... Nelze vymazat tabulku rozdělení. Vytváření oddílu {1}... @@ -516,29 +615,32 @@ MTP je už povolené Nelze povolit MTP Podpora MTP není zahrnutá - [ZÁPIS OBRAZU SPUŠTĚNÝ] - Obraz na zápis: \'{1}\' + [ZÁPIS IMG SPUŠTĚN] + IMG na zápis: \'{1}\' Nelze najít oddíl \'{1}\' pro zápis. Na zápis nebyly zvolené žádné oddíly. - Na zápis je zvolených příliš mnoho oddílů. + Na zápis je zvoleno příliš mnoho oddílů. Zvolený oddíl je nesprávný pro zápis. - [ZÁPIS OBRAZU DOKONČENÝ] + [ZÁPIS IMG DOKONČEN] Mazání {1} {1} neexistuje! Oprava nemožná! Oprava {1} pomocí {2}... Nelze opravit {1}. Nelze připojit /data a nelze najít parametry šifrování. + Adresář \'{1}\' nelze vytvořit ({2}). + Nelze připojit \'{1}\' ({2}) + Nelze odpojit \'{1}\' ({2}) Nelze natáhnout {1}. Opravování {1} před natáhnutím. Nelze natáhnout {1}. Soubor Digest se nenašel pro \'{1}\'. Prosím zvolte Vypnout kontrolu Digest během obnovy. Digest neodpovídá souboru \'{1}\'. - Digest matched for '{1}'. - Nelze dešifrovat soubor tar \'{1}\' - Měli by jste restartovat recovery aby jste mohli znova používat /data. + Digest pasuje k '{1}'. + Nelze dešifrovat soubor TAR \'{1}\' + Měli by jste restartovat Recovery aby jste mohli znova používat /data. Nelze formátovat pro zrušení šifrování. Formátování {1} použitím {2}... Nelze vymazat {1}. @@ -546,13 +648,14 @@ Vymazání všech souborů v \'{1}\' Vymazaní Data bez vymazání /data/media... Zálohování {1}... + Záloha {1} nezahrnuje žádné soubory interního úložiště, jako jsou obrázky, hudba nebo stažené soubory. Zálohování Velikost zálohy pro \'{1}\' je 0 bajtů. - UPOZORNĚNÍ: Tato záloha /data byla vytvořená pomocí systému souborů {1}! Záloha nebude bootovat pokud se nezmění nazpět na {1}. + UPOZORNĚNÍ: Tato záloha /data byla vytvořená pomocí systému souborů {1}! Záloha nebude spustitelná pokud se nezmění nazpět na {1}. Obnovování {1}... Obnovování Nelze vytvořit adresář {1}. - Velikost obrazu je větší než cílové zařízení + Velikost IMG je větší než cílové zařízení Zapisování {1}... Adresář záloh nastavený na: \'{1}\' Zálohu \'{1}\' nelze najít @@ -570,65 +673,125 @@ Spouštění příkazu ADB Sideload Spouštění funkce ADB sideload... - pro použití sideload na toto zařízení potřebujete ADB 1.0.32 nebo novší. - Heslo nebylo poskytnuté. + pro použití sideload na tomto zařízení potřebujete ADB 1.0.32 nebo novější. + Heslo nebylo poskytnuto. Vykonávání skriptu dokončeno - Vkládání TWRP do obrazu boot... - Chyba při instalaci zip souboru \'{1}\' - Instalace zip souboru \'{1}\' + Vkládání TWRP do boot.img... + Chyba při instalaci ZIP souboru \'{1}\' + Instalace ZIP souboru \'{1}\' Nastavení možností zálohy: - Komprese zapnutá - Generovaní Digest vypnuté + Komprese je zapnutá + Vytváření Digest vypnuté Zálohování selhalo Zálohování selhalo. Čistění adresáře záloh. - Spouštění příkazů recovery - Příkazy recovery dokončeno + Spouštění příkazů Recovery + Příkazy Recovery dokončeny Spouštění OpenRecoveryScript - OpenRecoveryScript dokončený - Nelze nájít \'{1}\' v souboru zip. + OpenRecoveryScript dokončen Kontrola Digest souboru... + Neplatný formát ZIP souboru! Nelze namapovat soubor \'{1}\' - Ověřování podpisu zip souboru... - Ověřování podpisu zip souboru selhalo! - Podpis souboru zip úspešně ověřený. - Soubor zip je poškozený! + Ověřování podpisu ZIP souboru... + Ověřování podpisu ZIP souboru selhalo! + Podpis souboru ZIP úspešně ověřen. + Soubor ZIP je poškozený! Vynechání kontroly Digest: soubor s Digest nenalezen - Digest nesedí - Digest sedí + Digest nesouhlasí + Digest souhlasí Proces {1} skončil se signálem: {2} Proces {1} skončil s CHYBOU: {2} Instalování HTC Dumlock do systému... - Obnovování původního bootu... - Zapisování recovery do bootu... - Běh skriptu {1}... - Přejmenovaný tuctový recovery soubor v /systém pro zabránění přepsání TWRP tuctovou ROM. + Obnovování původního Bootu... + Zapisování Recovery do Bootu... + Provádění skriptu {1}... + Přejmenování souboru s tovární Recovery v /systém pro zabránění přepsání TWRP tovární ROM. Rozdělení zálohy do více archívů... Chyba při vytváření zálohy. Chyba během procesu obnovy. Rozdělení ID vlákna {1} do archívu {2} + %llu z %llu souborů, %i%% %lluMB z %lluMB, %i%% - Pokus o dešifrování datového oddílu přez příkazový řádek. + Pokus o dešifrování datového oddílu přes příkazový řádek. Nepodařilo se načíst základní balíčky. Simulování akcí... Zálohování přerušeno Konfigurování TWRP... Nelze konfigurovat TWRP s tímto jádrem. Recovery log zkopírovaný do {1}. - Dosažený maximální počet zip v seznamu! - Dosažený minimální počet zip v seznamu! + Dosažený maximální počet ZIPů v seznamu! + Dosažený minimální počet ZIPů v seznamu! Snímek obrazovky byl uložen do {1} Nelze udělat snímek obrazovky! - Jeden nebo víc zip souborů vyžádalo smazaní cache -- Vymazání cache nyní. - Nelze vymazat android secure - Nelze vymazat dalvik - (Generovat automaticky) + Jeden nebo více ZIP souborů vyžádalo smazaní Cache -- Vymazat Cache nyní. + Nelze vymazat Android Secure + Nelze vymazat Dalvik + (Vytvořit automaticky) (Aktuální datum) Název zálohy je příliš dlouhý. Název zálohy \'{1}\' obsahuje neplatný znak: \'{1}\' Toto zařízení nemá skutečnou SD kartu! Přerušuji! Ruším ADB sideload... Chyba při změně souborového systému. - Téma vlastní verze nesedí s verzí TWRP. Použije se tuctové téma. + Téma vlastní verze nesedí s verzí TWRP. Použije se výchozí téma. + (O úroveň výš) + Restartování do %tw_sleep% sekund(s) + Chyba při ADB zálohování. Ukončuji..." + Nelze zapisovat na ovládací kanál ADB + --nutné pro povolení TWRP ADB zálohování + cesta: {1} nebyl nalezen v seznamu oddílů + Log kernelu zkopírován do {1} + Zkopírován logcat do {1} + Zahrnout Log kernelu + Zahrnout Logcat + Pro hashování použijte SHA2 + Chyba při změně spouštěcího slotu bootloaderu na {1} + Opojit Systém před instalací ZIPu + Odpojování Systému... + Odpojení Systému se nezdařilo + Instalace A/B ZIPu do neaktivního slotu: {1} + Chcete-li instalovat další ZIPy, restartujte TWRP a přepněte na aktualizovaný slot. + Instalace do obou slotů + Spouštění Ozip dešifrování... + Ozip dešifrování dokončeno! + Fastboot + Povolit ADB + Povolit Fastboot + Přepínání do Fastboot režimu... + TWRP znovu nevytvoří /data/media na zařízení FBE. Restartujte do své rom a vytvořte /data/media + + Spouštění záchrany (Android Rescue Party)! Možné řešení? Buď: + 1. Smazat Cache, a/nebo + 2. Formátovat Data, a/nebo + 3. Čistá instalace ROM. + Hlášeny problem je: + Nelze získat výchozí kontext pro {1} -- Android se nemusí spustit. + TWRP složka změněna na + Změna TWRP složky + Měnění TWRP složky + Složka s tímto názvem již existuje! + Zrušit mapování super zařízení + Zrušit mapování všech super zařízení? + Rušení mapování super zařízení... + Zrušena mapování všech super zařízení + Rušení mapování super zařízení... + Zrušena mapování všech super zařízení + Zrušit mapování všech super zařízení? + Zařízení se super oddílem se mohou připojit až po obnovení restartem. + Sloučit snímky? + Sloučit snímky + Slučování snímků... + Sloučené snímky + Obnovit, přesto že je vzor povolen? + Obnovit, přesto že je kód PIN povolen? + Obnovit, přesto že je kód PIN/heslo povoleno? + Pokračovat v obnovení? + Vzor je povolen + Vzor by měl být před obnovením vypnut + Kód PIN je povolen + PIN by měl být před obnovením vypnut + PIN/heslo je povoleno + PIN/heslo by mělo být před obnovením vypnuto + Po prvním spuštění se doporučuje jednou restartovat Android. diff --git a/gui/theme/common/languages/pl.xml b/gui/theme/common/languages/pl.xml index 697a7c41..469b0372 100644 --- a/gui/theme/common/languages/pl.xml +++ b/gui/theme/common/languages/pl.xml @@ -19,6 +19,7 @@ Recovery Cache Data + Data (bez pamięci wewn.) Karta SD Pamięć Wewnętrzna Karta Micro SD @@ -29,6 +30,7 @@ SD-EXT Adopted Data Adopted Storage + Pamięć Projekt Team Win Recovery @@ -97,6 +99,7 @@ Instalacja nieudana Instalacja zakończona pomyślnie Wyczyść Cache/Dalvik + Wyczyść Dalvik Uruchom System Wybierz partycję docelową Wybierz partycję do zainstalowania obrazu: @@ -104,8 +107,10 @@ Instalowanie obrazu... Obraz zainstalowany Wyczyścić Cache & Dalvik? + Wyczyścić Dalvik? Czyszczenie Cache & Dalvik... Czyszczenie Cache & Dalvik zakończone + Czyszczenie Dalvik zakończone Przesuń, aby wyczyścić Wyczyść Brak zainstalowanego systemu! Jesteś @@ -114,6 +119,17 @@ Restartowanie... Przesuń, aby zrestartować Zrestartuj + Zainstaluj aplikację TWRP + Czy chcesz zainstalować oficjalną aplikację TWRP? + Aplikacja może sprawdzać dostępność nowych wydań TWRP. + Informuj o możliwości instalacji aplikacji TWRP, jeśli jej nie zainstalowano + Zainstaluj jako systemową + Instalowanie aplikacji... + Przesuń, aby zainstalować aplikację TWRP + Odinstaluj aplikację TWRP z systemu + Odinstalować aplikację TWRP z systemu? + Dezinstalacja aplikacji TWRP z systemu... + Dezinstalacja aplikacji TWRP ukończona Przesuń, aby zainstalować Potwierdź czynność Naciśnij wstecz, aby anulować. @@ -125,6 +141,7 @@ (nie czyści pamięci wewnętrznej) W większości przypadków jest to jedyne czyszczenie jakiego potrzebujesz. + (nie czyści użytkowników/ekranu blokady) Przywracanie ustawień fabrycznych... Zaawansowane czyszczenie Zaaw. czyszczenie @@ -208,7 +225,13 @@ włączone Włącz kompresję Pomiń generowanie Digest kopii zapasowej - Wyłącz sprawdzanie wolnego miejsca + Wyłącz sprawdzanie wolnego miejsca + Pomiń sprawdzanie Digest przed instalacją pliku zip + Obecny slot: %tw_active_slot% + Slot A + Slot B + Zmiana slotu uruchamiania + Zmiana slotu uruchamiania ukończona Odśwież rozmiary Przesuń, aby wykonać kopię Dodaj datę @@ -294,6 +317,7 @@ Główne Główne Używaj rm -rf zamiast formatowania + Automatycznie wgrywaj TWRP po wgraniu ROM-u Użyj 24-godzinnego zegara Odwrócony układ paska nawigacji Symuluj akcje do testowania motywów @@ -305,6 +329,7 @@ Strefa czasowa Ekran Jasność ekranu + Wibracje są wyłączone na tym urządzeniu Wibracje Język Strefa czasowa @@ -365,8 +390,8 @@ Wybierz język Zaawansowane Skopiować log na kartę SD? - Kopiowanie pliku log na kartę SD... - Kopiowanie pliku log zakończone + Kopiowanie pliku log na kartę SD... + Kopiowanie pliku log zakończone Uprawnienia Partycjonowanie Karta SD @@ -436,12 +461,15 @@ Ustaw uprawnienia Uprawnienia: Działanie na plikach zakończone + Otwórz tu terminal + Edytuj plik Deszyfrowanie danych Wprowadź hasło. Hasło nieprawidłowe, spróbuj ponownie! Wzór nieprawidłowy, spróbuj ponownie! Wprowadź wzór. Próbuję rozszyfrować + Brakuje plików niezbędnych do zdeszyfrowania vold: {1} Polecenia Terminala Terminal ZABIJ @@ -466,6 +494,48 @@ Nie instaluj Wybierz pamięć OK + Instaluj Ramdisk Recovery + Instaluj Kernel + Instalacja Kernel + Instalacja Recovery + Zainstalować Kernel? + Zainstalować Recovery? + Najpierw wykonaj kopię obecnego obrazu + Przepakuj + Przesuń, aby zainstalować + Instalacja... + Instalacja ukończona + Błąd przy rozpakowywaniu obrazu. + Błąd przy przepakowywaniu obrazu. + pliki ramdisku zostały zmodyfikowane, nie można utworzyć ramdisku do wgrania, uruchom twrp w trybie fastboot i ponów tę operację lub użyj opcji Instaluj Ramdisk Recovery. + nie udało się utworzyć ramdisku do wgrania. + Rozpakowywanie {1}... + Przepakowywanie {1}... + Wybierz obraz + Jeśli urządzenie zostało przedtem zrootowane, root zniknie i trzeba będzie zainstalować go ponownie. + Wgraj Obecne TWRP + Wgrać obecne TWRP? + Wgrywanie TWRP... + Ukończono wgrywanie TWRP + Napraw Bootloop Recovery + Naprawić bootloop recovery? + Naprawianie bootloopa Recovery... + Ukończono naprawianie bootloopa Recovery + Patchowanie kernela... + Błąd przy patchowaniu kernela. + Deszyfruj użytkowników + Wybierz ID użytkownika do zdeszyfrowania + Wybierz użytkownika + Kopia zapasowa nie będzie zawierać pewnych plików użytkownika {1}, ponieważ nie jest on odszyfrowany. + Próba zdeszyfrowania FBE dla użytkownika {1}... + Pomyślnie zdeszyfrowano użytkownika {1} + Nie udało się zdeszyfrować użytkownika {1} + Wprowadź hasło dla użytkownika [%tw_crypto_user_id%] + Wprowadź wzór dla użytkownika [%tw_crypto_user_id%] + Nie wszyscy użytkownicy są zdeszyfrowani! + Operacje tworzenia kopii zapasowej lub jej przywrócenia mogą się nie powieść! + Kontynuuj mimo to + Ostrzeżenie dot. wielu użytkowników Kernel nie posiada obsługi odczytu uprawnień SELinux. @@ -519,6 +589,7 @@ ...ukończono Czyszczenie katalogów Dalvik Cache... Wyczyszczono: {1}... + -- Czyszczenie katalogów Dalvik Cache zakończone! -- Czyszczenie Dalvik Cache zakończone! Nie znaleziono partycji android_secure. Nie można zlokalizować {1}. @@ -529,6 +600,7 @@ Niepowodzenie rozszyfrowywania danych. Brak obsługi crypto w tej kompilacji. Dane pomyślnie rozszyfrowane, nowe urządzenie blokowe: '{1}' + Dane pomyślnie rozszyfrowane Ukończono. Partycjonowanie Karty SD... Nie można zlokalizować urządzenia do partycjonowania. @@ -568,7 +640,7 @@ Digest nie pasuje do '{1}'. Digest matched for '{1}'. Nie udało się odszyfrować pliku tar '{1}' - Może być konieczne ponowne uruchomienie recovery, aby móc ponownie użyć /date. + Może być konieczne ponowne uruchomienie recovery, aby móc ponownie użyć /data. Nie można sformatować, aby usunąć szyfrowanie. Formatowanie {1} przy użyciu {2}... Nie można wyczyścić {1}. @@ -576,6 +648,7 @@ Usuwanie wszystkich plików w '{1}' Czyszczenie Data bez /data/media ... Tworzenie kopii zapasowej {1}... + Kopie zapasowe {1} nie zawierają plików z pamięci wewnętrznej, takich jak zdjęcia czy pobrane elementy. Tworzenie kopii zapasowej Rozmiar kopii zapasowej '{1}' to 0 bajtów. UWAGA: Ta kopia /data została wykonana w sytemie plików {1}! Kopia może się nie uruchomić jeśli nie wrócisz do {1}. @@ -617,6 +690,7 @@ Ukończono Skrypt OpenRecovery Nie można znaleźć '{1}' w pliku zip. Sprawdzanie pliku Digest... + Nieprawidłowy format pliku zip! Nieudane mapowanie pliku '{1}' Weryfikowanie sygnatury pliku zip... Niewłaściwa sygnatura pliku zip! @@ -639,7 +713,7 @@ %llu z %llu plików, %i%% %lluMB z %lluMB, %i%% - Próba odszyfrowania partycji danych poprzez linię poleceń. + Próba odszyfrowania partycji danych poprzez linię poleceń. Nie udało się załadować pakietów podstawowych. Symulowanie działań... Anulowano wykonywanie kopii zapasowej @@ -662,6 +736,63 @@ Niepowodzenie zmiany systemu plików. Wersja niestandardowego motywu nie zgadza się z wersją TWRP. Użyto domyślnego motywu. (Cofnij) - Ponowne uruchomienie za 5 sekund + Ponowne uruchomienie za %tw_sleep% sekund + Błąd z ADB Backup. Kończenie..." + Nie można zapisać do kanału kontroli adb + parametr --twrp jest wymagany, aby włączyć kopię zapasową adb twrp + ścieżka: {1} nieznaleziona na liście partycji + Skopiowano log kernela do {1} + Skopiowano logcat do {1} + Skopiuj log kernela + Skopiuj logcat + Użyj SHA2 do haszowania + Błąd przy zmienianiu slotu bootowania bootloadera na {1} + Odmontuj /system przed instalacją pliku ZIP + Odmontowywanie /system... + Błąd przy odmontowywaniu /system + Wgrywanie pliku zip A/B do nieaktywnego slotu: {1} + Aby wgrać dodatkowe pliki zip, uruchom ponownie recovery w celu przejścia na zaktualizowany slot. + Wgraj na oba sloty + Rozpoczynanie deszyfrowania Ozip... + Deszyfrowanie Ozip zakończone! + Fastboot + Włącz ADB + Włącz Fastboot + Jesteś w trybie Fastboot... + TWRP nie utworzy ponownie katalogu /data/media na urządzeniu z FBE. Uruchom swój ROM, aby utworzyć /data/media + + Wywołano Android Rescue Party! Co może pomóc? Spróbuj: + 1. wyczyścić cache i/lub + 2. sformatować partycję /data i/lub + 3. wgrać ROM z czyszczeniem danych. + Zgłoszony problem: + Nie można uzyskać domyślnego kontekstu dla {1} -- Android może się nie uruchomić. + Zmień folder TWRP + Zmienianie folderu TWRP + Folder TWRP zmieniony na + Folder o tej nazwie już istnieje! + Odmapuj urządzenia Super + Odmapować wszystkie urządzenia Super? + Odmapowanie urządzeń Super... + Odmapowano wszystkie urządzenia Super + Odmapować wszystkie urządzenia Super? + Odmapowywanie urządzeń Super... + Odmapowano wszystkie urządzenia Super + Urządzenia na partycji /super mogą nie zostać zamontowane do momentu ponownego uruchomienia recovery. + Połącz migawki + Połączyć migawki? + Łączenie migawek... + Złączono migawki + Przywrócić z włączonym PIN-em/hasłem? + Przywrócić z włączonym wzorem? + Przywrócić z włączonym PIN-em? + Kontynuować przywracanie? + Włączony PIN/hasło + PIN/hasło powinny być wyłączone przed rozpoczęciem przywracania + PIN jest włączony + PIN powinien być wyłączony przed rozpoczęciem przywracania + Wzór jest włączony + Wzór powinien być wyłączony przed rozpoczęciem przywracania + Po pierwszym uruchomieniu Androida zaleca się jednorazowo ponownie uruchomić urządzenie. diff --git a/gui/theme/common/portrait.xml b/gui/theme/common/portrait.xml index efe1285a..019acf55 100755 --- a/gui/theme/common/portrait.xml +++ b/gui/theme/common/portrait.xml @@ -3980,7 +3980,7 @@ - + tw_back=advanced tw_action=unmapsuperdevices diff --git a/gui/theme/common/watch.xml b/gui/theme/common/watch.xml index c32fc1b8..ce84443d 100755 --- a/gui/theme/common/watch.xml +++ b/gui/theme/common/watch.xml @@ -4467,7 +4467,7 @@ - + tw_back=advanced tw_action=unmapsuperdevices diff --git a/gui/theme/extra-languages/languages/zh_TW.xml b/gui/theme/extra-languages/languages/zh_TW.xml index df120d49..05463d73 100644 --- a/gui/theme/extra-languages/languages/zh_TW.xml +++ b/gui/theme/extra-languages/languages/zh_TW.xml @@ -12,25 +12,25 @@ System - System 鏡像 + System 映像 Vendor - Vendor 鏡像 + Vendor 映像 Boot Recovery Cache Data - Data(不包含存儲) + Data(不包含儲存空間) SDCard - 內置存儲 + 內建儲存空間 SD 卡 - 外置 U 盤 + 外接式隨身碟 Android Secure Dalvik / ART Cache SD-EXT Adopted Data - Adopted 存儲 - 存儲 + 內部儲存(延伸)空間 + 儲存空間 Team Win Recovery Project @@ -43,12 +43,12 @@ 名稱 日期 大小 - 常規 + 一般 選項 備份 時區 螢幕 - 振動 + 震動 語言 安裝 @@ -56,41 +56,41 @@ 備份 恢復 掛載 - 設置 - 高級 - 重啟 + 設定 + 進階 + 重新啟動 檔案 - 導出日誌 + 匯出日誌 選擇類型 - 安裝 Zip 刷機包 + 安裝 ZIP 刷機包 安裝刷機包 - 刷入 Image 鏡像 - 刷入鏡像 + 刷入 Image 映像 + 刷入映像 選擇檔案 目錄 從 %tw_storage_display_name% (%tw_storage_free_size% MB) 中選擇檔案 ADB Sideload 安裝 - 存儲位置 - 存儲位置 + 儲存位置 + 儲存位置 佇列 已選 %tw_zip_queue_count% 個檔案(最多 10 個) 已選 %tw_zip_queue_count% 個,最多 10 個: - 此操作可能會刷入不相容的固件, - 致使您的設備變磚。 - 按返回按鈕取消添加此刷機包。 + 此操作可能會刷入不相容的韌體, + 導致您的設備變磚。 + 按返回按鈕取消增加此刷機包。 按返回按鈕清除刷機包刷入佇列。 目錄: 檔案: Zip 刷機包簽名校驗 安裝完成後注入 TWRP - 安裝完成後重啟 + 安裝完成後重新開機 選項 確認刷入 佇列: 選項: 確認 - 添加更多刷機包 + 增加更多刷機包 清除刷機佇列 正在刷入第 %tw_zip_index% 個,共 %tw_zip_queue_count% 個 正在安裝: %tw_file% @@ -100,12 +100,12 @@ 安裝成功 清除 Cache/Dalvik 清除 Dalvik - 重啟系統 - 選擇目標分區 - 選擇要刷入鏡像的分區: - 目標分區: - 正在刷入鏡像… - 鏡像已刷入。 + 重新開機至系統 + 選擇目標分割區 + 選擇要刷入映像的分割區: + 目標分割區: + 正在刷入映像… + 映像已刷入。 是否清除 Cache 和 Dalvik? 是否清除 Dalvik? 正在清除 Cache 和 Dalvik… @@ -114,66 +114,66 @@ 滑動滑塊確認清除 清除 沒有安裝任何系統! - 您確定要重啟? + 您確定要重新開機? 您確定要關機? - 正在重啟… - 滑動滑塊確認重啟 - 重啟 - 安裝 TWRP 應用? - 您希望安裝官方 TWRP 應用嗎? + 正在重新開機… + 滑動滑塊確認重新開機 + 重新開機 + 安裝 TWRP 應用程式? + 您希望安裝官方 TWRP 應用程式嗎? 該應用可幫您檢查 TWRP 的最新版本。 - 如果 TWRP 應用未安裝時提示我 - 安裝為系統應用 - 正在安裝應用… - 滑動滑塊確認安裝 - 卸載 TWRP 應用 - 確認卸載 TWRP 應用? - 正在卸載 TWRP 應用… - 卸載 TWRP 應用完成 - 滑動滑塊確認刷入 + 如果 TWRP 應用程式未安裝時提示我 + 安裝為系統應用程式 + 正在安裝應用程式… + 滑動滑塊以確認安裝 + 解除安裝 TWRP 應用程式 + 確認解除安裝 TWRP 應用程式? + 正在解除安裝 TWRP 應用程式… + 解除安裝 TWRP 應用程式完成 + 滑動滑塊以確認刷入 確認操作 按返回按鈕取消。 取消 清除 - 恢復出廠設置(雙清) + 恢復出廠設定(雙清) 恢復出廠 - 這將會清空 Data、Cache 分區和 Dalvik 緩存 - (不會清除內置存儲/sdcard) + 這將會清空 Data、Cache 分割區和 Dalvik 快取 + (不會清除內建儲存空間 /sdcard) 在大多數情況下,您只需要 執行此操作即可。 - (不包括用戶/鎖屏) - 正在恢復出廠設置… - 高級清除選項 - 高級清除 - 是否清除 Data 分區加密? - 正在格式化 Data 分區… + (不包括使用者/鎖定螢幕) + 正在恢復出廠設定… + 進階清除選項 + 進階清除 + 是否清除 Data 分割區加密? + 正在格式化 Data 分割區… 滑動滑塊確認格式化 - 格式化 Data 分區 + 格式化 Data 分割區 恢復出廠完成 - 選擇分區 - 是否清除所選的分區? - 正在清除分區… + 選擇分割區 + 是否清除所選的分割區? + 正在清除分割區… 清除完成 - 選擇要清除的分區: - 無效的分區 - 格式化 Data 分區 - 格式化 Data 分區 - 格式化 Data 分區將會清空您安裝的所有 - 軟體、備份、图片、媒體, - 以及對內置存儲所做的加密等。 - 也包括 Adopted 存儲 - 格式化 Data 分區將會清空您安裝的所有軟體、備份、圖片、媒體, - 以及對內置存儲所做的加密等。 - 格式化 Data 分區會清除您的所有軟體 - 備份和媒體數據,無法撤銷。 + 選擇要清除的分割區: + 無效的分割區 + 格式化 Data 分割區 + 格式化 Data 分割區 + 格式化 Data 分割區將會清空您安裝的所有 + 軟體、備份、圖片、媒體, + 以及對內建儲存空間所做的加密等。 + 也包括 內部儲存(延伸)空間 + 格式化 Data 分割區將會清空您安裝的所有軟體、備份、圖片、媒體, + 以及對內建儲存空間所做的加密等。 + 格式化 Data 分割區會清除您的所有軟體 + 備份和媒體數據,無法取消。 執行此操作後將無法恢復。 - 格式化 Data 分區完成 + 格式化 Data 分割區完成 輸入 yes 繼續,按返回按鈕取消。 - 分區名: %tw_partition_name% + 分割區名: %tw_partition_name% 選擇操作 檔案系統選項 - 分區: %tw_partition_name% + 分割區: %tw_partition_name% 掛載位置: %tw_partition_mount_point% 檔案系統: %tw_partition_file_system% 當前:是 @@ -182,7 +182,7 @@ 可移除:否 大小: %tw_partition_size%MB 已用: %tw_partition_used%MB - 空閒: %tw_partition_free%MB + 可用: %tw_partition_free%MB 備份大小: %tw_partition_backup_size%MB 調整檔案系統 調整 @@ -200,9 +200,9 @@ 修復 更改檔案系統 更改 - 要更改的分區: %tw_partition_name% - 分區: %tw_partition_name%>選擇檔案系統 - 一些固件或內核可能不支持 + 要更改的分割區: %tw_partition_name% + 分割區: %tw_partition_name%>選擇檔案系統 + 一些韌體或 Kernel 可能不支援 某些檔案系統,請謹慎! 是否更改 %tw_partition_name% 為: 正在格式化… @@ -213,19 +213,19 @@ 清除加密 滑動滑塊確認恢復出廠 修復或更改檔案系統 - 存儲位置: %tw_storage_display_name% (%tw_storage_free_size% MB) + 儲存位置: %tw_storage_display_name% (%tw_storage_free_size% MB) 備份 確認備份 加密 加密: 名稱: - 選擇要備份的分區: + 選擇要備份的分割區: 儲存位置: - 已禁用 - 設置密碼以啟用 + 已停用 - 設定密碼以啟用 已啟用 啟用壓縮 - 備份時跳過生成 Digest - 在備份之前禁用剩餘空間檢查 + 備份時跳過建立 Digest + 在備份之前停用剩餘空間檢查 當前槽位: %tw_active_slot% 槽位 A 槽位 B @@ -239,10 +239,10 @@ 請輸入密碼: 請再輸入一遍: 密碼不匹配! - 分區: - 已禁用 + 分割區: + 已停用 已啟用 - 設置備份名稱 + 設定備份名稱 進度: 備份完成 恢復 @@ -261,32 +261,32 @@ 加密的備份 - 嘗試解密 正在嘗試解密 備份於 %tw_restore_file_date% - 選擇要恢復的分區: + 選擇要恢復的分割區: 啟用 Digest 校驗備份檔案 恢復完成 滑動滑塊確認恢復 恢復 - 重命名備份 - 是否重命名備份檔案? + 重新命名備份 + 是否重新命名備份檔案? 此操作無法恢復! - 正在重命名… - 重命名完成 - 滑動滑塊確認重命名 - 重命名 + 正在重新命名… + 重新命名完成 + 滑動滑塊確認重新命名 + 重新命名 確認 掛載 - 選擇要掛載的分區: - 掛載 System 分區為只讀 + 選擇要掛載的分割區: + 掛載 System 分割區為只讀 掛載 System 為只讀 - 解密 Data 分區 + 解密 Data 分割區 啟用 MTP 模式 停用 MTP 模式 - 掛載 USB 存儲 - USB 存儲 - 已掛載 USB 存儲 - 請確認解除挂載前先從 + 掛載 USB 儲存空間 + USB 儲存空間 + 已掛載 USB 儲存空間 + 請確認解除掛載前先從 電腦上安全地移除設備! - 卸載 + 解除掛載 系統 關機 Recovery @@ -296,26 +296,26 @@ 正在關機… 滑動滑塊確認關機 關機 - 未修改的 System 分區 - 是否保持系統分區為只讀? - TWRP 可以保持系統分區未修改狀態 + 未修改的 System 分割區 + 是否保持系統分割區為只讀? + TWRP 可以保持系統分割區未修改狀態 使您更容易獲得官方的更新。 - TWRP 將無法禁止原廠固件可能 + TWRP 將無法禁止原廠韌體可能 替換 TWRP 並且不能 Root 您的設備。 安裝刷機包或者通過 adb 操作依然可以 - 修改系統分區。 - TWRP 可以保持系統分區為未修改狀態,使您更容易獲得官方的更新。 - TWRP 將無法禁止原廠固件替換 TWRP,並且不能 Root 您的設備。 - 安裝刷機包或者通過 adb 操作依然可以修改系統分區。 + 修改系統分割區。 + TWRP 可以保持系統分割區為未修改狀態,使您更容易獲得官方的更新。 + TWRP 將無法禁止原廠韌體替換 TWRP,並且不能 Root 您的設備。 + 安裝刷機包或者通過 adb 操作依然可以修改系統分割區。 下次啟動時不再顯示此介面 保持只讀 滑動滑塊允許修改 允許修改 - 設置 - 常規 - 常規 - 常規 - 使用 rm -rf 命令代替格式化 + 設定 + 一般 + 一般 + 一般 + 使用 rm -rf 指令代替格式化 使用 24 小時制 反轉底部按鈕佈局 為測試主題使用模擬操作 @@ -323,12 +323,12 @@ 導航欄按鈕居中 導航欄按鈕左對齊 導航欄按鈕右對齊 - 恢復默認設置 + 恢復預設設定 時區 螢幕 螢幕亮度 - 振動已在本設備上停用 - 振動 + 震動已在本設備上停用 + 震動 語言 時區 選擇時區: @@ -344,19 +344,19 @@ (UTC -4) 大西洋標準時間 (UTC -3) 巴西、阿根廷(布宜諾斯) (UTC -2) 大西洋中部 - (UTC -1) 葡萄牙(亞速爾群島),佛得角 + (UTC -1) 葡萄牙(亞速群島),維德角 (UTC 0) 倫敦、都柏林、里斯本 (UTC +1) 柏林、布魯塞爾、巴黎 - (UTC +2) 雅典、伊斯坦布爾、南非 + (UTC +2) 雅典、伊斯坦堡、南非 (UTC +3) 莫斯科、巴格達 - (UTC +4) 阿布扎比、第比利斯、馬斯喀特 - (UTC +5) 葉卡捷琳堡、伊斯蘭堡 + (UTC +4) 阿布達比、提比里西、馬斯喀特 + (UTC +5) 葉卡捷琳堡、伊斯蘭瑪巴德 (UTC +6) 阿拉木圖、達卡、可倫坡 (UTC +7) 曼谷、河內、雅加達 - (UTC +8) 北京、新加坡、香港 + (UTC +8) 台北、北京、新加坡、香港 (UTC +9) 東京、首爾、雅庫茨克 - (UTC +10) 澳大利亞東部、關島 - (UTC +11) 符拉迪沃斯托克、所羅門群島 + (UTC +10) 澳洲東部、關島 + (UTC +11) 符拉迪沃斯托克、索羅門群島 (UTC +12) 奧克蘭、惠靈頓、斐濟 時間偏差(通常為 0): %tw_time_zone_guioffset% @@ -367,35 +367,35 @@ 使用夏令時 (DST) 當前時區: %tw_time_zone% 當前時區: - 設置時區 + 設定時區 螢幕 螢幕超時 啟用螢幕超時 螢幕超時時間(秒): - 螢幕超時(0=禁用): %tw_screen_timeout_secs% - 螢幕超時設置不可用 + 螢幕超時(0=停用): %tw_screen_timeout_secs% + 螢幕超時設定不可用 螢幕亮度: %tw_brightness_pct%% - 螢幕亮度設置不可用 - 振動 - 按鈕振動 - 鍵盤振動 - 操作振動 - 按鈕振動強度: - 鍵盤振動強度: - 操作振動強度: + 螢幕亮度設定不可用 + 震動 + 按鈕震動 + 鍵盤震動 + 操作震動 + 按鈕震動強度: + 鍵盤震動強度: + 操作震動強度: 選擇語言: 選擇語言 - 設置語言 - 高級選項 - 是否導出日誌到內置存儲? + 設定語言 + 進階選項 + 是否匯出日誌到內建儲存空間? 正在複製… - 日誌導出完成 + 日誌匯出完成 修復 Context - 分區 SD 卡 + 分割區 SD 卡 SD 卡 檔案管理 語言 - 終端命令 + 終端指令 重載主題 HTC Dumlock 注入 TWRP @@ -403,28 +403,28 @@ 正在重新注入 TWRP… TWRP 注入完成 滑動滑塊確認 - SD 卡分區 + SD 卡分割區 您必須選擇一個可移動設備 - 您將會丟失 SD 卡上的所有檔案! + 您將會遺失 SD 卡上的所有檔案! 此操作無法恢復! EXT 大小: Swap 大小: - + 檔案系統: - 滑動滑塊確認分區 - 分區 - 正在對 SD 卡分區… + 滑動滑塊確認分割區 + 分割區 + 正在對 SD 卡分割區… 這將需要幾分鐘的時間。 - 分區完成 + 分割區完成 HTC Dumlock - 恢復原版 Boot 鏡像 - 是否恢復原版 Boot 鏡像? - 正在恢復原版 Boot 鏡像… - 恢復原版 Boot 鏡像完成。 + 恢復原廠 Boot 映像 + 是否恢復原廠 Boot 映像? + 正在恢復原廠 Boot 映像… + 恢復原廠 Boot 映像完成。 重新刷入 Recovery - 是否重新刷入 Recovery 至 Boot 分區? - 正在刷入 Recovery 至 Boot 分區… + 是否重新刷入 Recovery 至 Boot 分割區? + 正在刷入 Recovery 至 Boot 分割區… Recovery 刷入完成 安裝 HTC Dumlock 是否安裝 HTC Dumlock 檔案到系統中? @@ -449,27 +449,27 @@ chmod 刪除 正在刪除 - 重命名 - 重命名檔案 - 重命名檔案夾 - 正在重命名 + 重新命名 + 重新命名檔案 + 重新命名檔案夾 + 正在重新命名 選擇目標目錄 選擇當前目錄 - 重命名 - 設置許可權 + 重新命名 + 設定許可權 許可權: 操作完成 - 解密 Data 分區 + 解密 Data 分割區 請輸入密碼。 密碼錯誤,請重試! 圖案錯誤,請重試! 繪製解鎖圖案 正在嘗試解密 缺少解密 vold 所需的檔案: {1} - 終端命令 - 終端 + 終端機指令 + 終端機 終止 - 選擇運行目錄 + 選擇執行目錄 ADB Sideload 清除 Dalvik Cache 清除 Cache @@ -481,79 +481,79 @@ 修復 Context 注意:很少情況下需要修復 Context。 修復 SELinux Context 可能會導致 - 您的設備無法正常啓動。 + 您的設備無法正常啟動。 滑動滑塊確認修復 修復 Context 正在修復 Context… 修復 Context 完成 - 重啟選項 + 重新開機選項 不,以後再說 - 選擇存儲位置 + 選擇儲存位置 確定 安裝 Recovery Ramdisk - 安裝內核 - 安裝內核 + 安裝 Kernel + 安裝 Kernel 安裝 Recovery - 是否安裝內核? + 是否安裝 Kernel ? 是否安裝 Recovery? - 請先備份現有的鏡像 + 請先備份現有的映像 重新打包 滑動滑塊確認安裝 正在安裝… 安裝完成 - 解包鏡像錯誤。 - 重新打包鏡像錯誤。 + 解包映像錯誤。 + 重新打包映像錯誤。 正在解包 {1}… 正在打包 {1}… - 選擇鏡像 - 修復 Recovery 無限重啟 - 是否修復 Recovery 無限重啟? - 正在修復 Recovery 無限重啟… - Recovery 無限重啟修復完成 - 正在對內核打補丁… - 對內核打補丁時出錯。 - 解密用戶 - 選擇一位要解密的用戶 ID - 選擇用戶 - 備份不包含一些屬於用戶 {1} 的文件,因爲該用戶沒有解密 - 嘗試為用戶 {1} 解密 FBE… - 用戶 {1} 解密成功 - 用戶 {1} 解密失敗 - 請輸入用戶 [%tw_crypto_user_id%] 的密碼 - 請繪製用戶 [%tw_crypto_user_id%] 的解鎖圖案 - 并非所有用戶都被解密! + 選擇映像 + 修復 Recovery 無限重新開機 + 是否修復 Recovery 無限重新開機? + 正在修復 Recovery 無限重新開機… + Recovery 無限重新開機修復完成 + 正在對 Kernel 打補丁… + 對 Kernel 打補丁時出錯。 + 解密使用者 + 選擇一位要解密的使用者 ID + 選擇使用者 + 備份不包含一些屬於使用者 {1} 的文件,因為該使用者沒有解密 + 嘗試為使用者 {1} 解密 FBE… + 使用者 {1} 解密成功 + 使用者 {1} 解密失敗 + 請輸入使用者 [%tw_crypto_user_id%] 的密碼 + 請繪製使用者 [%tw_crypto_user_id%] 的解鎖圖案 + 並非所有使用者都被解密! 備份/還原操作可能會失敗! 仍然繼續 - 多用戶警告 + 多使用者警告 - 內核不支持讀取 SELinux Context。 - 完整 SELinux 支持。 - 無 SELinux 支持(無 libselinux)。 + Kernel 不支援讀取 SELinux Context。 + 完整 SELinux 支援。 + 無 SELinux 支援(無 libselinux)。 MTP 已啟用 - MTP 已崩潰。啟動時不再加載 MTP。 - 已使用默認密碼解密成功。 - 無法使用默認密碼來解密,您可能需要格式化 Data 分區。 - 正在生成 Digest + MTP 已崩潰。啟動時不再載入 MTP。 + 已使用預設密碼解密成功。 + 無法使用預設密碼來解密,您可能需要格式化 Data 分割區。 + 正在建立 Digest - * 正在生成 Digest… - * Digest 已生成。 + * 正在建立 Digest… + * Digest 已建立。 * Digest 錯誤! * 計算 Digest 錯誤。 (當前日期) - (自動生成) - 未找到“{1}”分區。 - 未選擇備份分區。 - * 備份分區總數: {1} + (自動建立) + 未找到“{1}”分割區。 + 未選擇備份分割區。 + * 備份分割區總數: {1} * 備份數據總計: {1}MB * 可用空間: {1}MB - 未找到存儲設備。 + 未找到儲存設備。 記憶體上沒有足夠的空間。 [已開始備份] * 備份檔案夾: {1} 建立備份檔案夾失敗。 檔案平均備份速度: {1}MB/秒 - 鏡像平均備份速度: {1}MB/秒 + 映像平均備份速度: {1}MB/秒 [總計備份 {1}MB] [備份已完成,耗時 {1} 秒] [已開始恢復] @@ -561,67 +561,67 @@ [{1} 恢復完成({2} 秒)] 正在校驗 Digest - 基於用戶設置,已跳過 Digest 檢查。 - 正在計算恢復詳情… + 基於使用者設定,已跳過 Digest 檢查。 + 正在計算恢復資訊… 無法恢復 {1} -- 已掛載為只讀。 - 未找到“{1}”分區。 - 未選擇要恢復的分區。 - 正在恢復 {1} 個分區… + 未找到“{1}”分割區。 + 未選擇要恢復的分割區。 + 正在恢復 {1} 個分割區… 恢復檔案總計 {1}MB 更新系統詳細資訊 [恢復完成,耗時 {1} 秒] 打開出錯:“{1}” ({2}) - 無法通過備份名稱來查找分區:“{1}” - 找不到分區路徑“{1}” - 正在更新分區詳情… + 無法透過備份名稱來尋找分割區:“{1}” + 找不到分割區路徑“{1}” + 正在更新分割區資訊… …完成 正在清除 Dalvik 目錄… 已清除:{1}… -- Dalvik Cache 目錄清除完成! -- Dalvik 目錄清除完成! - 未發現 android secure 分區。 + 未發現 android secure 分割區。 未找到 {1}。 - 清除內置存儲 -- /data/media… + 清除內建儲存空間 -- /data/media… 無法掛載 {1} - 無法掛載內置存儲 - 無法掛載存儲 + 無法掛載內建儲存空間 + 無法掛載儲存 解密數據失敗。 - 此版本不支持加密。 - Data 分區成功解密,新增塊設備:“{1}” - Data 分區已成功解密 + 此版本不支援加密。 + Data 分割區成功解密,新增塊設備:“{1}” + Data 分割區已成功解密 完成。 - 正在給 SD 卡分區… - 未找到需要分區的設備。 + 正在給 SD 卡分割區… + 未找到需要分割區的設備。 EXT+Swap 大小超過 SD 卡容量。 - 正在刪除分區表… - 無法刪除分區表。 - 正在創建 {1} 分區… - 無法創建 {1} 分區。 + 正在刪除分割區表… + 無法刪除分割區表。 + 正在建立 {1} 分割區… + 無法建立 {1} 分割區。 正在將 sd-ext 格式化為 {1}… - 分區完成。 + 分割區完成。 無法打開“{1}”。 MTP 已經啟用 啟用 MTP 失敗 - 不支持 MTP - [開始刷入鏡像] - 刷入鏡像:“{1}” - 未找到“{1}”分區。 - 未選擇刷入分區。 - 選擇刷入的分區太多。 - 指定的刷入分區無效。 - [鏡像刷入完成] + 不支援 MTP + [開始刷入映像] + 刷入映像:“{1}” + 未找到“{1}”分割區。 + 未選擇刷入分割區。 + 選擇刷入的分割區太多。 + 指定的刷入分割區無效。 + [映像刷入完成] 正在清除 {1} {1} 不存在!無法修復! 正在使用 {2} 修復 {1}… 無法修復 {1}。 無法掛載/data,未找到加密 footer。 - 無法創建“{1}”檔案夾 ({2})。 + 無法建立“{1}”檔案夾 ({2})。 掛載“{1}”失敗 ({2}) - 卸載“{1}”失敗 ({2}) + 解除掛載“{1}”失敗 ({2}) 無法更改 {1} 的大小。 在調整大小之前修復 {1}。 無法調整 {1} 的大小。 @@ -629,54 +629,54 @@ “{1}” Digest 校驗失敗。 Digest 匹配“{1}”。 無法解密 Tar 檔案“{1}” - 您可能需要重啟 Recovery 才能使用/data。 + 您可能需要重新開機 Recovery 才能使用/data。 無法格式化並刪除加密。 使用 {2} 格式化 {1}… 無法清除 {1}。 - 無法清除 {1} 分區。 + 無法清除 {1} 分割區。 移除“{1}”下的所有檔案 - 正在清除 Data 分区,跳過清除/data/media… + 正在清除 Data 分割區,跳過清除/data/media… 正在備份 {1}… - 備份的 {1} 分區不包含內置存儲上的任何檔案,例如照片或下載的檔案等等。 + 備份的 {1} 分割區不包含內建儲存空間上的任何檔案,例如照片或下載的檔案等等。 正在備份 “{1}”的備份檔案大小為 0 位元組。 - 警告:此/data備份檔案系統為 {1}!除非把檔案系統格式設置為 {1} 否則可能無法啟動。 + 警告:此/data備份檔案系統為 {1}!除非把檔案系統格式設定為 {1} 否則可能無法啟動。 正在恢復 {1}… 正在恢復 - 無法重新創建 {1} 檔案夾。 - 鏡像大小大於目標設備 + 無法重新建立 {1} 檔案夾。 + 映像大小大於目標設備 正在刷入 {1}… - 備份檔案夾設置為:“{1}” + 備份檔案夾設定為:“{1}” 未找到備份檔案“{1}” - 設置恢復選項:“{1}”: + 設定恢復選項:“{1}”: 跳過校驗 Digest 已開啟 無法使用 OpenRecoveryScript 腳本恢復加密備份。 正在掛載 - 正在卸載 + 正在解除掛載 “{1}”已掛載 - “{1}”已卸載 - 設置“{1}”為“{2}” - 設置“{1}”為空 - 創建目錄 - 創建目錄:“{1}” - 運行命令 + “{1}”已解除掛載 + 設定“{1}”為“{2}” + 設定“{1}”為空 + 建立目錄 + 建立目錄:“{1}” + 執行指令 ADB Sideload 正在開始 ADB sideload… 您需要 1.0.32 或更高版本的 adb 才可以使用。 未提供密碼。 腳本執行完畢 - 正在注入 TWRP 到 Boot 鏡像… + 正在注入 TWRP 到 Boot 映像… 安裝 Zip 刷機包“{1}”時出錯 正在安裝 Zip 刷機包“{1}” - 設置備份選項: + 設定備份選項: 壓縮選項已開啟 - Digest 生成已關閉 + Digest 建立已關閉 備份失敗 備份失敗。正在清理備份檔案夾。 - 運行 Recovery 命令 - Recovery 命令執行完成 - 運行 OpenRecoveryScript 腳本 - 運行 OpenRecoveryScript 腳本完成 + 執行 Recovery 指令 + Recovery 指令執行完成 + 執行 OpenRecoveryScript 腳本 + 執行 OpenRecoveryScript 腳本完成 正在檢測 Digest… Zip 檔案格式無效! 映射檔案“{1}”失敗 @@ -690,27 +690,27 @@ {1} 過程結束,標誌: {2} {1} 過程結束,錯誤: {2} 安裝 HTC Dumlock 到系統… - 正在恢復原版 Boot… + 正在恢復原廠 Boot… 正在重新刷入 Recovery 到 Boot… - 正在運行 {1} 腳本… - 重命名/system 下原版 Recovery 的補丁,避免原廠固件替換 TWRP。 - 分解備份檔案為多個壓縮檔… + 正在執行 {1} 腳本… + 重新命名/system 下原廠 Recovery 的補丁,避免原廠韌體替換 TWRP。 + 拆分備份檔案為多個壓縮檔… 建立備份失敗。 在恢復過程中發生錯誤。 - 拆分線程 ID {1} 到壓縮檔 {2} + 拆分執行緒 ID {1} 到壓縮檔 {2} 已完成 %llu 個,共 %llu 個檔案,進度 %i%% 已完成 %lluMB,共 %lluMB,進度 %i%% - 正在嘗試通過命令行解密 Data 分區或用戶數據。 - 無法加載基本包。 + 正在嘗試通過指令解密 Data 分割區或使用者數據。 + 無法載入基本包。 正在模擬操作… 備份已取消。 正在配置 TWRP… - 此內核無法配置 TWRP。 - 已經導出 Recovery 日誌到 {1}。 + 此 Kernel 無法配置 TWRP。 + 已經匯出 Recovery 日誌到 {1}。 已達到最大刷機包刷入佇列! 已達到最大刷機包刷入佇列! - 截圖已保存到:{1} + 截圖已儲存到:{1} 截圖失敗! 一個或多個刷機包請求清除 Cache -- 正在清除 Cache。 無法清除 android secure @@ -721,33 +721,33 @@ 備份名稱“{1}”中包含無效字元:“{1}” 此設備沒有真實的 SD 卡!正在中止! 取消 ADB Sideload… - 更換檔案系統时出錯。 - 自定義主題和 TWRP 版本不匹配,正使用默認主題。 + 更換檔案系統時出錯。 + 自訂主題和 TWRP 版本不匹配,正使用預設主題。 (上級目錄) - 將會在 %tw_sleep% 秒內重啟 + 將會在 %tw_sleep% 秒內重新開機 ADB 備份錯誤。正在退出…" 無法寫入 adb 控制通道 啟用 TWRP ADB 備份需使用 --twrp 選項 - 分區列表中未發現路徑: {1} - 已導出內核日誌至 {1} - 包含內核日誌 + 分割區列表中未發現路徑: {1} + 已匯出 Kernel 日誌至 {1} + 包含 Kernel 日誌 使用 SHA2 進行散列校驗 更改 Bootloader 啟動槽位至 {1} 錯誤 - 在安裝 Zip 刷機包之前先解除挂載 System - 正在解除挂載 System… - 解除挂載 System 失敗 + 在安裝 Zip 刷機包之前先解除掛載 System + 正在解除掛載 System… + 解除掛載 System 失敗 正在刷入 A/B Zip 刷機包至非活動槽位: {1} - 如需刷入其它的 Zip 刷機包,請重新啓動 Recovery 切換到新槽位。 + 如需刷入其它的 Zip 刷機包,請重新啟動 Recovery 切換到新槽位。 正在解密 Ozip… Ozip 解密完成! Fastboot - 啓用 ADB - 啓用 Fastboot + 啟用 ADB + 啟用 Fastboot 進入 Fastboot 模式… - Android 搶救模式已觸發!您可以嘗試下面的操作: + Android 救援模式已觸發!您可以嘗試下面的操作: 1. 清除 Cache; - 2. 格式化 Data 分區; + 2. 格式化 Data 分割區; 3. 重新刷入您的 ROM。 報告的問題為: diff --git a/gui/theme/landscape_hdpi/ui.xml b/gui/theme/landscape_hdpi/ui.xml index bd055bd5..a71387f3 100755 --- a/gui/theme/landscape_hdpi/ui.xml +++ b/gui/theme/landscape_hdpi/ui.xml @@ -119,7 +119,10 @@ - + + + + @@ -226,6 +229,10 @@ + + + + @@ -267,6 +274,7 @@ + %tw_version% @@ -274,12 +282,15 @@ + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + %tw_time% @@ -290,12 +301,61 @@ + {@battery_pct=Battery: %tw_battery%} + + + + + + + + %tw_version% + + + + + + + + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + + + + + + + %tw_time% + + + + + + + + %tw_time% + + + + + + + + + + + + {@battery_pct=Battery: %tw_battery%} + + + + diff --git a/gui/theme/landscape_mdpi/ui.xml b/gui/theme/landscape_mdpi/ui.xml index 9ab8863d..dadfbb9f 100755 --- a/gui/theme/landscape_mdpi/ui.xml +++ b/gui/theme/landscape_mdpi/ui.xml @@ -119,7 +119,10 @@ - + + + + @@ -226,6 +229,10 @@ + + + + @@ -267,6 +274,7 @@ + %tw_version% @@ -274,12 +282,15 @@ + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + %tw_time% @@ -290,12 +301,61 @@ + {@battery_pct=Battery: %tw_battery%} + + + + + + + + %tw_version% + + + + + + + + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + + + + + + + %tw_time% + + + + + + + + %tw_time% + + + + + + + + + + + + {@battery_pct=Battery: %tw_battery%} + + + + diff --git a/gui/theme/portrait_hdpi/ui.xml b/gui/theme/portrait_hdpi/ui.xml index f7d21da3..104c3f66 100755 --- a/gui/theme/portrait_hdpi/ui.xml +++ b/gui/theme/portrait_hdpi/ui.xml @@ -113,7 +113,10 @@ - + + + + @@ -223,6 +226,10 @@ + + + + @@ -264,6 +271,7 @@ + %tw_version% @@ -271,12 +279,15 @@ + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + %tw_time% @@ -287,12 +298,61 @@ + {@battery_pct=Battery: %tw_battery%} + + + + + + + + %tw_version% + + + + + + + + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + + + + + + + %tw_time% + + + + + + + + %tw_time% + + + + + + + + + + + + {@battery_pct=Battery: %tw_battery%} + + + + diff --git a/gui/theme/portrait_mdpi/ui.xml b/gui/theme/portrait_mdpi/ui.xml index 9189df0c..d81a9a9a 100755 --- a/gui/theme/portrait_mdpi/ui.xml +++ b/gui/theme/portrait_mdpi/ui.xml @@ -113,7 +113,10 @@ - + + + + @@ -223,6 +226,10 @@ + + + + @@ -264,6 +271,7 @@ + %tw_version% @@ -271,12 +279,15 @@ + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + %tw_time% @@ -287,12 +298,61 @@ + {@battery_pct=Battery: %tw_battery%} + + + + + + + + %tw_version% + + + + + + + + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + + + + + + + %tw_time% + + + + + + + + %tw_time% + + + + + + + + + + + + {@battery_pct=Battery: %tw_battery%} + + + + diff --git a/gui/theme/watch_mdpi/ui.xml b/gui/theme/watch_mdpi/ui.xml index ed7ac825..83966396 100644 --- a/gui/theme/watch_mdpi/ui.xml +++ b/gui/theme/watch_mdpi/ui.xml @@ -96,7 +96,10 @@ - + + + + @@ -182,6 +185,10 @@ + + + + @@ -203,6 +210,7 @@ + {@twrp_watch_header=TWRP %tw_version%} @@ -210,12 +218,15 @@ + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + %tw_time% @@ -226,12 +237,61 @@ + {@battery_pct=Battery: %tw_battery%} + + + + + + + + {@twrp_watch_header=TWRP %tw_version%} + + + + + + + + {@cpu_temp=CPU: %tw_cpu_temp% °C} + + + + + + + + %tw_time% + + + + + + + + %tw_time% + + + + + + + + + + + + {@battery_pct=Battery: %tw_battery%} + + + + diff --git a/minuitwrp/libminuitwrp_defaults.go b/minuitwrp/libminuitwrp_defaults.go index 2f82c6eb..59e5cebf 100644 --- a/minuitwrp/libminuitwrp_defaults.go +++ b/minuitwrp/libminuitwrp_defaults.go @@ -116,7 +116,7 @@ func globalFlags(ctx android.BaseContext) []string { } if getMakeVars(ctx, "TARGET_RECOVERY_OVERSCAN_PERCENT") != "" { - cflags = append(cflags, "-DDOVERSCAN_PERCENT="+getMakeVars(ctx, "TARGET_RECOVERY_OVERSCAN_PERCENT")) + cflags = append(cflags, "-DOVERSCAN_PERCENT="+getMakeVars(ctx, "TARGET_RECOVERY_OVERSCAN_PERCENT")) } else { cflags = append(cflags, "-DOVERSCAN_PERCENT=0") } diff --git a/mtp/ffs/MtpServer.cpp b/mtp/ffs/MtpServer.cpp index fa670243..cacb45eb 100755 --- a/mtp/ffs/MtpServer.cpp +++ b/mtp/ffs/MtpServer.cpp @@ -164,8 +164,17 @@ bool MtpServer::hasStorage(MtpStorageID id) { void MtpServer::run() { if (mHandle->start(mPtp)) { - MTPE("Failed to start usb driver!"); + MTPE("Failed to start usb driver!\n"); mHandle->close(); + int controlFd = open(FFS_MTP_EP0, O_RDWR); + bool ffs_ok = access(FFS_MTP_EP0, W_OK) == 0; + if (ffs_ok) { + bool aio_compat = android::base::GetBoolProperty("sys.usb.ffs.aio_compat", false); + mHandle = aio_compat ? new MtpFfsCompatHandle(controlFd) : new MtpFfsHandle(controlFd); + mHandle->writeDescriptors(mPtp); + } else { + mHandle = new MtpDevHandle(controlFd); + } return; } @@ -972,7 +981,7 @@ MtpResponseCode MtpServer::doSendObjectInfo() { if (maxFileSize != 0) { // if mSendObjectFileSize is 0xFFFFFFFF, then all we know is the file size // is >= 0xFFFFFFFF - if (mSendObjectFileSize > maxFileSize || mSendObjectFileSize == 0xFFFFFFFF) + if (mSendObjectFileSize > maxFileSize) return MTP_RESPONSE_OBJECT_TOO_LARGE; } diff --git a/partition.cpp b/partition.cpp index ae5ef396..6f59c5d9 100755 --- a/partition.cpp +++ b/partition.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "cutils/properties.h" @@ -472,20 +473,24 @@ bool TWPartition::Process_Fstab_Line(const char *fstab_line, bool Display_Error, Can_Be_Wiped = false; Mount_Read_Only = false; Make_Dir(PartitionManager.Get_Android_Root_Path(), true); + } else if (Mount_Point == "/system_ext") { + Display_Name = "System_EXT"; + Backup_Name = "System_EXT"; + Backup_Display_Name = Display_Name; + Storage_Name = Display_Name; + Can_Be_Backed_Up = Wipe_Available_in_GUI = Is_Super ? false : true; } else if (Mount_Point == "/product") { Display_Name = "Product"; Backup_Name = "Product"; Backup_Display_Name = Display_Name; Storage_Name = Display_Name; Can_Be_Backed_Up = Wipe_Available_in_GUI = Is_Super ? false : true; - Mount_Read_Only = true; } else if (Mount_Point == "/odm") { Display_Name = "ODM"; Backup_Name = "ODM"; Backup_Display_Name = Display_Name; Storage_Name = Display_Name; Can_Be_Backed_Up = Wipe_Available_in_GUI = Is_Super ? false : true; - Mount_Read_Only = true; } else if (Mount_Point == "/data") { Display_Name = "Data"; Backup_Display_Name = Display_Name; @@ -1243,8 +1248,22 @@ void TWPartition::Setup_Data_Media() { backup_exclusions.add_absolute_dir("/data/vendor/dumpsys"); backup_exclusions.add_absolute_dir("/data/cache"); backup_exclusions.add_absolute_dir("/data/misc/apexdata/com.android.art"); // exclude this dir to prevent "error 255" on AOSP Android 12 + backup_exclusions.add_absolute_dir("/data/extm"); //exclude this dir to prevent "error 255" on MIUI wipe_exclusions.add_absolute_dir(Mount_Point + "/misc/vold"); // adopted storage keys ExcludeAll(Mount_Point + "/system/storage.xml"); + + // board-customisable exclusions + #ifdef TW_BACKUP_EXCLUSIONS + std::vector user_extra_exclusions = TWFunc::Split_String(TW_BACKUP_EXCLUSIONS, ","); + std::string s1; + for (const std::string& extra_x : user_extra_exclusions) { + s1 = android::base::Trim(extra_x); + if (!s1.empty()) { + backup_exclusions.add_absolute_dir(s1); + LOGINFO("Adding user-defined path '%s' to the backup exclusions\n", s1.c_str()); + } + } + #endif } else { int i; string path; @@ -2444,7 +2463,7 @@ bool TWPartition::Wipe_F2FS() { } needs_casefold = android::base::GetBoolProperty("external_storage.casefold.enabled", false); - needs_projid = android::base::GetBoolProperty("external_storage.projid.enabled", false); + needs_projid = android::base::GetBoolProperty("external_storage.projid.enabled", false); unsigned long long dev_sz = TWFunc::IOCTL_Get_Block_Size(Actual_Block_Device.c_str()); if (!dev_sz) return false; @@ -2461,8 +2480,8 @@ bool TWPartition::Wipe_F2FS() { f2fs_command += " " + Actual_Block_Device + " " + dev_sz_str; - if (TWFunc::Path_Exists("/system/bin/sload.f2fs")) { - f2fs_command += " && sload.f2fs -t /data " + Actual_Block_Device; + if (TWFunc::Path_Exists("/system/bin/sload_f2fs")) { + f2fs_command += " && sload_f2fs -t /data " + Actual_Block_Device; } /** @@ -2966,36 +2985,39 @@ bool TWPartition::Restore_Image(PartitionSettings *part_settings) { } bool TWPartition::Update_Size(bool Display_Error) { - bool ret = false, Was_Already_Mounted = false; + bool ret = false, Was_Already_Mounted = false, ro = false; Find_Actual_Block_Device(); if (Actual_Block_Device.empty()) return false; + ro = Mount_Read_Only; + Mount_Read_Only = true; + if (!Can_Be_Mounted && !Is_Encrypted) { if (TWFunc::Path_Exists(Actual_Block_Device) && Find_Partition_Size()) { Used = Size; Backup_Size = Size; - return true; + goto success; } - return false; + goto fail; } Was_Already_Mounted = Is_Mounted(); if (Removable || Is_Encrypted) { if (!Mount(false)) - return true; + goto success; } else if (!Mount(Display_Error)) - return false; + goto fail; ret = Get_Size_Via_statfs(Display_Error); if (!ret || Size == 0) { if (!Get_Size_Via_df(Display_Error)) { if (!Was_Already_Mounted) UnMount(false); - return false; + goto fail; } } @@ -3009,7 +3031,7 @@ bool TWPartition::Update_Size(bool Display_Error) { } else { if (!Was_Already_Mounted) UnMount(false); - return false; + goto fail; } } else if (Has_Android_Secure) { if (Mount(Display_Error)) @@ -3017,12 +3039,17 @@ bool TWPartition::Update_Size(bool Display_Error) { else { if (!Was_Already_Mounted) UnMount(false); - return false; + goto fail; } } if (!Was_Already_Mounted) UnMount(false); +success: + Mount_Read_Only = ro; return true; +fail: + Mount_Read_Only = ro; + return false; } bool TWPartition::Find_Wildcard_Block_Devices(const string& Device) { diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 6d4d9eee..beec30a9 100755 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -308,6 +308,8 @@ void TWPartitionManager::Setup_Fstab_Partitions(bool Display_Error) { Prepare_Super_Volume((*iter)); } + Unlock_Block_Partitions(); + //Setup Apex before decryption TWPartition* sys = PartitionManager.Find_Partition_By_Path(PartitionManager.Get_Android_Root_Path()); TWPartition* ven = PartitionManager.Find_Partition_By_Path("/vendor"); @@ -2839,8 +2841,6 @@ bool TWPartitionManager::Flash_Image(string& path, string& filename) { full_filename = path + "/" + filename; - Unlock_Block_Partitions(); - gui_msg("image_flash_start=[IMAGE FLASH STARTED]"); gui_msg(Msg("img_to_flash=Image to flash: '{1}'")(full_filename)); @@ -3421,11 +3421,12 @@ bool TWPartitionManager::Prepare_Super_Volume(TWPartition* twrpPart) { twrpPart->Set_Block_Device(fstabEntry.blk_device); twrpPart->Update_Size(true); - twrpPart->Change_Mount_Read_Only(true); twrpPart->Set_Can_Be_Backed_Up(false); twrpPart->Set_Can_Be_Wiped(false); - LOGINFO("Symlinking %s => /dev/block/bootdevice/by-name/%s \n", fstabEntry.blk_device.c_str(), bare_partition_name.c_str()); - symlink(fstabEntry.blk_device.c_str(), ("/dev/block/bootdevice/by-name/" + bare_partition_name).c_str()); + if (access(("/dev/block/bootdevice/by-name/" + bare_partition_name).c_str(), F_OK) == -1) { + LOGINFO("Symlinking %s => /dev/block/bootdevice/by-name/%s \n", fstabEntry.blk_device.c_str(), bare_partition_name.c_str()); + symlink(fstabEntry.blk_device.c_str(), ("/dev/block/bootdevice/by-name/" + bare_partition_name).c_str()); + } return true; } @@ -3556,7 +3557,7 @@ void TWPartitionManager::Unlock_Block_Partitions() { continue; } if (ioctl(fd, BLKROSET, &OFF) == -1) { - LOGERR("Unable to unlock %s for flashing: %s\n", block_device.c_str()); + LOGERR("Unable to unlock %s: %s\n", block_device.c_str()); continue; } close(fd); @@ -3577,7 +3578,9 @@ bool TWPartitionManager::Unmap_Super_Devices() { if ((*iter)->Is_Super) { TWPartition *part = *iter; std::string bare_partition_name = Get_Bare_Partition_Name((*iter)->Get_Mount_Point()); - std::string blk_device_partition = bare_partition_name + PartitionManager.Get_Active_Slot_Suffix(); + std::string blk_device_partition = bare_partition_name; + if (DataManager::GetStrValue(TW_VIRTUAL_AB_ENABLED) == "1") + blk_device_partition.append(PartitionManager.Get_Active_Slot_Suffix()); (*iter)->UnMount(false); LOGINFO("removing dynamic partition: %s\n", blk_device_partition.c_str()); destroyed = DestroyLogicalPartition(blk_device_partition); diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk index 5b8df086..48ee5a67 100755 --- a/prebuilt/Android.mk +++ b/prebuilt/Android.mk @@ -255,7 +255,7 @@ endif ifneq ($(wildcard system/core/libsparse/Android.*),) RECOVERY_LIBRARY_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libsparse.so endif -ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS), true) +ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS),) RECOVERY_LIBRARY_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libopenaes.so endif ifeq ($(TARGET_USERIMAGES_USE_F2FS), true) @@ -275,6 +275,9 @@ endif ifneq ($(TW_RECOVERY_ADDITIONAL_RELINK_LIBRARY_FILES),) RECOVERY_LIBRARY_SOURCE_FILES += $(TW_RECOVERY_ADDITIONAL_RELINK_LIBRARY_FILES) endif +ifneq ($(TW_RECOVERY_ADDITIONAL_RELINK_VENDOR_HW_BINARY_FILES),) + RECOVERY_VENDOR_HW_BINARY_FILES += $(TW_RECOVERY_ADDITIONAL_RELINK_VENDOR_HW_BINARY_FILES) +endif ifneq ($(wildcard external/pcre/Android.mk),) RECOVERY_LIBRARY_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libpcre.so endif @@ -383,6 +386,17 @@ TARGET_BINARY_RELINK_FILES := $(filter-out bu, $(notdir $(RECOVERY_BINARY_SOURCE LOCAL_REQUIRED_MODULES += $(TARGET_BINARY_RELINK_FILES) include $(BUILD_PHONY_PACKAGE) +include $(CLEAR_VARS) +LOCAL_MODULE := relink_vendor_hw_binaries +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/ +LOCAL_POST_INSTALL_CMD += $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/vendor/bin/hw $(RECOVERY_VENDOR_HW_BINARY_FILES) +TARGET_VENDOR_BINARY_RELINK_FILES := $(notdir $(RECOVERY_VENDOR_HW_BINARY_FILES)) +LOCAL_REQUIRED_MODULES += $(TARGET_VENDOR_BINARY_RELINK_FILES) +$(warning vendor_hw: $(LOCAL_POST_INSTALL_CMD)) +include $(BUILD_PHONY_PACKAGE) + #build out TWRP ramdisk include $(CLEAR_VARS) LOCAL_MODULE := twrp_ramdisk @@ -392,20 +406,20 @@ LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT) LOCAL_POST_INSTALL_CMD += \ mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/sbin; ln -sf /system/bin/sh $(TARGET_RECOVERY_ROOT_OUT)/sbin/sh && \ mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/system/etc/selinux/ && \ - mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/vendor/etc/selinux/ && \ + mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/selinux/ && \ cp $(TARGET_OUT_ETC)/selinux/plat_service_contexts $(TARGET_RECOVERY_ROOT_OUT)/system/etc/selinux/plat_service_contexts && \ cp $(TARGET_OUT_ETC)/selinux/plat_hwservice_contexts $(TARGET_RECOVERY_ROOT_OUT)/system/etc/selinux/plat_hwservice_contexts && \ - cp $(TARGET_OUT_VENDOR_ETC)/selinux/vndservice_contexts $(TARGET_RECOVERY_ROOT_OUT)/vendor/etc/selinux/vndservice_contexts && \ - cp $(TARGET_OUT_VENDOR_ETC)/selinux/vendor_hwservice_contexts $(TARGET_RECOVERY_ROOT_OUT)/vendor/etc/selinux/vendor_hwservice_contexts + cp $(TARGET_OUT_VENDOR_ETC)/selinux/vndservice_contexts $(TARGET_RECOVERY_ROOT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/selinux/vndservice_contexts && \ + cp $(TARGET_OUT_VENDOR_ETC)/selinux/vendor_hwservice_contexts $(TARGET_RECOVERY_ROOT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/selinux/vendor_hwservice_contexts ifeq ($(TARGET_USES_MKE2FS), true) LOCAL_POST_INSTALL_CMD += \ && cp $(TARGET_OUT_ETC)/mke2fs.conf $(TARGET_RECOVERY_ROOT_OUT)/system/etc/mke2fs.conf endif -LOCAL_REQUIRED_MODULES += init_second_stage.recovery reboot.recovery plat_service_contexts plat_hardware_contexts vndservice_contexts twrp_soong +LOCAL_REQUIRED_MODULES += init_second_stage.recovery reboot.recovery plat_service_contexts plat_hwservice_contexts plat_hardware_contexts vndservice_contexts vendor_hwservice_contexts twrp_soong include $(BUILD_PHONY_PACKAGE) # copy license file for OpenAES -ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS), true) +ifneq ($(TW_EXCLUDE_ENCRYPTED_BACKUPS),) include $(CLEAR_VARS) LOCAL_MODULE := openaes_license LOCAL_MODULE_TAGS := optional diff --git a/prebuilt/relink.sh b/prebuilt/relink.sh index 063f445e..59171146 100755 --- a/prebuilt/relink.sh +++ b/prebuilt/relink.sh @@ -12,6 +12,7 @@ process_file() src=$2.tmp fi + mkdir -p $1 cp $src $dst if [[ -e $2.tmp ]]; then rm -f $2.tmp; fi } diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 2b75cda9..820fccaa 100755 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -1554,7 +1554,7 @@ bool TWFunc::Check_Xml_Format(const std::string filename) { File.close(); // Android Binary Xml start from these bytes if(!buffer.compare(0, abx_hdr.size(), abx_hdr)) - return false; // bad format, not possible to parse + return false; // ABX format - requires conversion } return true; // good format, possible to parse } diff --git a/twrp.cpp b/twrp.cpp index dcc57640..69c82182 100644 --- a/twrp.cpp +++ b/twrp.cpp @@ -44,7 +44,11 @@ extern "C" { #include "twcommon.h" #include "twrp-functions.hpp" #include "data.hpp" + +#ifdef TW_LOAD_VENDOR_MODULES #include "kernel_module_loader.hpp" +#endif + #include "partitions.hpp" #ifdef __ANDROID_API_N__ #include diff --git a/twrpRepacker.cpp b/twrpRepacker.cpp index 6ac2ce90..1da19e26 100755 --- a/twrpRepacker.cpp +++ b/twrpRepacker.cpp @@ -270,6 +270,7 @@ if (!TWFunc::Path_Exists("/ramdisk-files.txt")) { LOGERR("can not find ramdisk-files.txt"); return false; } + PartitionManager.Unlock_Block_Partitions(); Repack_Options_struct Repack_Options; Repack_Options.Disable_Verity = false; Repack_Options.Disable_Force_Encrypt = false; diff --git a/twrpinstall/twinstall.cpp b/twrpinstall/twinstall.cpp index 7975a978..6805a2f0 100755 --- a/twrpinstall/twinstall.cpp +++ b/twrpinstall/twinstall.cpp @@ -342,6 +342,7 @@ int TWinstall_zip(const char* path, int* wipe_cache, bool check_for_digest) { if (!system_mount_state) PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), false); if (android::base::GetBoolProperty("ro.virtual_ab.enabled", false)) { + PartitionManager.Unlock_Block_Partitions(); PartitionManager.Prepare_All_Super_Volumes(); gui_warn("mount_vab_partitions=Devices on super may not mount until rebooting recovery."); } diff --git a/variables.h b/variables.h index 661bb481..4769dc71 100755 --- a/variables.h +++ b/variables.h @@ -17,7 +17,7 @@ #ifndef _VARIABLES_HEADER_ #define _VARIABLES_HEADER_ -#define TW_MAIN_VERSION_STR "3.6.1_11" +#define TW_MAIN_VERSION_STR "3.7.0_11" #define TW_VERSION_STR TW_MAIN_VERSION_STR TW_DEVICE_VERSION #define TW_SETTINGS_FILE ".twrps" #define TW_RECOVERY_NAME "TWRP" @@ -147,6 +147,7 @@ #define TW_NO_SHA2 "tw_no_sha2" #define TW_UNMOUNT_SYSTEM "tw_unmount_system" #define TW_IS_SUPER "tw_is_super" +#define TW_VIRTUAL_AB_ENABLED "tw_virtual_ab.enabled" #define TW_AUTO_REFLASHTWRP_VAR "tw_auto_reflashtwrp" // Theme versioning