feat(android): add mobile shell and Play internal-track workflow#21
feat(android): add mobile shell and Play internal-track workflow#21ScottShao wants to merge 5 commits into
Conversation
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThis PR establishes a complete Android Capacitor platform with automated build and Play Store deployment. It adds Gradle build infrastructure (SDK/library versions, plugin dependencies), configures the Android app manifest with launcher and deep-link entry points, defines UI resources and MainActivity, sets up Fastlane automation for signing and deployment, integrates a GitHub Actions workflow for testing and release, and configures VCS and dependency rules. ChangesAndroid Capacitor Platform & Release Pipeline
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
mobile/android/gradlew.bat (1)
1-95:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winNormalize this batch script to CRLF line endings.
LF-only endings can break label parsing/flow control on Windows
cmd.exein some environments; this is worth fixing before release.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@mobile/android/gradlew.bat` around lines 1 - 95, The batch script uses LF-only endings which can break Windows cmd label parsing; convert the file to use CRLF line endings (CR+LF) and re-commit so labels like :findJavaFromJavaHome, :execute, :fail and :mainEnd are on lines terminated with CRLF. Fix by saving the file with Windows (CRLF) EOL in your editor or run a tool (e.g., unix2dos/w2l) or set Git to enforce CRLF (core.eol and core.autocrlf) and re-commit the converted file, then verify the labels and flow control work in cmd.exe.
🧹 Nitpick comments (3)
mobile/package.json (1)
23-23: 💤 Low valueInconsistent version pinning strategy.
Runtime dependencies (lines 15-17) use exact version pins without
^, buttypescriptin devDependencies retains the^prefix. For consistency and reproducibility, consider applying the same pinning strategy across all dependencies.♻️ Apply consistent exact pinning
- "typescript": "^6.0.3" + "typescript": "5.7.2"(After correcting the TypeScript version.)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@mobile/package.json` at line 23, The devDependency "typescript" in package.json uses a caret range ("^6.0.3") which is inconsistent with the runtime dependencies that are exact-pinned; change the version string for "typescript" in devDependencies from "^6.0.3" to the exact pin "6.0.3" so pinning strategy is consistent across the manifest (locate the "typescript" entry in package.json to update).mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (1)
4-4: ⚡ Quick winUse
@drawablefor adaptive icon foreground per Android guidelinesAndroid's official guidelines recommend placing adaptive icon foreground and background assets in drawable directories, not mipmaps. Change the reference from
@mipmap/ic_launcher_foregroundto@drawable/ic_launcher_foregroundto align with best practices and use the existingdrawable-v24/ic_launcher_foreground.xmlresource.Proposed fix
- <foreground android:drawable="@mipmap/ic_launcher_foreground"/> + <foreground android:drawable="@drawable/ic_launcher_foreground"/>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml` at line 4, The adaptive icon foreground reference currently uses the mipmap resource; update the <foreground android:drawable="@mipmap/ic_launcher_foreground"/> entry to reference the drawable resource instead (use "@drawable/ic_launcher_foreground") so the adaptive icon uses the existing drawable-v24/ic_launcher_foreground.xml per Android guidelines; locate the <foreground> element in ic_launcher_round.xml and replace the `@mipmap` reference with `@drawable`..github/workflows/android-build.yml (1)
99-112: ⚡ Quick winAvoid double-building the AAB on workflow_dispatch.
When
workflow_dispatchis triggered, the "Build signed AAB" step (lines 99-112) runs and callsfastlane android build. Then the "Deploy to Play internal track" step (lines 121-135) runs and callsfastlane android deploy, which internally calls the build lane again (Fastfile line 21). This builds the AAB twice, wasting CI time.Skip the "Build signed AAB" step when deploying to avoid the redundant build.
♻️ Proposed fix to skip redundant build on deploy
- name: Build signed AAB + if: github.event_name != 'workflow_dispatch' env: ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/android-build.yml around lines 99 - 112, The "Build signed AAB" step is causing a redundant build because the "Deploy to Play internal track" step calls fastlane android deploy which rebuilds; update the "Build signed AAB" step to skip when the workflow is manually dispatched so the deploy lane can perform the build: add an if condition (e.g. if: github.event_name != 'workflow_dispatch') to the "Build signed AAB" job/step so it does not run on workflow_dispatch, leaving the fastlane lanes (android build and android deploy) and the Fastfile (deploy lane that calls build on line 21) unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/android-build.yml:
- Around line 87-97: The current "Materialize signing secrets" step requires
both ANDROID_KEYSTORE_BASE64 and GOOGLE_PLAY_JSON_KEY but the signed build path
only needs the keystore; update the step so it only creates
android/release.keystore when ANDROID_KEYSTORE_BASE64 is set (do not fail or
require GOOGLE_PLAY_JSON_KEY), and move or add a separate step that materializes
fastlane/google-play-key.json only for deployment runs (e.g., gated to
workflow_dispatch or the deploy job) by checking GOOGLE_PLAY_JSON_KEY before
creating the file; refer to the step name "Materialize signing secrets" and the
env vars ANDROID_KEYSTORE_BASE64 and GOOGLE_PLAY_JSON_KEY when locating and
changing the workflow.
In `@mobile/android/.gitignore`:
- Around line 64-65: Uncomment the ignored filename entry so the Firebase config
is actually excluded: in the .gitignore remove the comment character from the
line containing google-services.json (the literal "google-services.json" entry)
so that git will ignore that file and prevent committing Firebase API keys and
project identifiers.
- Around line 56-58: Uncomment the keystore ignore patterns so signing keys are
not checked into git: remove the leading # from the lines containing "*.jks" and
"*.keystore" in the .gitignore (the commented patterns shown as "#*.jks" and
"#*.keystore") to ensure those files are ignored by default and cannot be
committed.
In `@mobile/android/app/build.gradle`:
- Around line 13-17: The aaptOptions block is currently nested inside
defaultConfig which breaks the Gradle DSL; move the entire aaptOptions {...}
(including ignoreAssetsPattern =
'!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~') out of
defaultConfig and place it directly under the android { ... } scope (sibling to
defaultConfig), preserving the same contents and formatting so aaptOptions is
defined at top-level inside the android block.
In `@mobile/android/app/src/main/res/xml/file_paths.xml`:
- Line 3: The FileProvider mapping exposes all external storage via the element
`<external-path name="my_images" path=".">`; replace it with an app-scoped
mapping (use `<external-files-path>` targeting a specific subdirectory such as
"Pictures" or your app's folder) and narrow the cache mapping (`<cache-path
path=".">`) to a specific cache subdirectory instead of "." so only app-specific
external-files and cache locations are exposed; update the entries in
file_paths.xml (referencing the existing `<external-path name="my_images"
path=".">` and the `<cache-path path=".">` elements) to use
`<external-files-path>` and a restricted `<cache-path>` with a concrete
subdirectory name.
In `@mobile/android/variables.gradle`:
- Around line 3-4: Update the targetSdkVersion to match compileSdkVersion by
changing targetSdkVersion from 34 to 36 (the variables named compileSdkVersion
and targetSdkVersion in this diff), and ensure the Android Gradle Plugin is
bumped to 8.9.0 or newer (update the AGP version in your buildscript/plugin
declaration, e.g., the com.android.tools.build:gradle entry) so
compileSdkVersion 36 is fully supported.
---
Outside diff comments:
In `@mobile/android/gradlew.bat`:
- Around line 1-95: The batch script uses LF-only endings which can break
Windows cmd label parsing; convert the file to use CRLF line endings (CR+LF) and
re-commit so labels like :findJavaFromJavaHome, :execute, :fail and :mainEnd are
on lines terminated with CRLF. Fix by saving the file with Windows (CRLF) EOL in
your editor or run a tool (e.g., unix2dos/w2l) or set Git to enforce CRLF
(core.eol and core.autocrlf) and re-commit the converted file, then verify the
labels and flow control work in cmd.exe.
---
Nitpick comments:
In @.github/workflows/android-build.yml:
- Around line 99-112: The "Build signed AAB" step is causing a redundant build
because the "Deploy to Play internal track" step calls fastlane android deploy
which rebuilds; update the "Build signed AAB" step to skip when the workflow is
manually dispatched so the deploy lane can perform the build: add an if
condition (e.g. if: github.event_name != 'workflow_dispatch') to the "Build
signed AAB" job/step so it does not run on workflow_dispatch, leaving the
fastlane lanes (android build and android deploy) and the Fastfile (deploy lane
that calls build on line 21) unchanged.
In `@mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml`:
- Line 4: The adaptive icon foreground reference currently uses the mipmap
resource; update the <foreground
android:drawable="@mipmap/ic_launcher_foreground"/> entry to reference the
drawable resource instead (use "@drawable/ic_launcher_foreground") so the
adaptive icon uses the existing drawable-v24/ic_launcher_foreground.xml per
Android guidelines; locate the <foreground> element in ic_launcher_round.xml and
replace the `@mipmap` reference with `@drawable`.
In `@mobile/package.json`:
- Line 23: The devDependency "typescript" in package.json uses a caret range
("^6.0.3") which is inconsistent with the runtime dependencies that are
exact-pinned; change the version string for "typescript" in devDependencies from
"^6.0.3" to the exact pin "6.0.3" so pinning strategy is consistent across the
manifest (locate the "typescript" entry in package.json to update).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e9d35cc5-f045-47f4-9e6d-6cf50c9f5d70
⛔ Files ignored due to path filters (28)
mobile/android/app/src/main/res/drawable-land-hdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-land-mdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-land-xhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-land-xxhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-land-xxxhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-port-hdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-port-mdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-port-xhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-port-xxhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable-port-xxxhdpi/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/drawable/splash.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngmobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngis excluded by!**/*.pngmobile/android/gradle/wrapper/gradle-wrapper.jaris excluded by!**/*.jarmobile/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (32)
.github/workflows/android-build.ymlmobile/android/.gitignoremobile/android/app/.gitignoremobile/android/app/build.gradlemobile/android/app/capacitor.build.gradlemobile/android/app/proguard-rules.promobile/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.javamobile/android/app/src/main/AndroidManifest.xmlmobile/android/app/src/main/assets/.gitkeepmobile/android/app/src/main/java/net/bawes/universe/MainActivity.javamobile/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xmlmobile/android/app/src/main/res/drawable/ic_launcher_background.xmlmobile/android/app/src/main/res/layout/activity_main.xmlmobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xmlmobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xmlmobile/android/app/src/main/res/values/ic_launcher_background.xmlmobile/android/app/src/main/res/values/strings.xmlmobile/android/app/src/main/res/values/styles.xmlmobile/android/app/src/main/res/xml/file_paths.xmlmobile/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.javamobile/android/build.gradlemobile/android/capacitor.settings.gradlemobile/android/gradle.propertiesmobile/android/gradle/wrapper/gradle-wrapper.propertiesmobile/android/gradlewmobile/android/gradlew.batmobile/android/settings.gradlemobile/android/variables.gradlemobile/fastlane/Appfilemobile/fastlane/Fastfilemobile/fastlane/google-play-key.json.examplemobile/package.json
| - name: Materialize signing secrets | ||
| env: | ||
| ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | ||
| GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }} | ||
| run: | | ||
| if [ -z "$ANDROID_KEYSTORE_BASE64" ] || [ -z "$GOOGLE_PLAY_JSON_KEY" ]; then | ||
| echo "Missing Android release secrets; skipping signed bundle build." | ||
| exit 0 | ||
| fi | ||
| printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 --decode > android/release.keystore | ||
| printf '%s' "$GOOGLE_PLAY_JSON_KEY" > fastlane/google-play-key.json |
There was a problem hiding this comment.
Decouple build secrets from deployment secrets.
The "Materialize signing secrets" step requires both ANDROID_KEYSTORE_BASE64 and GOOGLE_PLAY_JSON_KEY, but the build step (lines 99-112) only needs the keystore and signing credentials, not the Play key. On push to universe (not PR, not workflow_dispatch), the workflow builds a signed AAB but doesn't deploy, so the Play key is unnecessary. This prevents build-only workflow runs when the Play key is unavailable.
Split the secret materialization: create the keystore unconditionally when ANDROID_KEYSTORE_BASE64 is present, and only materialize the Play key when deploying (on workflow_dispatch).
♻️ Proposed fix to separate build and deploy secrets
- - name: Materialize signing secrets
+ - name: Materialize keystore
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
- GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }}
run: |
- if [ -z "$ANDROID_KEYSTORE_BASE64" ] || [ -z "$GOOGLE_PLAY_JSON_KEY" ]; then
- echo "Missing Android release secrets; skipping signed bundle build."
+ if [ -z "$ANDROID_KEYSTORE_BASE64" ]; then
+ echo "Missing keystore; skipping signed bundle build."
exit 0
fi
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 --decode > android/release.keystore
+
+ - name: Materialize Play Store key
+ if: github.event_name == 'workflow_dispatch'
+ env:
+ GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }}
+ run: |
+ if [ -z "$GOOGLE_PLAY_JSON_KEY" ]; then
+ echo "Missing Play Store key; skipping deploy."
+ exit 0
+ fi
printf '%s' "$GOOGLE_PLAY_JSON_KEY" > fastlane/google-play-key.json🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/android-build.yml around lines 87 - 97, The current
"Materialize signing secrets" step requires both ANDROID_KEYSTORE_BASE64 and
GOOGLE_PLAY_JSON_KEY but the signed build path only needs the keystore; update
the step so it only creates android/release.keystore when
ANDROID_KEYSTORE_BASE64 is set (do not fail or require GOOGLE_PLAY_JSON_KEY),
and move or add a separate step that materializes fastlane/google-play-key.json
only for deployment runs (e.g., gated to workflow_dispatch or the deploy job) by
checking GOOGLE_PLAY_JSON_KEY before creating the file; refer to the step name
"Materialize signing secrets" and the env vars ANDROID_KEYSTORE_BASE64 and
GOOGLE_PLAY_JSON_KEY when locating and changing the workflow.
| compileSdkVersion = 36 | ||
| targetSdkVersion = 34 |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
For current Android Gradle Plugin releases, is compileSdkVersion 36fully supported, and are there known caveats whentargetSdkVersion remains 34?
💡 Result:
As of May 15, 2026, compileSdkVersion 36 is fully supported and is the current standard for Android development [1][2]. Using compileSdkVersion 36 while maintaining targetSdkVersion 34 is a technically valid and supported configuration [3][4]. Key considerations for this configuration include: 1. Separation of Concerns: compileSdkVersion determines the APIs available to your code at compile time, while targetSdkVersion determines the runtime behavior and system-enforced restrictions [3]. You can safely use newer APIs (compileSdkVersion 36) without opting into the full suite of Android 16 runtime behavior changes (targetSdkVersion 34) [3][4]. 2. Dependency Requirements: Many modern AndroidX and third-party libraries are increasingly requiring a higher compileSdkVersion to build [5][6]. If your project dependencies have been updated to versions that require API 36, you must set your compileSdkVersion to at least 36 to resolve build-time errors, regardless of your targetSdkVersion [3][6]. 3. Caveats and Risks: - While this configuration is supported, it is a temporary measure. Google Play policies require new apps and updates to target recent API levels [7][8]. As of 2026, Google Play requires apps to target API 36 [7]. Maintaining targetSdkVersion 34 will eventually prevent you from publishing updates to the Google Play Store [7][8]. - You will not benefit from the latest Android 16 platform features, security enhancements, or UI/UX requirements (such as mandatory edge-to-edge display) until you update your targetSdkVersion [9][10]. - Ensure your Android Gradle Plugin (AGP) is updated to a version compatible with API 36 (e.g., AGP 8.9.0 or higher) to avoid build issues [2][11]. In summary, while you can use compileSdkVersion 36 with targetSdkVersion 34 to satisfy build-time dependencies, you should plan to migrate your targetSdkVersion to 36 to remain compliant with Google Play Store policies and ensure your app functions correctly on newer Android versions [7][9].
Citations:
- 1: https://developer.android.com/tools/releases/platforms
- 2: https://developer.android.com/about/versions/16/setup-sdk
- 3: https://stackoverflow.com/questions/79417687/how-can-i-resolve-the-compilesdk-34-issue-with-dependencies-requiring-compilesdk
- 4: https://stackoverflow.com/questions/79284308/upgrading-targetsdk-from-34-to-35-necessary-to-check-entire-code
- 5: Android 16 / API 36 compatibility – compileSdk, targetSdk, and 16 KB page alignment dji-sdk/Mobile-SDK-Android-V5#753
- 6: Support compiling with Android SDK 36 (default in Flutter 3.35) objectbox/objectbox-dart#755
- 7: https://mobileapp.wiki/en/store-policies/android-api-level-2026
- 8: https://developer.android.com/google/play/requirements/target-sdk
- 9: https://hoangvmh.medium.com/android-sdk-36-migration-what-actually-breaks-and-how-to-fix-it-6981d8d73957
- 10: https://www.androidpolice.com/android-17-fixes-foldables/
- 11: https://medium.com/@lanltn/flutter-upgrade-android-sdk-from-35-to-36-510af2cd502f
Update targetSdkVersion to 36 to comply with Google Play Store requirements.
While compileSdkVersion 36 with targetSdkVersion 34 is technically supported, Google Play now requires apps to target API 36. Maintaining targetSdkVersion 34 will prevent publishing updates to the Google Play Store. Additionally, ensure your Android Gradle Plugin is version 8.9.0 or higher for full compatibility with compileSdkVersion 36.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@mobile/android/variables.gradle` around lines 3 - 4, Update the
targetSdkVersion to match compileSdkVersion by changing targetSdkVersion from 34
to 36 (the variables named compileSdkVersion and targetSdkVersion in this diff),
and ensure the Android Gradle Plugin is bumped to 8.9.0 or newer (update the AGP
version in your buildscript/plugin declaration, e.g., the
com.android.tools.build:gradle entry) so compileSdkVersion 36 is fully
supported.
|
Pushed follow-up commit
Re-verified locally after the patch:
|
|
Pushed follow-up commit Change:
Why:
Re-verified locally:
|
|
Pushed follow-up commit Change:
Re-verified locally:
|
Closes #4
Related to #1
/claim #1
Summary
mobile/android/with thenet.bawes.universeapp id,bawes://callbackdeep-link intent filter, hardware acceleration, and landscape-only launch behaviormipmap-*density using the repo's existing 512px Universe favicon assetmobile/fastlane/fortest, signedbuild, and Play internal-trackdeploy.github/workflows/android-build.ymlto run Android unit tests on PRs and perform signed bundle/deploy steps on non-PR runs when the required secrets are configuredmobile/package.jsondependency pins sonpm ciandnpx cap sync androidsucceed for this slice, and addtypescriptbecause the repo usescapacitor.config.tsmobile/package-lock.jsonagainst the public npm registry so CI and outside contributors do not inherit my local private registry settingsapp/src/main/assets/in git with a placeholder so CI can regenerate the ignored Capacitor config files duringcap syncAcceptance criteria
mobile/android/applicationIdtonet.bawes.universeminSdkVersionto 26 andtargetSdkVersionto 34mipmap-*foldersbawes://callbackdeep-link handlingbuild,deploy, andtestlanes.github/workflows/android-build.ymlVerification
cd mobile && npm install --package-lock-only --registry=https://registry.npmjs.orgcd mobile && npm ci --registry=https://registry.npmjs.orgcd mobile && npx cap sync androidcd mobile && ruby -c fastlane/Fastfile && ruby -c fastlane/Appfilecd mobile/android && sips -g pixelWidth -g pixelHeight app/src/main/res/mipmap-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/ic_launcher.pnggit diff --checkEnvironment limitations
cd mobile/android && ./gradlew testcurrently stops locally because this machine does not have an Android SDK configured (ANDROID_HOME/local.propertiesmissing)cd mobile && bundle installis blocked locally by the host Ruby/Xcode toolchain (system Ruby 2.6 missing the headers/build environment Fastlane's native gems expect)Demo
Repo-hosted verification walkthrough GIF: