@leejungkiin/awkit 1.0.7 → 1.0.8
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.
- package/core/GEMINI.md.bak +168 -181
- package/package.json +2 -2
- package/schemas/brain-snapshot.json +167 -0
- package/skills/CATALOG.md +70 -0
- package/skills/beads-manager/SKILL.md +20 -1
- package/skills/memory-sync/SKILL.md +20 -2
- package/skills/nm-memory-audit/SKILL.md +157 -0
- package/skills/nm-memory-evolution/SKILL.md +202 -0
- package/skills/nm-memory-intake/SKILL.md +135 -0
- package/skills/nm-memory-sync/SKILL.md +184 -0
- package/skills/orchestrator/SKILL.md +41 -50
- package/skills/schemas/brain-snapshot.json +167 -0
- package/skills/skills/nm-memory-audit/SKILL.md +157 -0
- package/skills/skills/nm-memory-evolution/SKILL.md +202 -0
- package/skills/skills/nm-memory-intake/SKILL.md +135 -0
- package/skills/skills/nm-memory-sync/SKILL.md +184 -0
- package/skills/smali-to-kotlin/SKILL.md +331 -85
- package/skills/smali-to-kotlin/phase-0-discovery.md +93 -94
- package/skills/smali-to-kotlin/phase-1-architecture.md +67 -58
- package/skills/smali-to-kotlin/phase-2-blueprint.md +228 -0
- package/skills/smali-to-kotlin/phase-3-build.md +248 -0
- package/skills/smali-to-kotlin/templates/app-map.md +101 -0
- package/skills/smali-to-kotlin/templates/architecture.md +142 -0
- package/skills/smali-to-kotlin/templates/blueprint.md +145 -0
- package/skills/smali-to-swift/SKILL.md +532 -91
- package/skills/smali-to-swift/phase-0-discovery.md +101 -118
- package/skills/smali-to-swift/phase-1-architecture.md +62 -67
- package/skills/smali-to-swift/phase-2-blueprint.md +173 -0
- package/skills/smali-to-swift/phase-3-build.md +257 -0
- package/skills/smali-to-swift/templates/app-map.md +82 -0
- package/skills/smali-to-swift/templates/architecture.md +97 -0
- package/skills/smali-to-swift/templates/blueprint.md +82 -0
- package/skills/workflows/nm-import.md +73 -0
- package/skills/workflows/nm-recall.md +67 -0
- package/skills/workflows/nm-snapshot.md +69 -0
- package/workflows/_uncategorized/nm-import.md +73 -0
- package/workflows/_uncategorized/nm-recall.md +67 -0
- package/workflows/_uncategorized/nm-snapshot.md +69 -0
- package/workflows/_uncategorized/reverse-android-build.md +222 -0
- package/workflows/_uncategorized/reverse-android-design.md +139 -0
- package/workflows/_uncategorized/reverse-android-discover.md +150 -0
- package/workflows/_uncategorized/reverse-android-scan.md +158 -0
- package/workflows/_uncategorized/reverse-android.md +143 -0
- package/workflows/_uncategorized/reverse-ios-build.md +240 -0
- package/workflows/_uncategorized/reverse-ios-design.md +112 -0
- package/workflows/_uncategorized/reverse-ios-discover.md +120 -0
- package/workflows/_uncategorized/reverse-ios-scan.md +155 -0
- package/workflows/_uncategorized/reverse-ios.md +152 -0
- package/skills/adaptive-language/SKILL.md +0 -189
- package/skills/ambient-brain/SKILL.md +0 -314
- package/skills/ambient-brain/brain-router.md +0 -185
- package/skills/ambient-brain/brain-templates.md +0 -201
- package/skills/context-help/SKILL.md +0 -180
- package/skills/error-translator/SKILL.md +0 -153
- package/skills/session-restore/SKILL.md +0 -240
|
@@ -3,10 +3,9 @@ name: smali-to-kotlin
|
|
|
3
3
|
description: >-
|
|
4
4
|
Android Reverse Engineering specialist. Reads Apktool output (Smali, resources, manifest)
|
|
5
5
|
and rebuilds the app from scratch using modern Kotlin + Jetpack Compose + Clean Architecture.
|
|
6
|
-
UI-First approach: design and approve UI visuals before coding logic.
|
|
7
6
|
Includes library detection to reuse existing dependencies.
|
|
8
7
|
author: Antigravity Team
|
|
9
|
-
version:
|
|
8
|
+
version: 1.0.0
|
|
10
9
|
trigger: conditional
|
|
11
10
|
activation_keywords:
|
|
12
11
|
- "/reverse-android"
|
|
@@ -19,14 +18,14 @@ activation_keywords:
|
|
|
19
18
|
- "smali to kotlin"
|
|
20
19
|
priority: high
|
|
21
20
|
platform: android
|
|
22
|
-
|
|
21
|
+
extensible_to:
|
|
22
|
+
- ios (separate skill: smali-to-swift — planned)
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
# 🔧 Smali-to-Kotlin Skill
|
|
25
|
+
# 🔧 Smali-to-Kotlin Skill
|
|
26
26
|
|
|
27
27
|
> **Purpose:** Transform decompiled Android APK (Apktool output) into a modern Kotlin app with Jetpack Compose, Clean Architecture, and MVVM.
|
|
28
|
-
> **Philosophy:** "
|
|
29
|
-
> **Key Change (v2):** UI is designed and approved BEFORE coding any business logic.
|
|
28
|
+
> **Philosophy:** "Read Smali to understand WHAT and WHY → Write Kotlin for HOW."
|
|
30
29
|
|
|
31
30
|
---
|
|
32
31
|
|
|
@@ -39,9 +38,9 @@ sibling_skill: smali-to-swift (iOS counterpart)
|
|
|
39
38
|
| Detect & reuse third-party libraries | Crack/bypass security |
|
|
40
39
|
| Extract only needed resources (on-demand) | Mass-copy resources blindly |
|
|
41
40
|
| Set up Clean Architecture project structure | Handle iOS reverse engineering |
|
|
42
|
-
|
|
|
41
|
+
| Scan APK libraries for package reuse | Deploy to Play Store |
|
|
43
42
|
|
|
44
|
-
→ For iOS reverse engineering →
|
|
43
|
+
→ For iOS reverse engineering → future skill: `smali-to-swift`
|
|
45
44
|
→ After rebuild complete → use `/test` or `/deploy` workflows
|
|
46
45
|
|
|
47
46
|
---
|
|
@@ -54,7 +53,7 @@ When this skill is active, the agent becomes:
|
|
|
54
53
|
> - Master at reading Smali bytecode and obfuscated Java
|
|
55
54
|
> - Fluent in Clean Architecture + MVVM + Jetpack Compose
|
|
56
55
|
> - Knows when to reuse vs rewrite third-party dependencies
|
|
57
|
-
> - Enforces
|
|
56
|
+
> - Enforces resource-on-demand principle (zero bloat)
|
|
58
57
|
|
|
59
58
|
---
|
|
60
59
|
|
|
@@ -98,7 +97,7 @@ always_replace:
|
|
|
98
97
|
ListView/GridView: "LazyColumn/LazyGrid (Compose)"
|
|
99
98
|
findViewById: "Compose state"
|
|
100
99
|
Gson: "Kotlin Serialization (kotlinx.serialization)"
|
|
101
|
-
|
|
100
|
+
|
|
102
101
|
evaluate_before_replacing:
|
|
103
102
|
Glide: "Keep if deeply integrated, otherwise → Coil"
|
|
104
103
|
RxJava: "Migrate to Coroutines + Flow (gradual)"
|
|
@@ -116,58 +115,312 @@ keep_as_is:
|
|
|
116
115
|
|
|
117
116
|
---
|
|
118
117
|
|
|
119
|
-
## 📋 EXECUTION PIPELINE (
|
|
118
|
+
## 📋 EXECUTION PIPELINE (6 Steps)
|
|
119
|
+
|
|
120
|
+
> **Rule:** Always complete one step fully before moving to the next.
|
|
121
|
+
> **Rule:** After each step, create a checkpoint summary for the user.
|
|
122
|
+
|
|
123
|
+
### Step 0: Library Scanner (PRE-STEP — Always First) 🔍
|
|
124
|
+
|
|
125
|
+
**Purpose:** Scan the APK structure to identify all third-party libraries before any coding.
|
|
126
|
+
|
|
127
|
+
**Process:**
|
|
128
|
+
1. **Scan `smali/` directories** for package patterns:
|
|
129
|
+
```
|
|
130
|
+
smali/com/google/ → Google SDKs
|
|
131
|
+
smali/com/facebook/ → Facebook SDK
|
|
132
|
+
smali/com/squareup/ → OkHttp, Retrofit, Picasso
|
|
133
|
+
smali/io/reactivex/ → RxJava
|
|
134
|
+
smali/org/greenrobot/ → EventBus
|
|
135
|
+
smali/com/bumptech/ → Glide
|
|
136
|
+
smali/com/airbnb/ → Lottie
|
|
137
|
+
smali/androidx/ → AndroidX (baseline)
|
|
138
|
+
smali/com/jakewharton/ → Butterknife, Timber
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
2. **Check `lib/` for native libraries (.so)**:
|
|
142
|
+
```
|
|
143
|
+
lib/arm64-v8a/*.so → 64-bit native libs
|
|
144
|
+
lib/armeabi-v7a/*.so → 32-bit native libs
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
3. **Check `assets/` for embedded resources:**
|
|
148
|
+
- ML models (.tflite, .onnx)
|
|
149
|
+
- WebView HTML/JS bundles
|
|
150
|
+
- Config files (JSON, XML)
|
|
151
|
+
|
|
152
|
+
4. **Output: Library Report**
|
|
153
|
+
```markdown
|
|
154
|
+
## 📦 Library Detection Report
|
|
155
|
+
|
|
156
|
+
### ✅ Can Reuse (add to build.gradle)
|
|
157
|
+
| Library | Detected Package | Latest Version | Action |
|
|
158
|
+
|---------|-----------------|----------------|--------|
|
|
159
|
+
| Retrofit | com.squareup.retrofit2 | 2.9.0 | Add dependency |
|
|
160
|
+
| OkHttp | com.squareup.okhttp3 | 4.12.0 | Add dependency |
|
|
161
|
+
| Glide | com.bumptech.glide | 4.16.0 | Evaluate → Coil? |
|
|
162
|
+
|
|
163
|
+
### 🔄 Must Replace (legacy)
|
|
164
|
+
| Old Library | Detected Package | Replacement |
|
|
165
|
+
|-------------|-----------------|-------------|
|
|
166
|
+
| Volley | com.android.volley | Retrofit |
|
|
167
|
+
| AsyncTask | android.os.AsyncTask | Coroutines |
|
|
168
|
+
|
|
169
|
+
### 📱 Native (.so) — Keep As-Is
|
|
170
|
+
| File | Architecture | Notes |
|
|
171
|
+
|------|-------------|-------|
|
|
172
|
+
| libfoo.so | arm64-v8a | Need JNI bridge |
|
|
173
|
+
|
|
174
|
+
### ❓ Unknown (investigate)
|
|
175
|
+
| Package | Path | Possible Library |
|
|
176
|
+
|---------|------|-----------------|
|
|
177
|
+
| com.xyz.abc | smali/com/xyz/abc | Custom? |
|
|
178
|
+
```
|
|
120
179
|
|
|
121
|
-
|
|
122
|
-
> **Rule:** Always complete one phase fully before moving to the next.
|
|
123
|
-
> **Rule:** UI must be approved before coding logic.
|
|
180
|
+
---
|
|
124
181
|
|
|
182
|
+
### Step 1: AndroidManifest Analysis & Project Bootstrap 📄
|
|
183
|
+
|
|
184
|
+
**Input:** User provides `AndroidManifest.xml` from Apktool output.
|
|
185
|
+
|
|
186
|
+
**Tasks:**
|
|
187
|
+
1. Extract Application ID and original package name
|
|
188
|
+
2. List all required permissions (group by category: network, storage, camera, etc.)
|
|
189
|
+
3. Identify entry points:
|
|
190
|
+
- `Application` class (custom init logic?)
|
|
191
|
+
- `SplashActivity` / Launcher Activity
|
|
192
|
+
- `MainActivity`
|
|
193
|
+
4. Map all components:
|
|
194
|
+
- Activities → future Compose screens
|
|
195
|
+
- Services → WorkManager candidates?
|
|
196
|
+
- BroadcastReceivers → keep or replace with Flow?
|
|
197
|
+
- ContentProviders → keep or replace with Room?
|
|
198
|
+
5. Detect intent-filters for deep links
|
|
199
|
+
6. **Output:** Propose Clean Architecture project structure
|
|
200
|
+
|
|
201
|
+
**Project Structure Template:**
|
|
125
202
|
```
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
203
|
+
app/
|
|
204
|
+
├── src/main/
|
|
205
|
+
│ ├── java/com/package/app/
|
|
206
|
+
│ │ ├── App.kt # Application class
|
|
207
|
+
│ │ ├── di/ # Hilt modules
|
|
208
|
+
│ │ │ ├── AppModule.kt
|
|
209
|
+
│ │ │ ├── NetworkModule.kt
|
|
210
|
+
│ │ │ └── DatabaseModule.kt
|
|
211
|
+
│ │ ├── data/ # Data Layer
|
|
212
|
+
│ │ │ ├── remote/
|
|
213
|
+
│ │ │ │ ├── api/ # Retrofit interfaces
|
|
214
|
+
│ │ │ │ ├── dto/ # Data Transfer Objects
|
|
215
|
+
│ │ │ │ └── interceptor/ # OkHttp interceptors
|
|
216
|
+
│ │ │ ├── local/
|
|
217
|
+
│ │ │ │ ├── db/ # Room database
|
|
218
|
+
│ │ │ │ ├── dao/ # Room DAOs
|
|
219
|
+
│ │ │ │ ├── entity/ # Room entities
|
|
220
|
+
│ │ │ │ └── datastore/ # DataStore preferences
|
|
221
|
+
│ │ │ └── repository/ # Repository implementations
|
|
222
|
+
│ │ ├── domain/ # Domain Layer
|
|
223
|
+
│ │ │ ├── model/ # Business models
|
|
224
|
+
│ │ │ ├── repository/ # Repository interfaces
|
|
225
|
+
│ │ │ └── usecase/ # Use cases
|
|
226
|
+
│ │ ├── presentation/ # Presentation Layer
|
|
227
|
+
│ │ │ ├── navigation/ # NavGraph + Routes
|
|
228
|
+
│ │ │ ├── theme/ # Material 3 Theme
|
|
229
|
+
│ │ │ ├── components/ # Reusable Compose components
|
|
230
|
+
│ │ │ └── screens/ # Feature screens
|
|
231
|
+
│ │ │ ├── splash/
|
|
232
|
+
│ │ │ │ ├── SplashScreen.kt
|
|
233
|
+
│ │ │ │ └── SplashViewModel.kt
|
|
234
|
+
│ │ │ ├── home/
|
|
235
|
+
│ │ │ │ ├── HomeScreen.kt
|
|
236
|
+
│ │ │ │ └── HomeViewModel.kt
|
|
237
|
+
│ │ │ └── ...
|
|
238
|
+
│ │ └── util/ # Extensions, helpers
|
|
239
|
+
│ ├── res/ # Only needed resources
|
|
240
|
+
│ └── AndroidManifest.xml # Clean manifest
|
|
241
|
+
├── build.gradle.kts
|
|
242
|
+
└── proguard-rules.pro
|
|
135
243
|
```
|
|
136
244
|
|
|
137
|
-
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
### Step 2: Data Layer Reconstruction 💾
|
|
248
|
+
|
|
249
|
+
**Input:** User provides Smali/Java code for API endpoints, JSON models, database queries.
|
|
250
|
+
|
|
251
|
+
**Tasks:**
|
|
252
|
+
1. **Models:** Convert POJO/Model Smali → Kotlin `data class`
|
|
253
|
+
- Use `@Serializable` (kotlinx.serialization) or `@JsonClass` (Moshi)
|
|
254
|
+
- Preserve JSON field names with `@SerialName`
|
|
255
|
+
2. **API Layer:**
|
|
256
|
+
- Extract base URL, endpoints, headers from Smali
|
|
257
|
+
- Create Retrofit `@GET/@POST` interfaces
|
|
258
|
+
- Identify auth patterns (token, API key, custom headers)
|
|
259
|
+
3. **Local Storage:**
|
|
260
|
+
- SQLite queries → Room entities + DAOs
|
|
261
|
+
- SharedPreferences keys → DataStore schema
|
|
262
|
+
4. **Repository:**
|
|
263
|
+
- Create interface in `domain/repository/`
|
|
264
|
+
- Implement in `data/repository/`
|
|
265
|
+
- Use Flow for reactive data streams
|
|
266
|
+
|
|
267
|
+
**Smali Reading Tips:**
|
|
268
|
+
```
|
|
269
|
+
# Finding API base URL:
|
|
270
|
+
Look for: const-string → "https://" or "http://"
|
|
271
|
+
Look for: .field → BASE_URL or API_URL
|
|
138
272
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
- `phase-2-blueprint-ui.md` — Contracts + UI visual shell + parity check
|
|
143
|
-
- `phase-3-logic-build.md` — Domain, data, DI, ViewModel, wire UI↔logic
|
|
273
|
+
# Finding endpoints:
|
|
274
|
+
Look for: StringBuilder + append patterns
|
|
275
|
+
Look for: Annotation patterns (@GET, @POST in obfuscated form)
|
|
144
276
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- `templates/architecture.md` — Architecture Blueprint template
|
|
150
|
-
- `templates/blueprint.md` — Feature Blueprint template
|
|
277
|
+
# Finding JSON parsing:
|
|
278
|
+
Look for: JSONObject, JSONArray usage
|
|
279
|
+
Look for: Gson.fromJson / TypeToken patterns
|
|
280
|
+
```
|
|
151
281
|
|
|
152
282
|
---
|
|
153
283
|
|
|
154
|
-
|
|
284
|
+
### Step 3: Core Logic & Utils Reconstruction 🧮
|
|
155
285
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
286
|
+
**Input:** User provides Smali for encryption, hashing, time formatting, custom utils.
|
|
287
|
+
|
|
288
|
+
**Tasks:**
|
|
289
|
+
1. Translate mathematical/encryption logic from Smali → Kotlin
|
|
290
|
+
- Preserve exact input/output signatures (critical for server compatibility)
|
|
291
|
+
- Use `object` for stateless utils, extension functions for type-specific
|
|
292
|
+
2. Map special encoding patterns:
|
|
293
|
+
- MD5/SHA hashing → `MessageDigest`
|
|
294
|
+
- AES/DES encryption → `javax.crypto.Cipher`
|
|
295
|
+
- Base64 → `android.util.Base64` or `java.util.Base64`
|
|
296
|
+
- Custom obfuscation → reverse engineer step-by-step
|
|
297
|
+
3. **Verification:** Create unit tests that compare output with original app
|
|
298
|
+
|
|
299
|
+
**Critical Rule:**
|
|
300
|
+
> ⚠️ Encryption and hashing functions MUST produce identical output to the original app.
|
|
301
|
+
> Any mismatch will break server communication. Always unit test with known input/output pairs.
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### Step 4: UI & ViewModel Reconstruction (Per Screen) 🎨
|
|
306
|
+
|
|
307
|
+
**Input:** User provides `layout_xxx.xml` + corresponding Smali for Activity/Fragment.
|
|
308
|
+
|
|
309
|
+
**Tasks:**
|
|
310
|
+
1. **Resource Extraction (On-Demand):**
|
|
311
|
+
- List ONLY the drawables, strings, colors, dimens used in this specific screen
|
|
312
|
+
- User copies only those resources to the new project
|
|
313
|
+
- Clean up namespace references in resources
|
|
314
|
+
|
|
315
|
+
2. **Compose Migration:**
|
|
316
|
+
- Convert XML layout → Jetpack Compose composables
|
|
317
|
+
- Map View attributes → Compose modifiers
|
|
318
|
+
- Common mappings:
|
|
319
|
+
```
|
|
320
|
+
LinearLayout (vertical) → Column
|
|
321
|
+
LinearLayout (horizontal) → Row
|
|
322
|
+
FrameLayout → Box
|
|
323
|
+
RelativeLayout → Box with alignment / ConstraintLayout
|
|
324
|
+
RecyclerView → LazyColumn / LazyGrid
|
|
325
|
+
ScrollView → verticalScroll modifier
|
|
326
|
+
ImageView → Image / AsyncImage (Coil)
|
|
327
|
+
TextView → Text
|
|
328
|
+
EditText → TextField / OutlinedTextField
|
|
329
|
+
Button → Button / TextButton / OutlinedButton
|
|
330
|
+
ProgressBar → CircularProgressIndicator / LinearProgressIndicator
|
|
331
|
+
CardView → Card (Material 3)
|
|
332
|
+
Toolbar/ActionBar → TopAppBar (Material 3)
|
|
333
|
+
BottomNavigationView → NavigationBar (Material 3)
|
|
334
|
+
TabLayout + ViewPager → TabRow + HorizontalPager
|
|
335
|
+
SwipeRefreshLayout → pullRefresh modifier
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
3. **ViewModel Creation:**
|
|
339
|
+
- Read Smali logic flow: when API calls happen, loading states, form validation
|
|
340
|
+
- Create sealed class for UI state:
|
|
341
|
+
```kotlin
|
|
342
|
+
sealed interface ScreenUiState {
|
|
343
|
+
data object Loading : ScreenUiState
|
|
344
|
+
data class Success(val data: ScreenData) : ScreenUiState
|
|
345
|
+
data class Error(val message: String) : ScreenUiState
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
- Expose via `StateFlow` from ViewModel
|
|
349
|
+
- Handle one-time events via `SharedFlow` (navigation, snackbar, toast)
|
|
350
|
+
|
|
351
|
+
4. **Screen Composable:**
|
|
352
|
+
- Collect state from ViewModel
|
|
353
|
+
- Implement Material 3 theming
|
|
354
|
+
- Handle navigation via Navigation Compose
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
### Step 5: Third-party SDK & Native Library Integration 📦
|
|
359
|
+
|
|
360
|
+
**Input:** User provides JNI libs list and SDK detection from Step 0.
|
|
361
|
+
|
|
362
|
+
**Tasks:**
|
|
363
|
+
1. **Native Libraries (.so):**
|
|
364
|
+
- Keep .so files in `jniLibs/` directory
|
|
365
|
+
- Declare `external fun` in Kotlin matching C/C++ signatures
|
|
366
|
+
- Use `System.loadLibrary("name")` in companion object or init block
|
|
367
|
+
- Document JNI method signatures
|
|
368
|
+
|
|
369
|
+
2. **SDKs (from Library Report):**
|
|
370
|
+
- Add latest stable versions to `build.gradle.kts`
|
|
371
|
+
- Initialize in `Application` class using modern patterns:
|
|
372
|
+
```kotlin
|
|
373
|
+
@HiltAndroidApp
|
|
374
|
+
class App : Application() {
|
|
375
|
+
override fun onCreate() {
|
|
376
|
+
super.onCreate()
|
|
377
|
+
// Firebase (auto-init via manifest, or manual)
|
|
378
|
+
// Timber
|
|
379
|
+
if (BuildConfig.DEBUG) {
|
|
380
|
+
Timber.plant(Timber.DebugTree())
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
- Replace deprecated SDK API calls with current documentation
|
|
386
|
+
|
|
387
|
+
3. **build.gradle.kts Setup:**
|
|
388
|
+
- Use Version Catalogs (`libs.versions.toml`) for dependency management
|
|
389
|
+
- Configure Compose compiler, Hilt plugin, KSP
|
|
390
|
+
- Set up proper minSdk, targetSdk, compileSdk
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
### Step 6: Parity Check & Quality Gate ✅
|
|
395
|
+
|
|
396
|
+
**Per-module checklist:**
|
|
397
|
+
1. **Branch Coverage:** Review all `if-else`, `switch/when`, `try-catch` paths from Smali
|
|
398
|
+
- List discovered branches as test cases
|
|
399
|
+
- Ask user to test each edge case
|
|
400
|
+
|
|
401
|
+
2. **API Parity:** Verify all API endpoints produce same request/response
|
|
402
|
+
- Compare headers, body format, encoding
|
|
403
|
+
- Test auth flow end-to-end
|
|
404
|
+
|
|
405
|
+
3. **Data Parity:** Verify local storage read/write matches original
|
|
406
|
+
- Migration path from old DB schema if user needs it
|
|
407
|
+
|
|
408
|
+
4. **UI Parity:** Compare screen-by-screen
|
|
409
|
+
- Layout matches (spacing, colors, interactions)
|
|
410
|
+
- Navigation flow matches
|
|
411
|
+
- Error states handled
|
|
412
|
+
|
|
413
|
+
5. **Performance Check:**
|
|
414
|
+
- ProGuard/R8 rules for release build
|
|
415
|
+
- No unnecessary allocations in Compose (stable/immutable)
|
|
416
|
+
- Proper coroutine scope management
|
|
166
417
|
|
|
167
418
|
---
|
|
168
419
|
|
|
169
420
|
## 🔄 WORKFLOW INTEGRATION
|
|
170
421
|
|
|
422
|
+
### With Other Skills/Workflows:
|
|
423
|
+
|
|
171
424
|
```yaml
|
|
172
425
|
triggers_from:
|
|
173
426
|
- "/reverse-android" workflow command
|
|
@@ -176,7 +429,7 @@ triggers_from:
|
|
|
176
429
|
delegates_to:
|
|
177
430
|
- "/test" — after parity check
|
|
178
431
|
- "/deploy" — when rebuild is complete
|
|
179
|
-
- beads-manager — auto-track progress per
|
|
432
|
+
- beads-manager — auto-track progress per step
|
|
180
433
|
|
|
181
434
|
works_with:
|
|
182
435
|
- memory-sync — saves decisions, patterns, solutions
|
|
@@ -184,21 +437,18 @@ works_with:
|
|
|
184
437
|
|
|
185
438
|
independent_from:
|
|
186
439
|
- brainstorm-agent
|
|
187
|
-
-
|
|
440
|
+
- ios-engineer (but shares design philosophy)
|
|
188
441
|
```
|
|
189
442
|
|
|
190
|
-
### Session State Tracking
|
|
443
|
+
### Session State Tracking:
|
|
191
444
|
|
|
192
445
|
```yaml
|
|
193
446
|
session_state:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
resources: extracted | pending
|
|
200
|
-
completed_features: ["Splash", "Login"]
|
|
201
|
-
pending_features: ["Home", "Settings"]
|
|
447
|
+
current_step: 0-6
|
|
448
|
+
current_screen: "HomeScreen" (for step 4 iterations)
|
|
449
|
+
library_report: generated | pending
|
|
450
|
+
completed_screens: ["SplashScreen", "LoginScreen"]
|
|
451
|
+
pending_screens: ["HomeScreen", "SettingsScreen"]
|
|
202
452
|
```
|
|
203
453
|
|
|
204
454
|
---
|
|
@@ -207,11 +457,8 @@ session_state:
|
|
|
207
457
|
|
|
208
458
|
```yaml
|
|
209
459
|
never_do:
|
|
210
|
-
- Copy all resources blindly from APK → only on-demand
|
|
211
|
-
-
|
|
212
|
-
- Code ViewModel before UI is approved → UI design might change
|
|
213
|
-
- Modify UI shell significantly in Phase 3 → only wire, don't redesign
|
|
214
|
-
- Use deprecated libraries → always use modern replacements
|
|
460
|
+
- Copy all resources blindly from APK → only on-demand
|
|
461
|
+
- Use deprecated libraries (AsyncTask, Volley) → always use modern replacements
|
|
215
462
|
- Skip library scanning step → always detect reusable packages first
|
|
216
463
|
- Modify encryption output → must match original exactly
|
|
217
464
|
- Create massive God Activity → split into Compose screens + ViewModels
|
|
@@ -219,12 +466,10 @@ never_do:
|
|
|
219
466
|
- Skip parity check → always verify against original behavior
|
|
220
467
|
|
|
221
468
|
always_do:
|
|
222
|
-
- Run Library Scanner (
|
|
223
|
-
- Extract resources BEFORE coding UI (2.7 → 2.8)
|
|
224
|
-
- Create @Preview for ALL states (normal, loading, error, empty)
|
|
225
|
-
- Get user approval on UI before coding logic
|
|
226
|
-
- Keep stateless composable for Preview even after wiring
|
|
469
|
+
- Run Library Scanner (Step 0) before any coding
|
|
227
470
|
- Present library report to user for approval
|
|
471
|
+
- Ask user to confirm each step's output before proceeding
|
|
472
|
+
- Create checkpoint summary after each step
|
|
228
473
|
- Unit test all encryption/hashing utils
|
|
229
474
|
- Use sealed classes for UI state
|
|
230
475
|
- Follow Clean Architecture layer separation strictly
|
|
@@ -234,42 +479,43 @@ always_do:
|
|
|
234
479
|
|
|
235
480
|
## 📊 CHECKPOINT TEMPLATE
|
|
236
481
|
|
|
237
|
-
After each
|
|
482
|
+
After each step, output:
|
|
238
483
|
|
|
239
484
|
```markdown
|
|
240
|
-
## ✅ [
|
|
485
|
+
## ✅ Step [N] Complete: [Step Name]
|
|
241
486
|
|
|
242
487
|
### What was done:
|
|
243
|
-
- [Summary]
|
|
488
|
+
- [Summary of actions]
|
|
244
489
|
|
|
245
490
|
### Files created:
|
|
246
|
-
- [List]
|
|
491
|
+
- [List of new files]
|
|
247
492
|
|
|
248
493
|
### Resources extracted:
|
|
249
|
-
- [
|
|
494
|
+
- [List of resources moved to new project]
|
|
250
495
|
|
|
251
496
|
### Decisions made:
|
|
252
|
-
- [Key decisions]
|
|
497
|
+
- [Key decisions documented]
|
|
253
498
|
|
|
254
|
-
### ⏭️ Next: [
|
|
499
|
+
### ⏭️ Next: Step [N+1] — [Step Name]
|
|
255
500
|
- [What user needs to provide]
|
|
501
|
+
- [What will be done]
|
|
256
502
|
```
|
|
257
503
|
|
|
258
504
|
---
|
|
259
505
|
|
|
260
|
-
## 🧩
|
|
261
|
-
|
|
262
|
-
This skill follows the same **4-phase pipeline** as `smali-to-swift`:
|
|
506
|
+
## 🧩 EXTENSIBILITY NOTE
|
|
263
507
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
508
|
+
This skill follows the **Platform RE Template Pattern**:
|
|
509
|
+
- Core workflow (6 steps) is transferable to other platforms
|
|
510
|
+
- Technology mappings are platform-specific (this file: Android)
|
|
511
|
+
- Future `smali-to-swift` skill will follow same structure with iOS tech stack:
|
|
512
|
+
- Smali → Swift
|
|
513
|
+
- Jetpack Compose → SwiftUI
|
|
514
|
+
- Room → Core Data / SwiftData
|
|
515
|
+
- Retrofit → URLSession / Alamofire
|
|
516
|
+
- Hilt → Swift DI patterns
|
|
271
517
|
|
|
272
518
|
---
|
|
273
519
|
|
|
274
|
-
*smali-to-kotlin
|
|
520
|
+
*smali-to-kotlin v1.0.0 — Android Reverse Engineering Skill for AWF*
|
|
275
521
|
*Created by Antigravity Team*
|