@leejungkiin/awkit 1.7.1 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/bin/awk.js +576 -84
  2. package/core/CLAUDE.md +1 -1
  3. package/core/GEMINI.md +148 -167
  4. package/core/GEMINI.md.bak +149 -116
  5. package/core/skill-runtime-manifest.json +3 -0
  6. package/docs/Claude Fable 5.md +3826 -0
  7. package/docs/android_kotlin_system_instruction.md +210 -0
  8. package/docs/brainstorm_ponytail_integration.md +146 -0
  9. package/docs/brainstorm_smart_setup.md +113 -0
  10. package/docs/deep-research-report (1).md +293 -0
  11. package/docs/history/GEMINI.v1.md +135 -0
  12. package/docs/history/brainstorm_antigravity_unified_architecture.v1.md +105 -0
  13. package/docs/history/implementation_plan.v1.md +58 -0
  14. package/package.json +4 -1
  15. package/scripts/artifact-storage.js +130 -0
  16. package/scripts/automation-gate.js +35 -2
  17. package/scripts/claude-plan.js +76 -0
  18. package/scripts/dependency-manager.js +210 -0
  19. package/scripts/exec-rtk.js +11 -5
  20. package/scripts/i18n-helper.js +381 -0
  21. package/scripts/multi-model-pipeline.js +144 -0
  22. package/skill-packs/mobile-ios/pack.json +4 -2
  23. package/skill-packs/reverse-engineering/pack.json +1 -0
  24. package/skills/CATALOG.md +20 -0
  25. package/skills/GEMINI.md +9 -1
  26. package/skills/TRIGGER_INDEX.md +10 -0
  27. package/skills/ai-music/SKILL.md +275 -0
  28. package/skills/android-re-analyzer/SKILL.md +238 -0
  29. package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
  30. package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
  31. package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
  32. package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
  33. package/skills/android-re-analyzer/references/setup-guide.md +221 -0
  34. package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
  35. package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
  36. package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
  37. package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
  38. package/skills/animal-island-ui-style/SKILL.md +1450 -0
  39. package/skills/app-store-review-agent/SKILL.md +164 -0
  40. package/skills/app-store-review-agent/references/guidelines/README.md +154 -0
  41. package/skills/app-store-review-agent/references/guidelines/by-app-type/ai_apps.md +37 -0
  42. package/skills/app-store-review-agent/references/guidelines/by-app-type/all_apps.md +50 -0
  43. package/skills/app-store-review-agent/references/guidelines/by-app-type/crypto_finance.md +31 -0
  44. package/skills/app-store-review-agent/references/guidelines/by-app-type/games.md +31 -0
  45. package/skills/app-store-review-agent/references/guidelines/by-app-type/health_fitness.md +31 -0
  46. package/skills/app-store-review-agent/references/guidelines/by-app-type/kids.md +27 -0
  47. package/skills/app-store-review-agent/references/guidelines/by-app-type/macos.md +38 -0
  48. package/skills/app-store-review-agent/references/guidelines/by-app-type/social_ugc.md +32 -0
  49. package/skills/app-store-review-agent/references/guidelines/by-app-type/subscription_iap.md +34 -0
  50. package/skills/app-store-review-agent/references/guidelines/by-app-type/vpn.md +18 -0
  51. package/skills/app-store-review-agent/references/rules/design/minimum_functionality.md +96 -0
  52. package/skills/app-store-review-agent/references/rules/design/sign_in_with_apple.md +54 -0
  53. package/skills/app-store-review-agent/references/rules/entitlements/unused_entitlements.md +83 -0
  54. package/skills/app-store-review-agent/references/rules/metadata/accurate_metadata.md +54 -0
  55. package/skills/app-store-review-agent/references/rules/metadata/apple_trademark.md +99 -0
  56. package/skills/app-store-review-agent/references/rules/metadata/china_storefront.md +72 -0
  57. package/skills/app-store-review-agent/references/rules/metadata/competitor_terms.md +56 -0
  58. package/skills/app-store-review-agent/references/rules/metadata/subscription_metadata.md +81 -0
  59. package/skills/app-store-review-agent/references/rules/privacy/privacy_manifest.md +84 -0
  60. package/skills/app-store-review-agent/references/rules/privacy/unnecessary_data.md +60 -0
  61. package/skills/app-store-review-agent/references/rules/subscription/misleading_pricing.md +63 -0
  62. package/skills/app-store-review-agent/references/rules/subscription/missing_tos_pp.md +54 -0
  63. package/skills/awf-ponytail/SKILL.md +91 -0
  64. package/skills/awf-ponytail-review/SKILL.md +67 -0
  65. package/skills/awf-session-restore/SKILL.md +3 -3
  66. package/skills/brainstorm-agent/SKILL.md +11 -2
  67. package/skills/brainstorm-agent/templates/brief-template.md +8 -0
  68. package/skills/claude-planner/SKILL.md +47 -0
  69. package/skills/code-review/SKILL.md +87 -0
  70. package/skills/expo-game-development/SKILL.md +163 -0
  71. package/skills/flutter/LICENSE.txt +202 -0
  72. package/skills/flutter/SKILL.md +127 -0
  73. package/skills/flutter-project-creater/LICENSE.txt +202 -0
  74. package/skills/flutter-project-creater/SKILL.md +106 -0
  75. package/skills/game-developer/SKILL.md +163 -0
  76. package/skills/game-developer/references/ecs-patterns.md +501 -0
  77. package/skills/game-developer/references/multiplayer-networking.md +475 -0
  78. package/skills/game-developer/references/performance-optimization.md +422 -0
  79. package/skills/game-developer/references/unity-patterns.md +271 -0
  80. package/skills/game-developer/references/unreal-cpp.md +352 -0
  81. package/skills/generate-gui-assets/SKILL.md +305 -0
  82. package/skills/generate-gui-assets/agents/openai.yaml +4 -0
  83. package/skills/generate-gui-assets/references/catalog-schema.md +58 -0
  84. package/skills/generate-gui-assets/references/extraction-techniques.md +21 -0
  85. package/skills/generate-gui-assets/references/prompt-patterns.md +58 -0
  86. package/skills/generate-gui-assets/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
  87. package/skills/generate-gui-assets/scripts/build_gui_contact_sheet.py +51 -0
  88. package/skills/generate-gui-assets/scripts/clean_chroma_edges.py +262 -0
  89. package/skills/generate-gui-assets/scripts/copy_approved_icons.py +64 -0
  90. package/skills/generate-gui-assets/scripts/prepare_gui_asset_run.py +91 -0
  91. package/skills/generate-gui-assets/scripts/suggest_grid_options.py +63 -0
  92. package/skills/generate-gui-assets/scripts/validate_gui_catalog.py +50 -0
  93. package/skills/godot-game-development/SKILL.md +142 -0
  94. package/skills/hatch-pet/LICENSE.txt +201 -0
  95. package/skills/hatch-pet/SKILL.md +420 -0
  96. package/skills/hatch-pet/agents/openai.yaml +4 -0
  97. package/skills/hatch-pet/references/animation-rows.md +29 -0
  98. package/skills/hatch-pet/references/codex-pet-contract.md +35 -0
  99. package/skills/hatch-pet/references/qa-rubric.md +60 -0
  100. package/skills/hatch-pet/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
  101. package/skills/hatch-pet/scripts/clean_chroma_edges.py +262 -0
  102. package/skills/hatch-pet/scripts/compose_atlas.py +150 -0
  103. package/skills/hatch-pet/scripts/derive_running_left_from_running_right.py +143 -0
  104. package/skills/hatch-pet/scripts/extract_strip_frames.py +323 -0
  105. package/skills/hatch-pet/scripts/finalize_pet_run.py +382 -0
  106. package/skills/hatch-pet/scripts/generate_pet_images.py +287 -0
  107. package/skills/hatch-pet/scripts/inspect_frames.py +246 -0
  108. package/skills/hatch-pet/scripts/make_contact_sheet.py +96 -0
  109. package/skills/hatch-pet/scripts/package_custom_pet.py +108 -0
  110. package/skills/hatch-pet/scripts/pet_job_status.py +117 -0
  111. package/skills/hatch-pet/scripts/prepare_pet_run.py +673 -0
  112. package/skills/hatch-pet/scripts/queue_pet_repairs.py +172 -0
  113. package/skills/hatch-pet/scripts/record_imagegen_result.py +250 -0
  114. package/skills/hatch-pet/scripts/render_animation_videos.py +134 -0
  115. package/skills/hatch-pet/scripts/render_animation_videos.sh +5 -0
  116. package/skills/hatch-pet/scripts/validate_atlas.py +139 -0
  117. package/skills/i18n-orchestrator/SKILL.md +37 -0
  118. package/skills/ios-simulator-skill/SKILL.md +390 -0
  119. package/skills/ios-simulator-skill/scripts/accessibility_audit.py +300 -0
  120. package/skills/ios-simulator-skill/scripts/app_launcher.py +326 -0
  121. package/skills/ios-simulator-skill/scripts/app_state_capture.py +400 -0
  122. package/skills/ios-simulator-skill/scripts/appearance.py +385 -0
  123. package/skills/ios-simulator-skill/scripts/build_and_test.py +348 -0
  124. package/skills/ios-simulator-skill/scripts/clipboard.py +103 -0
  125. package/skills/ios-simulator-skill/scripts/common/__init__.py +61 -0
  126. package/skills/ios-simulator-skill/scripts/common/cache_utils.py +289 -0
  127. package/skills/ios-simulator-skill/scripts/common/device_utils.py +462 -0
  128. package/skills/ios-simulator-skill/scripts/common/env_config.py +35 -0
  129. package/skills/ios-simulator-skill/scripts/common/hang_pipeline.py +862 -0
  130. package/skills/ios-simulator-skill/scripts/common/hang_sessions.py +490 -0
  131. package/skills/ios-simulator-skill/scripts/common/idb_utils.py +180 -0
  132. package/skills/ios-simulator-skill/scripts/common/screenshot_utils.py +338 -0
  133. package/skills/ios-simulator-skill/scripts/container.py +668 -0
  134. package/skills/ios-simulator-skill/scripts/gesture.py +394 -0
  135. package/skills/ios-simulator-skill/scripts/hang_watcher.py +1533 -0
  136. package/skills/ios-simulator-skill/scripts/keyboard.py +391 -0
  137. package/skills/ios-simulator-skill/scripts/localization_audit.py +483 -0
  138. package/skills/ios-simulator-skill/scripts/location.py +467 -0
  139. package/skills/ios-simulator-skill/scripts/log_monitor.py +493 -0
  140. package/skills/ios-simulator-skill/scripts/model_inspector.py +645 -0
  141. package/skills/ios-simulator-skill/scripts/navigator.py +461 -0
  142. package/skills/ios-simulator-skill/scripts/privacy_manager.py +310 -0
  143. package/skills/ios-simulator-skill/scripts/push_notification.py +240 -0
  144. package/skills/ios-simulator-skill/scripts/screen_mapper.py +296 -0
  145. package/skills/ios-simulator-skill/scripts/sim_health_check.sh +245 -0
  146. package/skills/ios-simulator-skill/scripts/sim_list.py +299 -0
  147. package/skills/ios-simulator-skill/scripts/simctl_boot.py +312 -0
  148. package/skills/ios-simulator-skill/scripts/simctl_create.py +316 -0
  149. package/skills/ios-simulator-skill/scripts/simctl_delete.py +357 -0
  150. package/skills/ios-simulator-skill/scripts/simctl_erase.py +351 -0
  151. package/skills/ios-simulator-skill/scripts/simctl_shutdown.py +290 -0
  152. package/skills/ios-simulator-skill/scripts/simulator_selector.py +375 -0
  153. package/skills/ios-simulator-skill/scripts/status_bar.py +250 -0
  154. package/skills/ios-simulator-skill/scripts/test_recorder.py +323 -0
  155. package/skills/ios-simulator-skill/scripts/visual_diff.py +235 -0
  156. package/skills/ios-simulator-skill/scripts/xcode/__init__.py +13 -0
  157. package/skills/ios-simulator-skill/scripts/xcode/builder.py +397 -0
  158. package/skills/ios-simulator-skill/scripts/xcode/cache.py +204 -0
  159. package/skills/ios-simulator-skill/scripts/xcode/config.py +178 -0
  160. package/skills/ios-simulator-skill/scripts/xcode/reporter.py +343 -0
  161. package/skills/ios-simulator-skill/scripts/xcode/xcresult.py +451 -0
  162. package/skills/ios-visual-qa-strategist/SKILL.md +111 -0
  163. package/skills/ios-visual-qa-strategist/agents/openai.yaml +4 -0
  164. package/skills/ios-visual-qa-strategist/references/ios-tool-selection.md +61 -0
  165. package/skills/ios-visual-qa-strategist/references/minimal-capture-policy.md +56 -0
  166. package/skills/ios-visual-qa-strategist/references/visual-reasoning-heuristics.md +53 -0
  167. package/skills/orchestrator/SKILL.md +0 -20
  168. package/skills/persistent-storage/SKILL.md +55 -0
  169. package/skills/short-maker/SKILL.md +23 -0
  170. package/skills/short-maker/scripts/effects.js +56 -0
  171. package/skills/short-maker/scripts/shortmaker-bridge.js +332 -0
  172. package/skills/short-maker/scripts/videomix.js +601 -0
  173. package/skills/short-maker/templates/hyperframes/cinematic-character.template.html +172 -0
  174. package/skills/short-maker/templates/hyperframes/index.template.html +194 -0
  175. package/skills/smali-to-kotlin/SKILL.md +128 -0
  176. package/skills/smali-to-kotlin/examples/getting-started/tech-stack.md +58 -0
  177. package/skills/smali-to-kotlin/examples/pipeline/data-ui-parity.md +118 -0
  178. package/skills/smali-to-kotlin/examples/pipeline/scanner-and-bootstrap.md +106 -0
  179. package/skills/smali-to-kotlin/library-patterns.md +189 -0
  180. package/skills/smali-to-kotlin/phase-0-discovery.md +128 -0
  181. package/skills/smali-to-kotlin/phase-1-architecture.md +166 -0
  182. package/skills/smali-to-kotlin/phase-2-blueprint-ui.md +347 -0
  183. package/skills/smali-to-kotlin/phase-2-blueprint.md +228 -0
  184. package/skills/smali-to-kotlin/phase-3-build.md +248 -0
  185. package/skills/smali-to-kotlin/phase-3-logic-build.md +268 -0
  186. package/skills/smali-to-kotlin/smali-reading-guide.md +310 -0
  187. package/skills/smali-to-kotlin/templates/app-map.md +101 -0
  188. package/skills/smali-to-kotlin/templates/architecture.md +142 -0
  189. package/skills/smali-to-kotlin/templates/blueprint.md +145 -0
  190. package/skills/spec-gate/SKILL.md +6 -2
  191. package/skills/symphony-enforcer/SKILL.md +8 -0
  192. package/skills/symphony-enforcer/examples/mindful-stop.md +2 -0
  193. package/skills/symphony-enforcer/examples/three-phase.md +16 -0
  194. package/skills/symphony-enforcer/examples/trigger-points.md +7 -1
  195. package/skills/unity-game-development/SKILL.md +231 -0
  196. package/skills/video-edit/SKILL.md +36 -0
  197. package/skills/video-edit/scripts/video_edit.py +324 -0
  198. package/templates/project-identity/android.json +2 -2
  199. package/templates/project-identity/backend-nestjs.json +2 -2
  200. package/templates/project-identity/expo.json +2 -2
  201. package/templates/project-identity/ios.json +2 -2
  202. package/templates/project-identity/web-nextjs.json +2 -2
  203. package/templates/setup-mapping.json +48 -0
  204. package/templates/specs/design-template.md +161 -71
  205. package/templates/specs/requirements-template.md +65 -133
  206. package/templates/specs/task-spec-template.xml +3 -0
  207. package/workflows/_uncategorized/critic.md +40 -0
  208. package/workflows/_uncategorized/git-rebase-flow.md +81 -0
  209. package/workflows/_uncategorized/image-gen.md +118 -0
  210. package/workflows/_uncategorized/multi-model-pipeline.md +60 -0
  211. package/workflows/_uncategorized/pixel-gen.md +86 -0
  212. package/workflows/_uncategorized/pixel-setup.md +90 -0
  213. package/workflows/_uncategorized/ponytail-review.md +59 -0
  214. package/workflows/_uncategorized/reverse-android-build.md +222 -0
  215. package/workflows/_uncategorized/reverse-android-design.md +139 -0
  216. package/workflows/_uncategorized/reverse-android-discover.md +150 -0
  217. package/workflows/_uncategorized/reverse-android-scan.md +158 -0
  218. package/workflows/_uncategorized/reverse-android.md +143 -0
  219. package/workflows/_uncategorized/reverse-ios-build.md +240 -0
  220. package/workflows/_uncategorized/reverse-ios-design.md +112 -0
  221. package/workflows/_uncategorized/reverse-ios-discover.md +120 -0
  222. package/workflows/_uncategorized/reverse-ios-scan.md +155 -0
  223. package/workflows/_uncategorized/reverse-ios.md +152 -0
  224. package/workflows/_uncategorized/safety-router.md +34 -0
  225. package/workflows/_uncategorized/teach.md +89 -0
  226. package/workflows/_uncategorized/verify-ui.md +53 -0
  227. package/workflows/_uncategorized/visualize-screenshots.md +34 -0
  228. package/workflows/ads/ads-analyst.md +201 -0
  229. package/workflows/ads/ads-audit.md +106 -0
  230. package/workflows/ads/ads-optimize.md +97 -0
  231. package/workflows/ads/ads-targeting.md +241 -0
  232. package/workflows/ads/adsExpert.md +160 -0
  233. package/workflows/ads/smali-ads-config.md +400 -0
  234. package/workflows/ads/smali-ads-flow.md +331 -0
  235. package/workflows/ads/smali-ads-interstitial.md +377 -0
  236. package/workflows/ads/smali-ads-native.md +382 -0
  237. package/workflows/context/teach.md +89 -0
  238. package/workflows/gitnexus.md +8 -8
  239. package/workflows/lifecycle/brainstorm.md +43 -0
  240. package/workflows/lifecycle/code.md +5 -0
  241. package/workflows/lifecycle/init.md +23 -5
  242. package/workflows/lifecycle/multi-model-pipeline.md +60 -0
  243. package/workflows/quality/ponytail-review.md +59 -0
  244. package/workflows/roles/critic.md +40 -0
  245. package/workflows/roles/safety-router.md +34 -0
@@ -0,0 +1,176 @@
1
+ # Call Flow Analysis
2
+
3
+ Techniques for tracing execution flows in decompiled Android applications, from entry points down to network calls.
4
+
5
+ ## 1. Start from AndroidManifest.xml
6
+
7
+ The manifest declares all entry points. After decompilation, find it at:
8
+
9
+ ```
10
+ <output-dir>/resources/AndroidManifest.xml
11
+ ```
12
+
13
+ Key elements to look for:
14
+
15
+ ```bash
16
+ # Activities (UI screens)
17
+ grep -n 'android:name=.*Activity' resources/AndroidManifest.xml
18
+
19
+ # Services (background work)
20
+ grep -n 'android:name=.*Service' resources/AndroidManifest.xml
21
+
22
+ # BroadcastReceivers
23
+ grep -n '<receiver' resources/AndroidManifest.xml
24
+
25
+ # ContentProviders
26
+ grep -n '<provider' resources/AndroidManifest.xml
27
+
28
+ # Launcher activity (main entry point)
29
+ grep -A5 'MAIN' resources/AndroidManifest.xml | grep 'android:name'
30
+ ```
31
+
32
+ ## 2. Follow the Android Lifecycle
33
+
34
+ Typical call chain from UI to network:
35
+
36
+ ```
37
+ Activity.onCreate()
38
+ → setContentView(R.layout.activity_main)
39
+ → findViewById() / View Binding
40
+ → button.setOnClickListener()
41
+ → onClick()
42
+ → viewModel.doSomething()
43
+ → repository.fetchData()
44
+ → apiService.getEndpoint()
45
+ → HTTP request
46
+ ```
47
+
48
+ Key lifecycle methods to search:
49
+
50
+ ```bash
51
+ grep -rn 'onCreate\|onResume\|onStart\|onViewCreated' sources/
52
+ ```
53
+
54
+ ## 3. Identify Click Handlers
55
+
56
+ User interactions trigger API calls. Common patterns:
57
+
58
+ ```bash
59
+ # XML onClick
60
+ grep -rn 'setOnClickListener\|onClick\|OnClickListener' sources/
61
+
62
+ # Data Binding
63
+ grep -rn '@BindingAdapter\|android:onClick' sources/ resources/
64
+
65
+ # Navigation actions
66
+ grep -rn 'findNavController\|NavController\|navigate(' sources/
67
+ ```
68
+
69
+ ## 4. Application Class Initialization
70
+
71
+ The `Application` subclass initializes global singletons (HTTP clients, DI frameworks, analytics):
72
+
73
+ ```bash
74
+ # Find Application subclass
75
+ grep -rn 'extends Application\|: Application()' sources/
76
+
77
+ # Check onCreate for initialization
78
+ # Then read the class to see what gets configured at startup
79
+ ```
80
+
81
+ Look for:
82
+ - Retrofit/OkHttp client setup
83
+ - Dagger/Hilt component initialization
84
+ - Firebase/analytics initialization
85
+ - Base URL configuration
86
+
87
+ ## 5. Dependency Injection (Dagger / Hilt)
88
+
89
+ Modern Android apps use DI. Trace bindings to find implementations:
90
+
91
+ ```bash
92
+ # Hilt modules
93
+ grep -rn '@Module\|@InstallIn\|@Provides\|@Binds' sources/
94
+
95
+ # Hilt entry points
96
+ grep -rn '@HiltAndroidApp\|@AndroidEntryPoint\|@HiltViewModel' sources/
97
+
98
+ # Dagger components
99
+ grep -rn '@Component\|@Subcomponent' sources/
100
+
101
+ # Injected fields
102
+ grep -rn '@Inject' sources/
103
+ ```
104
+
105
+ To trace a call flow through DI:
106
+ 1. Find where an interface is used (e.g., `ApiService` injected into a repository)
107
+ 2. Find the `@Provides` or `@Binds` method that creates the implementation
108
+ 3. Follow the implementation to the actual HTTP call
109
+
110
+ ## 6. Find Constants and Configuration
111
+
112
+ Hardcoded values are rarely obfuscated:
113
+
114
+ ```bash
115
+ # Base URLs
116
+ grep -rni 'BASE_URL\|API_URL\|SERVER_URL\|HOST' sources/
117
+
118
+ # API keys
119
+ grep -rni 'API_KEY\|CLIENT_ID\|APP_KEY\|SECRET' sources/
120
+
121
+ # BuildConfig values
122
+ grep -rn 'BuildConfig\.' sources/
123
+
124
+ # SharedPreferences keys (runtime config)
125
+ grep -rn 'getSharedPreferences\|getString(\|putString(' sources/
126
+ ```
127
+
128
+ ## 7. Navigating Obfuscated Code
129
+
130
+ When code is obfuscated (ProGuard/R8):
131
+
132
+ ### What gets obfuscated
133
+ - Class names → `a`, `b`, `c`
134
+ - Method names → `a()`, `b()`, `c()`
135
+ - Field names → `f1234a`, `f1235b`
136
+
137
+ ### What does NOT get obfuscated
138
+ - **String literals** — URLs, keys, error messages remain readable
139
+ - **Android framework classes** — `Activity`, `Fragment`, `Intent` keep their names
140
+ - **Library public APIs** — Retrofit annotations, OkHttp builders retain names
141
+ - **AndroidManifest entries** — Activity/Service names must be real
142
+
143
+ ### Strategy for obfuscated code
144
+
145
+ 1. **Start from strings**: Search for URLs, error messages, and known constants
146
+ 2. **Start from framework classes**: Activities and Fragments are named in the manifest
147
+ 3. **Follow library calls**: Retrofit `@GET`/`@POST` annotations are readable even when the interface class name is obfuscated
148
+ 4. **Use `--deobf`**: jadx can generate readable replacement names
149
+ 5. **Cross-reference**: If `class a` calls `Retrofit.create(b.class)`, then `b` is a Retrofit service interface
150
+
151
+ ## 8. Tracing a Complete Call Flow: Example
152
+
153
+ Goal: Find how login works in an obfuscated app.
154
+
155
+ ```
156
+ 1. grep for "login" in strings → find "auth/login" URL in class `c.a.b.d`
157
+ 2. Class `c.a.b.d` has @POST("auth/login") → it's a Retrofit interface
158
+ 3. grep for `c.a.b.d` usage → class `c.a.b.f` calls it (the repository)
159
+ 4. grep for `c.a.b.f` usage → class `c.a.a.g` calls it (the ViewModel)
160
+ 5. grep for `c.a.a.g` usage → `LoginActivity` has a field of this type
161
+ 6. Read LoginActivity.onCreate() → sets click listener → calls ViewModel method
162
+ ```
163
+
164
+ Result: `LoginActivity → ViewModel → Repository → Retrofit @POST("auth/login")`
165
+
166
+ ## 9. Tools and Commands Summary
167
+
168
+ | Goal | Command |
169
+ |---|---|
170
+ | Find entry points | `grep 'android:name' resources/AndroidManifest.xml` |
171
+ | Find lifecycle methods | `grep -rn 'onCreate\|onResume' sources/` |
172
+ | Find click handlers | `grep -rn 'setOnClickListener\|onClick' sources/` |
173
+ | Find DI bindings | `grep -rn '@Provides\|@Binds\|@Inject' sources/` |
174
+ | Find constants | `grep -rni 'BASE_URL\|API_KEY' sources/` |
175
+ | Find usages of a class | `grep -rn 'ClassName' sources/` |
176
+ | Follow a string | `grep -rn '"some text"' sources/` |
@@ -0,0 +1,115 @@
1
+ # Fernflower / Vineflower CLI Reference
2
+
3
+ Fernflower is the JetBrains analytical Java decompiler. [Vineflower](https://github.com/Vineflower/vineflower) is the actively maintained community fork with better output quality and published releases. They share the same CLI interface.
4
+
5
+ ## When to Use Fernflower vs jadx
6
+
7
+ | Scenario | Recommended |
8
+ |---|---|
9
+ | APK with resources needed | jadx |
10
+ | Standard Java JAR/library | Fernflower |
11
+ | jadx output has warnings/errors on specific classes | Fernflower on those classes |
12
+ | Complex lambdas, generics, streams | Fernflower |
13
+ | Large APK (>50MB), quick overview | jadx |
14
+ | Obfuscated Android app | jadx first, Fernflower on problem areas |
15
+ | Both decompilers available | Use `--engine both` and compare |
16
+
17
+ ## Basic Usage
18
+
19
+ ```bash
20
+ java -jar fernflower.jar [options] <source>... <destination>
21
+ ```
22
+
23
+ - `<source>` — JAR file, class file, or directory containing class files
24
+ - `<destination>` — output directory
25
+
26
+ For a JAR input, Fernflower produces a JAR in the destination containing `.java` source files. Extract it with `unzip` to browse the sources.
27
+
28
+ ## Key Options
29
+
30
+ Options use the format `-<key>=<value>`. Boolean options: `1` = enabled, `0` = disabled.
31
+
32
+ | Option | Default | Description |
33
+ |---|---|---|
34
+ | `-dgs=1` | 0 | Decompile generic signatures (recommended) |
35
+ | `-ren=1` | 0 | Rename obfuscated identifiers |
36
+ | `-mpm=60` | 0 | Max seconds per method — prevents hangs (recommended) |
37
+ | `-hes=0` | 1 | Show empty super() calls |
38
+ | `-hdc=0` | 1 | Show empty default constructors |
39
+ | `-udv=1` | 1 | Use debug variable names if available |
40
+ | `-ump=1` | 1 | Use debug parameter names if available |
41
+ | `-lit=1` | 0 | Output numeric literals as-is |
42
+ | `-asc=1` | 0 | Encode non-ASCII as unicode escapes |
43
+ | `-lac=1` | 0 | Decompile lambdas as anonymous classes |
44
+ | `-log=WARN` | INFO | Reduce output verbosity |
45
+ | `-e=<lib>` | — | Add library for context (not decompiled, improves type resolution) |
46
+
47
+ ## Recommended Presets
48
+
49
+ ### General use
50
+
51
+ ```bash
52
+ java -jar fernflower.jar -dgs=1 -mpm=60 input.jar output/
53
+ ```
54
+
55
+ ### Obfuscated code
56
+
57
+ ```bash
58
+ java -jar fernflower.jar -dgs=1 -ren=1 -mpm=60 input.jar output/
59
+ ```
60
+
61
+ ### Maximum detail
62
+
63
+ ```bash
64
+ java -jar fernflower.jar -dgs=1 -hes=0 -hdc=0 -mpm=60 input.jar output/
65
+ ```
66
+
67
+ ### With Android SDK context (better type resolution)
68
+
69
+ ```bash
70
+ java -jar fernflower.jar -dgs=1 -mpm=60 -e=$ANDROID_HOME/platforms/android-34/android.jar input.jar output/
71
+ ```
72
+
73
+ ## Working with APK Files
74
+
75
+ Fernflower cannot read APK/DEX files directly. Use dex2jar first:
76
+
77
+ ```bash
78
+ # Step 1: Convert DEX to JAR
79
+ d2j-dex2jar -f -o app-converted.jar app.apk
80
+
81
+ # Step 2: Decompile with Fernflower
82
+ java -jar fernflower.jar -dgs=1 -mpm=60 app-converted.jar output/
83
+
84
+ # Step 3: Extract the resulting source JAR
85
+ unzip -o output/app-converted.jar -d output/sources/
86
+ ```
87
+
88
+ The `decompile.sh --engine fernflower` script automates these steps.
89
+
90
+ ## Supported Input Formats
91
+
92
+ | Format | Direct support | Via dex2jar |
93
+ |---|---|---|
94
+ | `.jar` | Yes | — |
95
+ | `.class` | Yes | — |
96
+ | `.zip` (with classes) | Yes | — |
97
+ | `.apk` | No | Yes |
98
+ | `.dex` | No | Yes |
99
+ | `.aar` | No | Yes |
100
+
101
+ ## Output Format
102
+
103
+ - **JAR input** → Produces `<destination>/<input-name>.jar` containing `.java` files
104
+ - **Class file input** → Produces `.java` files directly in the destination
105
+ - **No resource decoding** — Fernflower only produces Java source, never XML/resources
106
+
107
+ ## Fernflower vs Vineflower
108
+
109
+ Vineflower is the recommended fork. Improvements over upstream Fernflower:
110
+
111
+ - Published releases on GitHub and Maven Central
112
+ - Better handling of modern Java (records, sealed classes, pattern matching)
113
+ - More accurate lambda and switch expression decompilation
114
+ - Active bug fixes and community maintenance
115
+ - Same CLI interface — drop-in replacement
@@ -0,0 +1,116 @@
1
+ # jadx CLI Reference
2
+
3
+ ## Basic Usage
4
+
5
+ ```bash
6
+ jadx [options] <input-file>
7
+ ```
8
+
9
+ Input can be an `.apk`, `.jar`, `.aar`, `.dex`, or `.zip` file.
10
+
11
+ ## Key Options
12
+
13
+ | Option | Description |
14
+ |---|---|
15
+ | `-d <dir>` | Output directory for decompiled sources |
16
+ | `--deobf` | Enable deobfuscation — renames obfuscated classes/methods to readable names |
17
+ | `--show-bad-code` | Show partially decompiled code instead of error comments |
18
+ | `--no-res` | Skip resource decoding — faster when you only need code |
19
+ | `--no-src` | Skip source decompilation — only decode resources |
20
+ | `--export-gradle` | Generate a Gradle project structure (useful for importing into IDE) |
21
+ | `-e` | Same as `--export-gradle` |
22
+ | `--threads-count <N>` | Number of processing threads (default: CPU count) |
23
+ | `-Xmx<size>` | Set maximum Java heap (e.g., `-Xmx4g` for large APKs) |
24
+
25
+ ## Decompiling Different File Types
26
+
27
+ ### APK (Android Application Package)
28
+
29
+ ```bash
30
+ jadx -d output-dir app.apk
31
+ ```
32
+
33
+ Produces:
34
+ - `output-dir/sources/` — Decompiled Java source files
35
+ - `output-dir/resources/` — Decoded resources (AndroidManifest.xml, layouts, drawables, etc.)
36
+
37
+ ### JAR (Java Archive)
38
+
39
+ ```bash
40
+ jadx -d output-dir library.jar
41
+ ```
42
+
43
+ Useful for analyzing third-party libraries bundled within an APK.
44
+
45
+ ### AAR (Android Archive)
46
+
47
+ ```bash
48
+ jadx -d output-dir library.aar
49
+ ```
50
+
51
+ AAR files contain both compiled code and Android resources. jadx handles them directly.
52
+
53
+ ## Handling Obfuscated Code
54
+
55
+ Apps built with ProGuard or R8 produce obfuscated bytecode with single-letter class and method names.
56
+
57
+ ### Strategies
58
+
59
+ 1. **Use `--deobf`** to generate readable replacement names:
60
+ ```bash
61
+ jadx --deobf -d output-dir app.apk
62
+ ```
63
+ jadx creates a mapping file at `output-dir/deobf-mapping.txt` that maps original obfuscated names to generated names.
64
+
65
+ 2. **Use the ProGuard mapping file** if available (sometimes shipped in the APK under `assets/` or obtainable from build artifacts):
66
+ ```bash
67
+ jadx --deobf-map mapping.txt -d output-dir app.apk
68
+ ```
69
+
70
+ 3. **Focus on string constants and API calls** rather than class names when navigating obfuscated code. URL strings, annotation values, and library classes are not obfuscated.
71
+
72
+ ## jadx-gui
73
+
74
+ For interactive exploration, use the GUI version:
75
+
76
+ ```bash
77
+ jadx-gui app.apk
78
+ ```
79
+
80
+ Features:
81
+ - Full-text search across all decompiled sources
82
+ - Click-through navigation (jump to definition)
83
+ - Deobfuscation with live renaming
84
+ - Smali view alongside Java
85
+
86
+ jadx-gui is included in the same distribution as the CLI tool.
87
+
88
+ ## Common Workflows
89
+
90
+ ### Code-only decompilation (fastest)
91
+
92
+ ```bash
93
+ jadx --no-res --show-bad-code -d output app.apk
94
+ ```
95
+
96
+ ### Full decompilation with deobfuscation
97
+
98
+ ```bash
99
+ jadx --deobf --show-bad-code -d output app.apk
100
+ ```
101
+
102
+ ### Export as Gradle project for IDE import
103
+
104
+ ```bash
105
+ jadx -e -d output app.apk
106
+ # Then open output/ in Android Studio or IntelliJ
107
+ ```
108
+
109
+ ### Decompile a specific DEX from a multi-dex APK
110
+
111
+ Extract the APK (it's a ZIP), then target individual DEX files:
112
+
113
+ ```bash
114
+ unzip app.apk -d extracted/
115
+ jadx -d output extracted/classes2.dex
116
+ ```
@@ -0,0 +1,221 @@
1
+ # Setup Guide: Dependencies for Android Reverse Engineering
2
+
3
+ ## Java JDK 17+
4
+
5
+ jadx requires Java 17 or later.
6
+
7
+ ### Ubuntu / Debian
8
+
9
+ ```bash
10
+ sudo apt update
11
+ sudo apt install openjdk-17-jdk
12
+ ```
13
+
14
+ ### Fedora
15
+
16
+ ```bash
17
+ sudo dnf install java-17-openjdk-devel
18
+ ```
19
+
20
+ ### Arch Linux
21
+
22
+ ```bash
23
+ sudo pacman -S jdk17-openjdk
24
+ ```
25
+
26
+ ### macOS (Homebrew)
27
+
28
+ ```bash
29
+ brew install openjdk@17
30
+ ```
31
+
32
+ After installation on macOS, follow the symlink instructions printed by Homebrew, or add to your shell profile:
33
+
34
+ ```bash
35
+ export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"
36
+ ```
37
+
38
+ ### Verify
39
+
40
+ ```bash
41
+ java -version
42
+ # Should show version 17.x or higher
43
+ ```
44
+
45
+ ---
46
+
47
+ ## jadx
48
+
49
+ jadx is the Java decompiler used to convert APK/JAR/AAR files to readable Java source.
50
+
51
+ ### Option 1: GitHub Releases (recommended)
52
+
53
+ 1. Go to <https://github.com/skylot/jadx/releases/latest>
54
+ 2. Download the `jadx-<version>.zip` file (not the source archive)
55
+ 3. Extract and add to PATH:
56
+
57
+ ```bash
58
+ unzip jadx-*.zip -d ~/jadx
59
+ export PATH="$HOME/jadx/bin:$PATH"
60
+ # Add the export line to your ~/.bashrc or ~/.zshrc for persistence
61
+ ```
62
+
63
+ ### Option 2: Homebrew (macOS / Linux)
64
+
65
+ ```bash
66
+ brew install jadx
67
+ ```
68
+
69
+ ### Option 3: Build from source
70
+
71
+ ```bash
72
+ git clone https://github.com/skylot/jadx.git
73
+ cd jadx
74
+ ./gradlew dist
75
+ # Binaries will be in build/jadx/bin/
76
+ export PATH="$(pwd)/build/jadx/bin:$PATH"
77
+ ```
78
+
79
+ ### Verify
80
+
81
+ ```bash
82
+ jadx --version
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Fernflower / Vineflower (optional, recommended)
88
+
89
+ Fernflower is the JetBrains Java decompiler. It produces better output than jadx on complex Java constructs, lambdas, and generics. [Vineflower](https://github.com/Vineflower/vineflower) is the actively maintained community fork with published releases — prefer it over upstream Fernflower.
90
+
91
+ ### Option 1: Vineflower from GitHub Releases (recommended)
92
+
93
+ 1. Go to <https://github.com/Vineflower/vineflower/releases/latest>
94
+ 2. Download `vineflower-<version>.jar`
95
+ 3. Place it and set the environment variable:
96
+
97
+ ```bash
98
+ mkdir -p ~/vineflower
99
+ mv vineflower-*.jar ~/vineflower/vineflower.jar
100
+ export FERNFLOWER_JAR_PATH="$HOME/vineflower/vineflower.jar"
101
+ # Add the export to ~/.bashrc or ~/.zshrc for persistence
102
+ ```
103
+
104
+ ### Option 2: Build Fernflower from source
105
+
106
+ ```bash
107
+ git clone https://github.com/JetBrains/fernflower.git
108
+ cd fernflower
109
+ ./gradlew jar
110
+ # Produces: build/libs/fernflower.jar
111
+ export FERNFLOWER_JAR_PATH="$(pwd)/build/libs/fernflower.jar"
112
+ ```
113
+
114
+ ### Option 3: Homebrew (Vineflower)
115
+
116
+ ```bash
117
+ brew install vineflower
118
+ ```
119
+
120
+ ### Verify
121
+
122
+ ```bash
123
+ java -jar "$FERNFLOWER_JAR_PATH" --version
124
+ ```
125
+
126
+ > **Note**: Fernflower only works on JVM bytecode (JAR, class files). For APK/DEX files, you also need **dex2jar** (see below) as an intermediate conversion step.
127
+
128
+ ---
129
+
130
+ ## dex2jar (optional, needed for Fernflower on APK files)
131
+
132
+ Converts Android DEX bytecode to standard Java JAR files.
133
+
134
+ ### GitHub Releases
135
+
136
+ 1. Go to <https://github.com/pxb1988/dex2jar/releases/latest>
137
+ 2. Download and extract:
138
+
139
+ ```bash
140
+ unzip dex-tools-*.zip -d ~/dex2jar
141
+ export PATH="$HOME/dex2jar:$PATH"
142
+ ```
143
+
144
+ ### Homebrew
145
+
146
+ ```bash
147
+ brew install dex2jar
148
+ ```
149
+
150
+ ### Verify
151
+
152
+ ```bash
153
+ d2j-dex2jar --help
154
+ ```
155
+
156
+ ### Usage
157
+
158
+ ```bash
159
+ # Convert APK (or DEX) to JAR
160
+ d2j-dex2jar -f -o output.jar app.apk
161
+
162
+ # Then decompile with Fernflower
163
+ java -jar vineflower.jar output.jar decompiled/
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Optional Tools
169
+
170
+ ### apktool
171
+
172
+ Useful for decoding resources (XML layouts, drawables) that jadx sometimes handles poorly.
173
+
174
+ ```bash
175
+ # Ubuntu/Debian
176
+ sudo apt install apktool
177
+
178
+ # macOS
179
+ brew install apktool
180
+
181
+ # Manual: https://apktool.org/docs/install
182
+ ```
183
+
184
+ ### adb (Android Debug Bridge)
185
+
186
+ Useful for pulling APKs directly from a connected Android device.
187
+
188
+ ```bash
189
+ # Ubuntu/Debian
190
+ sudo apt install adb
191
+
192
+ # macOS
193
+ brew install android-platform-tools
194
+ ```
195
+
196
+ Pull an APK from a device:
197
+
198
+ ```bash
199
+ # List installed packages
200
+ adb shell pm list packages | grep <keyword>
201
+
202
+ # Get APK path
203
+ adb shell pm path com.example.app
204
+
205
+ # Pull the APK
206
+ adb pull /data/app/com.example.app-xxxx/base.apk ./app.apk
207
+ ```
208
+
209
+ ---
210
+
211
+ ## Troubleshooting
212
+
213
+ | Problem | Solution |
214
+ |---|---|
215
+ | `jadx: command not found` | Ensure the jadx `bin/` directory is in your `$PATH` |
216
+ | `Error: Could not find or load main class` | Java is missing or wrong version — verify with `java -version` |
217
+ | jadx runs out of memory on large APKs | Increase heap: `jadx -Xmx4g -d output app.apk` or set `JAVA_OPTS="-Xmx4g"` |
218
+ | Decompiled code has many `// Error` comments | Try `--show-bad-code` to see partial output, or use `--deobf` for obfuscated apps |
219
+ | Fernflower hangs on a method | Use `-mpm=60` to set a 60-second timeout per method |
220
+ | Fernflower JAR not found | Set `FERNFLOWER_JAR_PATH` env variable to the full path of the JAR |
221
+ | dex2jar fails with `ZipException` | The APK may have a non-standard ZIP structure — try `jadx` instead |