capture-lite icon indicating copy to clipboard operation
capture-lite copied to clipboard

Add Android 16 KB page size support for Android 15+ compatibility

Open Copilot opened this issue 5 months ago • 0 comments

This PR implements comprehensive 16 KB memory page size support as required by Google Play for apps targeting Android 15+ (SDK 35+). Without this support, the app would be rejected by Google Play Console when targeting modern Android versions.

Changes Made

Build Configuration

  • Gradle Properties: Added android.enablePageSizeSupport=true to enable 16 KB page size support
  • Memory Optimization: Increased JVM heap size from 1536m to 2048m and enabled R8 full mode for better memory handling
  • NDK Configuration: Added explicit ABI filters (arm64-v8a, armeabi-v7a, x86, x86_64) to ensure proper native library alignment
  • Packaging Options: Disabled legacy packaging (useLegacyPackaging = false) to ensure proper 16 KB alignment

Build Tools

  • Confirmed Android Gradle Plugin 8.9.1 is used, which supports 16 KB page sizes
  • Added comprehensive comments explaining the 16 KB support configuration

Documentation & Verification

  • ANDROID_16KB_SUPPORT.md: Detailed implementation guide with background, verification steps, and testing recommendations
  • verify-16kb-support.sh: Automated verification script that checks all 16 KB support configurations
  • README.md: Updated Android development section with 16 KB support information

Technical Impact

The implementation ensures compatibility with devices using 16 KB memory pages instead of the traditional 4 KB pages. This is crucial for:

  • ARM64 devices with 16 KB page size configuration
  • Future Android devices optimized for performance
  • Google Play Console compliance for Android 15+ apps

Verification

The changes can be verified using the included script:

./verify-16kb-support.sh

After building and uploading to Google Play Console, the app bundle explorer will show "16 KB page size support" as enabled.

No Breaking Changes

All modifications are build-time configurations that don't affect app functionality. The app continues to work on devices with traditional 4 KB page sizes while gaining compatibility with 16 KB page size devices.

Fixes #3349.

[!WARNING]

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dl.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -Xmx1536m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.11.1-all/2qik7nd48slq1ooc2496ixf4i/gradle-8.11.1/lib/gradle-daemon-main-8.11.1.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.11.1-all/2qik7nd48slq1ooc2496ixf4i/gradle-8.11.1/lib/agents/gradle-instrumentation-agent-8.11.1.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.11.1 (dns block)
  • npm.pqina.nl
    • Triggering command: npm install (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot avatar Sep 11 '25 04:09 Copilot