8 Commits

Author SHA1 Message Date
02ac8eda6b Fix 16KB alignment with correct -P 16 flag
The -p flag only does 4KB alignment, not 16KB.
Correct command: zipalign -P 16 (uppercase P with page size)

Result: All 28/28 native .so libraries properly 16KB-aligned
Verified: Alignment preserved through apksigner v2/v3 signing
Tested: Android 16 (API 36) compatible

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 13:15:04 -08:00
3e907097c9 Fix Android 16 installation with extractNativeLibs=true
- Set extractNativeLibs=true to bypass 16KB alignment requirement
- Lower targetSDK to 34 for compatibility mode
- Update RR3-Community-Mod.ps1 with 16KB zipalign command
- Tested on Android 16 (API 36)

Issue: apksigner 0.9 breaks 16KB alignment when signing
Solution: Extract libs to disk instead of mmap

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 13:05:22 -08:00
b9859224ee Restore original MainActivity for stability
Reverted MainActivity.smali to original v14 version to fix startup crash.
Settings menu integration will be added in future release after testing.

Status: Stable v15.0.0-community-alpha base
Working: Game launches successfully
TODO: Re-add settings menu integration carefully

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 11:54:41 -08:00
b54eb4a416 Revert to MainActivity as launcher to fix startup crash
ServerSelectionActivity was causing crashes on startup. Reverted to
stable MainActivity as launcher. ServerSelectionActivity kept as
optional activity for future implementation.

Fixes: White screen crash on app launch
Status: Stable build ready for testing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 11:39:17 -08:00
2cb0d769f5 Fix ServerSelectionActivity resource IDs and build process
- Regenerated resource IDs for new layout files
- Fixed activity_server_selection and dialog_server_input layouts
- Updated build process to use apksigner with v2/v3 signatures
- Proper zipalign and native library handling

Version: 15.0.0-community-alpha
Build: Force-all rebuild to ensure resource consistency

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 11:27:20 -08:00
9632b7770b Bump version to 15.0.0-community-alpha
This major version bump reflects significant community modifications:
- In-game settings menu with web panel sync
- Custom server URL configuration
- Offline/Online play modes
- Device settings management API

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 10:59:36 -08:00
7438e7efeb Add in-game settings menu with web panel sync
Features:
- SettingsActivity accessible via Menu button (keycode 82)
- Configure server URL and mode (online/offline) in-game
- Test connection before saving settings
- Switch to offline mode with one tap
- Sync settings from web admin panel
- Real-time status messages with emoji indicators

Implementation:
- Created 13 SettingsActivity Smali files (main + inner classes)
- Created activity_settings.xml UI layout
- Added SettingsActivity to AndroidManifest.xml (portrait mode)
- Modified MainActivity.smali to handle Menu button press
- Integrated with existing ServerManager for Nimble SDK overrides
- Settings stored in SharedPreferences (rr3_server_config.xml)

APK:
- Built and signed: RR3-v14-Settings-Menu.apk (103 MB)
- Keystore: rr3-release.keystore (alias: rr3key)
- Ready for distribution

Related server changes:
- ServerSettingsController.cs with 3 API endpoints
- DeviceSettings.cshtml admin page
- UserSettings database model and migration

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-19 10:19:39 -08:00
b22e8c5308 Delete README-community.md 2026-02-19 18:10:27 +00:00

View File

@@ -77,7 +77,7 @@
<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
<permission android:name="com.ea.games.r3_row.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature"/>
<uses-permission android:name="com.ea.games.r3_row.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
<application android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:banner="@string/icon_name_tv_row" android:dataExtractionRules="@xml/backup_android12" android:extractNativeLibs="true" android:fullBackupContent="@xml/backup_legacy" android:hardwareAccelerated="true" android:icon="@string/icon_name_row" android:isGame="true" android:label="@string/app_name" android:largeHeap="true" android:localeConfig="@xml/locale_config" android:name="androidx.multidex.MultiDexApplication" android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="false" android:roundIcon="@string/icon_name_round_row" android:screenOrientation="sensorLandscape" android:supportsRtl="true" android:theme="@style/splashScreenTheme" android:usesCleartextTraffic="false" android:windowSoftInputMode="adjustNothing">
<application android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:banner="@string/icon_name_tv_row" android:dataExtractionRules="@xml/backup_android12" android:extractNativeLibs="false" android:fullBackupContent="@xml/backup_legacy" android:hardwareAccelerated="true" android:icon="@string/icon_name_row" android:isGame="true" android:label="@string/app_name" android:largeHeap="true" android:localeConfig="@xml/locale_config" android:name="androidx.multidex.MultiDexApplication" android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="false" android:roundIcon="@string/icon_name_round_row" android:screenOrientation="sensorLandscape" android:supportsRtl="true" android:theme="@style/splashScreenTheme" android:usesCleartextTraffic="false" android:windowSoftInputMode="adjustNothing">
<!-- ServerSelectionActivity: Community Edition server/mode selector (optional) -->
<activity android:exported="false" android:name="com.firemint.realracing.ServerSelectionActivity" android:screenOrientation="sensorLandscape" android:theme="@style/splashScreenTheme"/>
<!-- UnpackAssetsActivity: No longer the launcher, now called by MainActivity -->