Skip to content

Commit d44d5ab

Browse files
committed
docs: clarify power-user permission model
1 parent 662cab0 commit d44d5ab

4 files changed

Lines changed: 22 additions & 12 deletions

File tree

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,18 @@ Analyze malicious app on your phone
1414
This repository is under active maintenance again.
1515

1616
- The baseline now expects initialized git submodules before building.
17-
- Android compatibility work is in progress, with SAF-based file import preferred over legacy external storage access on modern Android.
17+
- Default file open/import/export flows now use SAF-first contracts on modern Android.
18+
- `Advanced import` is a separate power-user path for root, raw filesystem, and installed-app browsing.
19+
- `QUERY_ALL_PACKAGES` is kept for the power-user installed-app source, not for the default SAF flow.
1820
- Issue triage and maintenance docs live under `docs/maintenance/`.
1921

22+
## Storage model
23+
24+
- `Select file` uses Android's SAF document picker.
25+
- `Export project` and `Save Details to file` use SAF document creation flows.
26+
- `Advanced import` is opt-in and intended for power users who need raw filesystem, root, or installed-app entry points.
27+
- Installed-app browsing is treated as a power-user feature, so package visibility stays isolated from the default import path.
28+
2029
## Preview builds
2130

2231
- Every CI run uploads a debug APK artifact in GitHub Actions.

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@
5757
<string name="advanced_import">Advanced import</string>
5858
<string name="power_user_features">Power-user features</string>
5959
<string name="power_user_import_title">Enable power-user import options</string>
60-
<string name="power_user_import_summary">Show advanced non-SAF import entry points such as root and direct filesystem browsing.</string>
60+
<string name="power_user_import_summary">Keep standard imports on SAF. Enable Advanced import only for root, direct filesystem, and other non-SAF entry points.</string>
6161
<string name="power_user_filesystem_import_title">Enable filesystem sources</string>
62-
<string name="power_user_filesystem_import_summary">Show root, storage, and process-oriented filesystem entry points in Advanced import.</string>
62+
<string name="power_user_filesystem_import_summary">Show root, storage, and process-oriented raw filesystem entry points in Advanced import.</string>
6363
<string name="power_user_apps_import_title">Enable installed apps source</string>
64-
<string name="power_user_apps_import_summary">Show installed application packages in Advanced import.</string>
64+
<string name="power_user_apps_import_summary">Show installed application packages in Advanced import. This power-user path relies on app visibility to browse installed packages.</string>
6565
<string name="power_user_research_tools_import_title">Enable research tools</string>
6666
<string name="power_user_research_tools_import_summary">Show malware zoo and hash lookup tools in Advanced import.</string>
6767
<string name="architecture">Architecture:</string>

docs/maintenance/backlog-triage.ko.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# 백로그 분류표
22

3-
이 문서는 2026-03-21 기준으로 열려 있는 GitHub 이슈 30개를 유지보수 재가동 관점에서 다시 묶은 결과다.
3+
이 문서는 2026-03-21 기준으로 열려 있는 GitHub 이슈 28개를 유지보수 재가동 관점에서 다시 묶은 결과다.
44
상태 이름은 `docs/maintenance/issue-triage.md`의 공통 분류를 따른다.
55

66
## 요약
77

88
| 항목 | 수량 | 판단 |
99
| --- | --- | --- |
1010
| 오픈 PR | 0 | 유지보수 기준선 PR `#728`은 이미 `master`에 병합되었다 |
11-
| 오픈 이슈 | 30 | 표면상 30개지만, 실제 활성 작업 묶음은 대략 10개 안팎이고 일부는 `future-scope`로만 추적한다 |
11+
| 오픈 이슈 | 28 | 표면상 28개지만, 실제 활성 작업 묶음은 대략 10개 안팎이고 일부는 `future-scope`로만 추적한다 |
1212
| 즉시 닫기/대체 가능 후보 | 완료 | `#728`로 직접 커버된 이슈 8건은 병합 직후 정리했다 |
1313
| 즉시 구현 후보 | 소수 | 릴리스 운영, storage 정책 마감, large-file / `.so` 재현 클러스터가 우선이다 |
1414

@@ -17,6 +17,7 @@
1717
| 항목 | 처리 | 이유 |
1818
| --- | --- | --- |
1919
| PR `#728` | 병합 | 유지보수 기준선, SAF 전환, release/preview workflow, instrumentation merge gate, 여러 crash/UX 완화를 `master`에 반영 |
20+
| PR `#729` | 병합 | incoming `ACTION_VIEW`/`EXTRA_STREAM` `content://` 경계와 외부 공유 project ZIP reopen 경계를 CI instrumentation으로 고정 |
2021
| PR `#723`, `#724`, `#725`, `#726`, `#727` | 닫음 | `#728`에 흡수되었거나 현재 release/preview workflow로 대체됨 |
2122
| PR `#704`, `#701`, `#699`, `#695`, `#693`, `#692`, `#677`, `#637`, `#615`, `#565` | 닫음 | 오래된 자동 bump/alpha 제안으로 현재 유지보수 기준선보다 뒤처짐 |
2223
| 이슈 `#112` | 닫음 | SWF 요청은 `#721`로 통합 |
@@ -26,15 +27,14 @@
2627
| 이슈 `#438` | 닫음 | chooser 정렬이 empty label을 안전하게 처리하도록 이미 maintenance 브랜치에서 수정됨 |
2728
| 이슈 `#672` | 닫음 | crash stack이 가리키던 `ProjectOverviewFragment` binding 경로는 현재 Compose 기반 overview 화면으로 대체되어 더 이상 활성 코드 경로가 아님 |
2829
| 이슈 `#720`, `#670`, `#396`, `#348`, `#160`, `#159`, `#129`, `#123` | 닫음 | `#728`에 포함된 변경이 `master`에 병합되어 post-merge 정리 완료 |
30+
| 이슈 `#95` | 닫음 | `#728``#729`가 기본 SAF import/export/open 경로, incoming `content://` 공유 경계, project archive reopen 경계까지 `master`에 반영 |
2931
| 이슈 `#162`, `#529`, `#706`, `#491` | reopen + `future-scope` | 지금 당장 하지는 않지만 나중에 다시 볼 수 있는 장기 기능 요청으로 분리 추적 |
3032
| 이슈 `#717`, `#710`, `#582`, `#158` | reopen + `future-scope` | 현재 baseline 유지보수 범위는 아니지만 장기 검토 대상으로는 남겨둠 |
3133

3234
## 오픈 이슈 클러스터
3335

3436
| 작업 묶음 | 관련 이슈 | 제안 상태 | 판단 | 다음 액션 |
3537
| --- | --- | --- | --- | --- |
36-
| 최신 Android storage 정책 | `#95` | `planned-fast-follow` | 핵심 유지보수 항목이며 이미 SAF 전환, incoming `ACTION_VIEW`/`EXTRA_STREAM` instrumentation 회귀 검증, 외부 공유 project ZIP의 reopen 경계까지 보강했다 | 앱 전체 import/open 경로를 SAF 중심으로 계속 이관하고 남은 실기기 경계를 확인 |
37-
| 릴리스 산출물 부재 | `#719` | `planned-fast-follow` | 코드 문제보다 릴리스 파이프라인 문제다 | CI artifact, preview prerelease, formal release 흐름으로 운영 정리 |
3838
| 대용량/메모리/RecyclerView 크래시 | `#219`, `#235`, `#442`, `#523` | `planned-fast-follow` | `#728`에서 큰 파일 byte cache 제한과 문자열 검색 결과 상한/stable key를 먼저 넣었다 | `#728` 병합 후 실제 150MB 파일과 긴 문자열 리스트로 재검증하고 나머지 OOM 경로를 분리 |
3939
| `.so`/ELF/autosetup | `#514`, `#543`, `#576`, `#137` | `planned-fast-follow` | `#728`에서 64-bit ELF machine type 매핑과 override autosetup 재적용 경로를 먼저 수정했다 | 실제 `.so` 샘플로 재검증하고 남는 parser 문제만 분리 |
4040
| 구형 Android archive 감지 크래시 | `#507`, `#508` | `planned-fast-follow` | `#728`에서 archive 확장자 fast path와 `NoClassDefFoundError` 방어를 넣어 구형 Android의 Commons Compress 감지 크래시 경로를 우회했다 | Android 6~7 계열에서 archive chooser와 open 경로를 재확인하고 정리 |
@@ -51,10 +51,10 @@
5151

5252
| 우선순위 | 항목 | 근거 |
5353
| --- | --- | --- |
54-
| 1 | `#719` preview/release 운영 정리 | 최신 빌드를 배포할 수 있어야 이슈 종료도 설득력이 생긴다 |
55-
| 2 | `#95` storage 정책 마감 | 최신 Android 대응의 핵심이다 |
56-
| 3 | large-file / `.so` 재현 클러스터 정리 | 오래된 crash report와 parser 관련 이슈를 실질 작업 묶음으로 줄일 수 있다 |
57-
| 4 | 포맷 확장 요청 재정렬 | 실제 유지보수 범위와 별도 연구 과제를 나눠야 한다 |
54+
| 1 | large-file / `.so` 재현 클러스터 정리 | 오래된 crash report와 parser 관련 이슈를 실질 작업 묶음으로 줄일 수 있다 |
55+
| 2 | 구형 Android archive / stale project 재확인 | 이미 완화한 경계를 실제 종료 가능한 상태로 정리해야 한다 |
56+
| 3 | 포맷 확장 요청 재정렬 | 실제 유지보수 범위와 별도 연구 과제를 나눠야 한다 |
57+
| 4 | power-user 기능 문서화 유지 | 기본 SAF 경로와 고급 권한 경로가 다시 섞이지 않도록 README와 설정 설명을 계속 일관되게 유지해야 한다 |
5858

5959
## 닫기 전 체크 규칙
6060

docs/maintenance/implementation-log.ko.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
| 이슈 `#95` 외부 문서 인텐트 권한 누락 | 앱이 `ACTION_VIEW``EXTRA_STREAM`으로 열린 경우에도 persistable grant 가능 여부를 계산하고 `content://` URI 권한을 선제적으로 유지 | SAF picker 밖에서 들어온 문서도 같은 storage 정책 흐름으로 흡수해서, provider가 허용하는 경우 앱 재실행 이후에도 접근이 끊길 가능성을 줄였다 | `app/src/main/java/com/kyhsgeekcode/disassembler/MainActivity.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/PermissionUtils.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/PermissionUtilsTest.kt` | 완료 |
1818
| 이슈 `#95` incoming content intent 회귀 검증 부재 | `ACTION_VIEW``EXTRA_STREAM`으로 들어오는 `content://` 문서를 직접 주입하는 instrumentation fixture와 flow test를 추가했다 | picker 기반 SAF import만 보던 기존 merge gate를 넓혀서, 외부 앱에서 전달된 문서가 실제 프로젝트로 열리고 activity recreate 뒤에도 UI가 살아 있는지 CI에서 계속 감시할 수 있게 했다 | `app/src/androidTest/java/com/kyhsgeekcode/disassembler/DocumentIntentFixtures.kt`, `app/src/androidTest/java/com/kyhsgeekcode/disassembler/MainActivityActionViewIntentFlowTest.kt`, `app/src/androidTest/java/com/kyhsgeekcode/disassembler/MainActivityExtraStreamIntentFlowTest.kt` | 완료 |
1919
| 이슈 `#95` 외부 공유 project ZIP reopen 경계 | content URI로 들어온 app-private 복사본이 project archive인지 다시 판별하는 helper를 추가하고, archive면 일반 파일 import 대신 `ProjectManager.import(...)`로 연결했다. `ACTION_VIEW` project archive instrumentation도 추가했다 | 외부 앱이 exported project ZIP을 공유했을 때 `ArchiveFixture.zip` 같은 일반 파일 프로젝트가 생기지 않고, 실제 imported project model이 열리도록 고정했다 | `app/src/main/java/com/kyhsgeekcode/disassembler/viewmodel/MainViewModel.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/viewmodel/ImportedUriActionTest.kt`, `app/src/androidTest/java/com/kyhsgeekcode/disassembler/MainActivityActionViewProjectArchiveIntentFlowTest.kt` | 완료 |
20+
| 이슈 `#95` 후속 문서 정리 | README와 power-user 설정 문구에 SAF 기본 경로와 installed-app source의 권한 모델을 명시했다 | `QUERY_ALL_PACKAGES`가 기본 import 경로가 아니라 power-user installed-app source용이라는 점을 사용자와 기여자 모두가 같은 방식으로 이해할 수 있게 정리했다 | `README.md`, `app/src/main/res/values/strings.xml`, `docs/maintenance/backlog-triage.ko.md` | 완료 |
2021
| 이슈 `#95` legacy 저장소 권한 범위 축소 | import entry-point별 legacy 권한 요구를 분리하고, `Advanced import`만 Android 9 이하에서 권한 요청을 하도록 변경 | 기본 SAF import는 어떤 지원 SDK에서도 저장소 권한을 요구하지 않게 고정하고, 구형 Android의 raw filesystem 진입점에서만 legacy 권한 모델을 제한적으로 유지했다 | `app/src/main/java/com/kyhsgeekcode/disassembler/importing/ImportEntryPointCatalog.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/ui/MainTab.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/importing/ImportEntryPointCatalogTest.kt` | 완료 |
2122
| 프로젝트 경계의 raw path 의존 | `ProjectModel`에 source helper를 추가하고 프로젝트 트리/리스트/저장소가 helper를 사용하도록 교체 | `sourceFilePath` 문자열 조합을 한곳으로 모아서 이후 `sourceDescriptor` 중심 구조로 더 옮기기 쉬운 상태를 만들었다 | `app/src/main/java/com/kyhsgeekcode/disassembler/project/models/ProjectModel.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/ui/FileDrawerTree.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/FileDrawerListAdapter.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/FileDrawerListItem.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/project/ProjectDataStorage.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/viewmodel/MainViewModel.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/ProjectManagerTest.kt` | 완료 |
2223
| broad storage 우회 경로 정리 | 더 이상 쓰지 않는 legacy picker 코드와 Android 11+의 `MANAGE_ALL_FILES_ACCESS` 유도 설정을 제거 | SAF 기반 경로를 기본 흐름으로 고정하고, 정책상 불리한 all-files access 진입점을 줄였다 | `app/src/main/java/com/kyhsgeekcode/disassembler/MainActivity.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/preference/SettingsFragment.kt`, `app/src/main/res/xml/pref_settings.xml`, `app/src/main/res/xml-v30/pref_settings.xml`, `app/src/main/res/values/array.xml` | 완료 |

0 commit comments

Comments
 (0)