Maintain Android/native functionality for the metravel Expo app without regressing web behavior.
Install
mkdir -p .claude/skills/metravel-android-developer && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/14830" && unzip -o skill.zip -d .claude/skills/metravel-android-developer && rm skill.zipInstalls to .claude/skills/metravel-android-developer
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Implement and debug Android/native compatibility in the metravel Expo React Native app. Use when Codex needs an Android developer role for native crashes, platform-specific files, Expo native modules, Android navigation, push notifications, SecureStore, permissions, native map behavior, or web-first code leaking into the Android bundle.Key capabilities
- →Implement Android/native compatibility in React Native Expo apps
- →Debug native Android crashes from local builds
- →Manage platform-specific files like `.android.tsx`
- →Handle Expo native modules, permissions, and notifications
- →Ensure Android mobile UX matches mobile web behavior
How it works
The skill guides the implementation and debugging of Android-specific code paths in a React Native Expo project. It emphasizes isolating native fixes, maintaining web compatibility, and using local USB builds for verification.
Inputs & outputs
When to use metravel-android-developer
- →Fix native Android crashes
- →Implement Expo native modules
- →Debug native push notifications
About this skill
Metravel Android Developer
Use this skill for Android/native implementation and debugging. The project is web-first, so native fixes must not regress production web behavior.
Read first:
AGENTS.mddocs/RULES.mddocs/CODEX.mddocs/NATIVE_COMPAT_RULES.mddocs/DEVELOPMENT.mddocs/MANUAL_TEST_CASES.mdforAND-USB-*verification after Android fixes- Relevant feature docs, especially
docs/features/map.mdfor map work.
Scope
- Platform files:
.android.tsx,.native.tsx,.web.tsx, active adjacent.ios.tsxcontracts when shared context requires them, and narrowPlatform.OSgates. - Android/native runtime: Expo modules, permissions, notifications, SecureStore, image picker/media, sharing, WebBrowser, navigation, and native-only app startup.
- Native map behavior: keep web Leaflet code out of native bundles and native map/WebView code out of web bundles.
- Native crash triage from a local Android build and
adb logcat. - Android locale lifecycle:
expo-localization, versioned locale preference, cold restart, RU/BE/UK/PL/EN resources, Intl/plural behavior, and translated accessibility text.
Rules
- Do not fix native by changing shared web behavior. If structure, behavior, or dependencies diverge, split platform files and move shared logic into hooks/utils.
- Keep Android mobile UX visually and behaviorally identical to mobile web. Every Android change requires the same-flow mobile-web check, and every mobile-web change in shared code requires Android device verification. Platform files may solve native API differences, but must preserve the same layout, action order, hero proportions, and tap semantics.
- For map/place/travel-point surfaces, match the shared fullscreen point/place
template and the marker-vs-card tap contract documented in
docs/features/map.md. - A one-line property difference may use a local
Platform.OSgate; larger differences need platform-specific files. - Guard web APIs (
window,document,localStorage,navigator, DOM observers/events) inside effects/functions or move them to.webfiles. - Chain dynamic imports only through
Promise.resolve(import(...))when using.then,.catch,.finally, stored promises, or returned promises. - Keep external navigation inside
utils/externalLinks.tshelpers. - Follow
$metravel-i18n-guardrailsfor user-facing text. Shared/native copy uses the common resources; do not add Android-only hardcoded strings or manual locale formatting. - Do not print secrets from
.env*, EAS, Google Play, or device logs. - Do not edit
app.json,eas.json,plugins/**, or release scripts unless the user explicitly asks for build/config changes. - Android EAS/cloud builds and submits are disabled. Never run an EAS Android or
--platform allcommand. Local Android production/store work belongs to$metravel-google-play-operator. - Android verification requires a locally built app installed on the USB-connected phone. Do not substitute mobile web viewport, Expo web export, EAS preview/development/production build, or dev-client/export flow without explicit user approval.
Bug Intake
- Every real Android bug found during device QA must be created or updated on the shared task board in the current active sprint before implementation continues.
- Prefer the
ticket-boardMCP tools when available. If MCP/API returnsHTTP 401, refresh the staff token through.env.e2eusingdocs/TASK_BOARD_MCP.md, update.secrets/metravel-task-board.envwithout printing secrets, and retry. If MCP remains unavailable but.secrets/metravel-task-board.envexists, use the task board API without printing the token. - Use
area=front,status=todo,reporter=Codex Android QA, andassignee=metravel-android-developerfor newly confirmed Android app/frontend bugs. Do not usearea=android; keep Android context in the title, description, validation, and assignee. Createarea=backonly when evidence shows a backend/API/server defect. - Include device model, Android/API version, exact route, reproduction steps,
adb logcat/Metro evidence, acceptance criteria, likely files, validation, and blockers.
USB Local Build Smoke
Use this flow for Android testing over USB. The project is worked on from both Windows and macOS, so keep commands portable and provide both variants when documenting a workflow.
For QA coverage, pair this launch flow with docs/MANUAL_TEST_CASES.md AND-USB-* cases and e2e/maestro/ flows when available.
- Find
adb.- Windows PowerShell:
where.exe adb; fallback common local path:D:\metravel\tools\platform-tools\adb.exe. - macOS/zsh:
which adb; fallback common SDK path:$HOME/Library/Android/sdk/platform-tools/adb.
- Windows PowerShell:
- Verify the phone.
- Windows:
& 'D:\metravel\tools\platform-tools\adb.exe' devices -l - macOS:
adb devices -l - If status is
unauthorized, confirm the RSA debugging prompt on the phone.
- Windows:
- Check the operation gate before any build/install: no competing
gradlew,adb install,eas build,expo run:android, full/preflight/e2e, or shared build process for the same target. - Build and install locally.
- Windows PowerShell:
cd android .\gradlew.bat :app:installDebug - macOS/zsh:
cd android ./gradlew :app:installDebug
installDebugis unavailable, build then install the APK:cd android ./gradlew :app:assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk - Windows PowerShell:
- Launch the installed app and confirm it is the new build.
adb shell am force-stop by.metravel.app adb shell monkey -p by.metravel.app 1 - For deep-link checks, resolve the installed scheme before launch:
adb shell dumpsys package by.metravel.app | grep -E 'Scheme:|MainActivity' - Capture health evidence without leaking secrets:
In PowerShell, useadb logcat -c adb logcat -d -v time | grep -E "FATAL EXCEPTION|ReactNativeJS|AndroidRuntime|JSApplicationIllegalArgumentException|DevLauncher" adb shell uiautomator dump /sdcard/window.xml adb exec-out cat /sdcard/window.xmlSelect-Stringinstead ofgrep. - Use dev-client/Metro only if the user explicitly approves that exception. Record the exception in validation output; it is not the default Android QA route.
Validation
- Run the narrow native governance test when compatibility is touched:
npx jest __tests__/config/native-compat-governance.test.ts --runInBand
- For code changes, run the relevant targeted tests plus
npm run check:fastwhen the logical block is finished. - For locale or UI-copy changes, run
npm run test:i18nand verify language persistence plus the changed flow after a real app restart on the USB device. - If a shared file changed for native reasons, also verify desktop web and mobile
web with the same flow; clearly mark
verify pendingif an active surface is blocked. - Do not claim "works on Android" until a local build was installed on the USB phone and the relevant
AND-USB-*cases passed. Without local-build device evidence, reportverify pendingwith the exact build/install blocker.
Output Contract
Report:
- Android issue or native requirement
- Files changed
- Platform split or guard strategy
- Validation run
- Local Android build/install command, device verification status, and
AND-USB-*cases covered - Remaining blockers or risks
When not to use it
- →The task involves iOS-specific development
- →The task requires changes to shared web behavior that would regress production web
- →The task involves Android EAS/cloud builds or submits
Prerequisites
Limitations
- →Does not use Android EAS/cloud builds or submits
- →Requires local Android build and USB-connected phone for verification
- →Fixes must not regress production web behavior
How it compares
This skill provides specialized guidance for maintaining native Android compatibility within a web-first React Native Expo project, ensuring native fixes do not impact web behavior.
Compared to similar skills
metravel-android-developer side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| metravel-android-developer (this skill) | 0 | 1mo | Review | Advanced |
| react-native-best-practices | 5 | 2mo | Review | Advanced |
| react-native-architecture | 55 | 2mo | Review | Advanced |
| claude-mobile-ios-testing | 18 | 9mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by kelios
View all by kelios →You might also like
react-native-best-practices
callstackincubator
Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Applies to tasks involving Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, or debugging jank and frame drops.
react-native-architecture
wshobson
Build production React Native apps with Expo, navigation, native modules, offline sync, and cross-platform patterns. Use when developing mobile apps, implementing native integrations, or architecting React Native projects.
claude-mobile-ios-testing
krzemienski
Use when testing iOS apps on simulator, capturing screenshots for validation gates, automating UI testing with expo-mcp and xc-mcp, or verifying visual correctness - combines expo-mcp autonomous testing (React Native level) with xc-mcp simulator management (iOS level)
react-native-design
wshobson
Master React Native styling, navigation, and Reanimated animations for cross-platform mobile development. Use when building React Native apps, implementing navigation patterns, or creating performant animations.
vercel-react-native-skills
vercel-labs
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
agent-spec-mobile-react-native
ruvnet
Agent skill for spec-mobile-react-native - invoke with $agent-spec-mobile-react-native