feat: mapping-io import support (#1531)(PR #1532)

* Add new CLI args for mapping files and deprecate args regarding jobf files (will be moved to the cache dir in the future)

* Add support for importing method arg mappings

Also change `mapping-file` to `mappings-path`, since folders are supported, too

* Add GUI for importing mappings

* Also show save file dialog when exporting mappings

* Fix crash on startup when `--mappings-path` parameter is set

* Include imported renames when exporting mappings

* Add "close mappings" menu entry

* Don't instantiate MappingTree unless actually needed

* Terminology: `import` → `open`; `export` → `save`

* Save location of open mapping file into project data

* Correctly reset cache when loading new mappings

* Remove unused import

* Save opened mappings' last modified date to reset cache when changed

* Fix if statement

* Correctly handle absence of mappings path in project data

* Show overwrite warning for folders only if not empty

* Prevent crash when imported mappings don't have any namespaces

* Handle wrong mappings namespace count error

* Replace unneeded public with private

* Add option for saving open mappings directly to disk

* Correctly propagate and throw exceptions during decompiler init

* Respect opened mappings' existing namespaces; fix related crash

* Deduplicate code, add `DalvikToJavaBytecodeUtils` class

* Small cleanup; move more functionality to utility class

* Support for importing class, field and method mappings

* Handle mappings in RenameDialog

* Fix checkstyle

* Fix wrong naming order

* Use modified mapping-io JAR from https://github.com/skylot/jadx/commit/18070eb7a649db0b0daef38d456316d5b4650072

That commit got rid of redundant embedded libraries

* Add null checks

* Check if mapping tree is null before running MappingsVisitor

* Use working mapping-io build

* Handle cache invalidation directly in DiskCodeCache class

* Don't reset UserRenamesMappingsMode if project is just reloaded

* Fix checkstyle

Co-authored-by: Skylot <skylot@gmail.com>
This commit is contained in:
Julian Burner
2022-08-10 16:37:55 +02:00
committed by Skylot
parent cb1f3e9843
commit cb91c8c41c
37 changed files with 1156 additions and 198 deletions
@@ -32,7 +32,10 @@ file.save_project_as=Projekt speichern als…
file.reload=Dateien neu laden
file.live_reload=Live nachladen
file.live_reload_desc=Dateien bei Änderungen autom. neuladen
file.export_mappings_as=Zuordnungen exportieren als…
#file.open_mappings=
#file.save_mappings=
#file.save_mappings_as=
#file.close_mappings=Zuordnungen exportieren als…
file.save_all=Alles speichern
#file.save=Save
file.export_gradle=Als Gradle-Projekt speichern
@@ -51,7 +54,7 @@ tree.resources_title=Ressourcen
tree.loading=Laden…
progress.load=Laden
progress.export_mappings=Zuordnungen exportieren
progress.save_mappings=Zuordnungen exportieren
progress.decompile=Dekompilieren
progress.canceling=Breche ab
@@ -188,7 +191,7 @@ preferences.start_jobs=Autom. Hintergrunddekompilierung starten
preferences.select_font=Ändern
preferences.select_smali_font=Ändern
preferences.deobfuscation_on=Deobfuskierung aktivieren
preferences.deobfuscation_map_file_mode=Umgang mit Map-Dateien
preferences.generated_renames_mapping_file_mode=Umgang mit Map-Dateien
preferences.deobfuscation_min_len=Minimale Namenlänge
preferences.deobfuscation_max_len=Maximale Namenlänge
preferences.deobfuscation_source_alias=Quelldateiname als Klassennamen-Alias verwenden
@@ -216,6 +219,8 @@ msg.language_changed_title=Sprache speichern
msg.language_changed=Die neue Sprache wird beim nächsten Start der Anwendung angezeigt.
msg.project_error_title=Fehler
msg.project_error=Projekt konnte nicht geladen werden
#msg.mapping_namespace_count_error_title=
#msg.mapping_namespace_count_error=
msg.cmd_select_class_error=Klasse\n%s auswählen nicht möglich\nSie existiert nicht.
msg.cant_add_comment=Kann hier keinen Kommentar hinzufügen
@@ -32,7 +32,10 @@ file.save_project_as=Save project as...
file.reload=Reload files
file.live_reload=Live reload
file.live_reload_desc=Auto reload files on changes
file.export_mappings_as=Export mappings as...
file.open_mappings=Open mappings...
file.save_mappings=Save mappings
file.save_mappings_as=Save mappings as...
file.close_mappings=Close mappings
file.save_all=Save all
file.save=Save
file.export_gradle=Save as gradle project
@@ -51,7 +54,7 @@ tree.resources_title=Resources
tree.loading=Loading...
progress.load=Loading
progress.export_mappings=Exporting mappings
progress.save_mappings=Saving mappings
progress.decompile=Decompiling
progress.canceling=Canceling
@@ -188,7 +191,7 @@ preferences.start_jobs=Auto start background decompilation
preferences.select_font=Change
preferences.select_smali_font=Change
preferences.deobfuscation_on=Enable deobfuscation
preferences.deobfuscation_map_file_mode=Map file handle mode
preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Minimum name length
preferences.deobfuscation_max_len=Maximum name length
preferences.deobfuscation_source_alias=Use source file name as class name alias
@@ -216,6 +219,8 @@ msg.language_changed_title=Language changed
msg.language_changed=New language will be displayed the next time application starts.
msg.project_error_title=Error
msg.project_error=Project could not be loaded
msg.mapping_namespace_count_error_title=Error
msg.mapping_namespace_count_error=JADX only supports mappings with just one destination namespace! The provided ones have %s.
msg.cmd_select_class_error=Failed to select the class\n%s\nThe class does not exist.
msg.cant_add_comment=Can't add comment here
@@ -32,7 +32,10 @@ file.open_title=Abrir archivo
#file.reload=Reload files
#file.live_reload=Live reload
#file.live_reload_desc=Auto reload files on changes
#file.export_mappings_as=
#file.open_mappings=
#file.save_mappings=
#file.save_mappings_as=
#file.close_mappings=
file.save_all=Guardar todo
#file.save=Save
file.export_gradle=Guardar como proyecto Gradle
@@ -51,7 +54,7 @@ tree.resources_title=Recursos
tree.loading=Cargando...
progress.load=Cargando
#progress.export_mappings=
#progress.save_mappings=
progress.decompile=Decompiling
#progress.canceling=Canceling
@@ -188,7 +191,7 @@ preferences.start_jobs=Inicio autom. descompilación de fondo
preferences.select_font=Seleccionar
#preferences.select_smali_font=
preferences.deobfuscation_on=Activar desobfuscación
#preferences.deobfuscation_map_file_mode=Map file handle mode
#preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Longitud mínima del nombre
preferences.deobfuscation_max_len=Longitud máxima del nombre
preferences.deobfuscation_source_alias=Usar el nombre del source como alias para la clase
@@ -216,6 +219,8 @@ msg.language_changed_title=Idioma cambiado
msg.language_changed=El nuevo idioma se mostrará la próxima vez que la aplicación se inicie.
#msg.project_error_title=
#msg.project_error=
#msg.mapping_namespace_count_error_title=
#msg.mapping_namespace_count_error=
#msg.cmd_select_class_error=
#msg.cant_add_comment=Can't add comment here
@@ -32,7 +32,10 @@ file.save_project_as=다른 이름으로 프로젝트 저장...
file.reload=파일 다시 로드
file.live_reload=라이브 로드
file.live_reload_desc=파일 내용 변경 시 자동으로 다시 로드
file.export_mappings_as=다른 이름으로 매핑 내보내기...
#file.open_mappings=
file.save_mappings=다른 이름으로 매핑 내보내기...
#file.save_mappings_as=
#file.close_mappings=다른 이름으로 매핑 내보내기...
file.save_all=모두 저장
#file.save=Save
file.export_gradle=Gradle 프로젝트로 저장
@@ -51,7 +54,7 @@ tree.resources_title=리소스
tree.loading=로딩중...
progress.load=로딩중
progress.export_mappings=매핑 내보내는 중
progress.save_mappings=매핑 내보내는 중
progress.decompile=디컴파일 중
progress.canceling=취소 중
@@ -188,7 +191,7 @@ preferences.start_jobs=백그라운드에서 디컴파일 자동 시작
preferences.select_font=변경
preferences.select_smali_font=변경
preferences.deobfuscation_on=난독 해제 활성화
preferences.deobfuscation_map_file_mode=맵 파일 처리 모드
preferences.generated_renames_mapping_file_mode=맵 파일 처리 모드
preferences.deobfuscation_min_len=최소 이름 길이
preferences.deobfuscation_max_len=최대 이름 길이
preferences.deobfuscation_source_alias=소스 파일 이름을 클래스 이름 별칭으로 사용
@@ -216,6 +219,8 @@ msg.language_changed_title=언어 변경됨
msg.language_changed=다음에 응용 프로그램이 시작되면 새 언어가 표시됩니다.
msg.project_error_title=오류
msg.project_error=프로젝트를 로드 할 수 없습니다.
#msg.mapping_namespace_count_error_title=
#msg.mapping_namespace_count_error=
msg.cmd_select_class_error=클래스를 선택하지 못했습니다.\n%s\n클래스가 없습니다.
msg.cant_add_comment=여기에 주석을 추가할수 없음
@@ -32,7 +32,10 @@ file.save_project_as=Salvar projeto como...
file.reload=Recarregar arquivos
file.live_reload=Recarregar em tempo real
file.live_reload_desc=Recarregar arquivos automaticamente ao serem alterados
file.export_mappings_as=Exportar mappings como...
#file.open_mappings=Open mappings...
#file.save_mappings=Save mappings
#file.save_mappings_as=Save mappings as...
#file.close_mappings=Close mappings
file.save_all=Salvar tudo
#file.save=Save
file.export_gradle=Salvar como um projeto gradle
@@ -51,7 +54,7 @@ tree.resources_title=Recursos
tree.loading=Carregando...
progress.load=Carregando
progress.export_mappings=Exportando mappings
#progress.save_mappings=Saving mappings
progress.decompile=Descompilando
progress.canceling=Cancelando
@@ -188,7 +191,7 @@ preferences.start_jobs=Inicializar descompilação automaticamente em segundo-pl
preferences.select_font=Alterar
preferences.select_smali_font=Alterar
preferences.deobfuscation_on=Ativar desofuscação
preferences.deobfuscation_map_file_mode=Modo do arquivo Map
#preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Tamanho mínimo do nome
preferences.deobfuscation_max_len=Tamanho máximo do nome
preferences.deobfuscation_source_alias=Utilizar nome do arquivo como apelido da classe
@@ -216,6 +219,8 @@ msg.language_changed_title=Idioma alterado
msg.language_changed=Novo idioma será mostrado na próxima inicialização.
msg.project_error_title=Erro
msg.project_error=Projeto não pôde ser carregado
#msg.mapping_namespace_count_error_title=Error
#msg.mapping_namespace_count_error=JADX only supports mappings with just one destination namespace! The provided ones have %s.
msg.cmd_select_class_error=Falha ao selecionar classe\n%s\nA classe não existe.
msg.cant_add_comment=Não é possível adicionar comentários aqui
@@ -32,7 +32,10 @@ file.save_project_as=另存项目为…
file.reload=重新加载文件
file.live_reload=实时重加载
file.live_reload_desc=文件变动时自动重载
file.export_mappings_as=导出映射为…
file.open_mappings=
#file.save_mappings=
#file.save_mappings_as=
#file.close_mappings=导出映射为…
file.save_all=全部保存
#file.save=Save
file.export_gradle=另存为 Gradle 项目
@@ -51,7 +54,7 @@ tree.resources_title=资源文件
tree.loading=加载中…
progress.load=正在加载
progress.export_mappings=导出映射
progress.save_mappings=导出映射
progress.decompile=反编译中
progress.canceling=正在取消
@@ -188,7 +191,7 @@ preferences.start_jobs=自动进行后台反编译
preferences.select_font=修改
preferences.select_smali_font=修改
preferences.deobfuscation_on=启用反混淆
preferences.deobfuscation_map_file_mode=映射文件句柄模式
preferences.generated_renames_mapping_file_mode=映射文件句柄模式
preferences.deobfuscation_min_len=最小命名长度
preferences.deobfuscation_max_len=最大命名长度
preferences.deobfuscation_source_alias=使用资源名作为类的别名
@@ -216,6 +219,8 @@ msg.language_changed_title=语言已更改
msg.language_changed=新的语言将在下次应用程序启动时显示。
msg.project_error_title=错误
msg.project_error=项目无法加载
#msg.mapping_namespace_count_error_title=
#msg.mapping_namespace_count_error=
msg.cmd_select_class_error=无法选择类\n%s\n该类不存在。
msg.cant_add_comment=无法在此添加注释
@@ -32,7 +32,10 @@ file.save_project_as=另存專案...
file.reload=重新載入檔案
file.live_reload=實時重新載入
file.live_reload_desc=更動後自動重新載入檔案
file.export_mappings_as=匯出對應為...
file.open_mappings=
#file.save_mappings=
#file.save_mappings_as=
#file.close_mappings=匯出對應為...
file.save_all=全部儲存
#file.save=Save
file.export_gradle=另存為 gradle 專案
@@ -51,7 +54,7 @@ tree.resources_title=資源
tree.loading=載入中...
progress.load=載入中
progress.export_mappings=正在匯出對應
progress.save_mappings=正在匯出對應
progress.decompile=正在反編譯
progress.canceling=正在取消
@@ -188,7 +191,7 @@ preferences.start_jobs=自動開始背景反編譯
preferences.select_font=變更
preferences.select_smali_font=變更
preferences.deobfuscation_on=啟用去模糊化
preferences.deobfuscation_map_file_mode=Map 檔案處理模式
preferences.generated_renames_mapping_file_mode=Map 檔案處理模式
preferences.deobfuscation_min_len=最小名稱長度
preferences.deobfuscation_max_len=最大名稱長度
preferences.deobfuscation_source_alias=將原始檔案名稱作為類別別名
@@ -216,6 +219,8 @@ msg.language_changed_title=已更改語言
msg.language_changed=新語言將於下次應用程式啟動時套用。
msg.project_error_title=錯誤
msg.project_error=無法載入專案
#msg.mapping_namespace_count_error_title=
#msg.mapping_namespace_count_error=
msg.cmd_select_class_error=無法選擇類別\n%s\n類別不存在。
msg.cant_add_comment=無法在此新增註解