Compare commits

...

8 Commits

Author SHA1 Message Date
GitHub Actions
abe44f6ad1 chore: bump version to 4.11.87 [skip ci] 2026-04-18 21:57:34 +00:00
c17e1c74ee chore: update subproject commit reference to a3dac17
All checks were successful
Build / increment-version (push) Successful in 6s
Build / build-android (push) Successful in 5m4s
Build / create-release (push) Successful in 14s
2026-04-19 07:57:24 +10:00
GitHub Actions
255bfe2262 chore: bump version to 4.11.86 [skip ci] 2026-04-18 21:37:27 +00:00
8eea325e21 Merge branch 'master' of http://synbox.ruv.wtf:8418/litruv/cinny-mobile
All checks were successful
Build / increment-version (push) Successful in 6s
Build / build-android (push) Successful in 5m46s
Build / create-release (push) Successful in 14s
2026-04-19 07:37:19 +10:00
3afb2ee80d chore: update subproject commit reference 2026-04-19 07:37:17 +10:00
GitHub Actions
245188c1a1 chore: bump version to 4.11.85 [skip ci] 2026-04-18 21:24:49 +00:00
1d2057d75a Merge branch 'master' of http://synbox.ruv.wtf:8418/litruv/cinny-mobile
All checks were successful
Build / increment-version (push) Successful in 6s
Build / build-android (push) Successful in 4m43s
Build / create-release (push) Successful in 13s
2026-04-19 07:24:41 +10:00
d8343d089b feat: implement Android app signing setup and update .gitignore for keystore files 2026-04-19 07:24:38 +10:00
6 changed files with 103 additions and 6 deletions

8
android/.gitignore vendored
View File

@@ -52,10 +52,10 @@ captures/
# Comment next line if keeping position of elements in Navigation Editor is relevant for you # Comment next line if keeping position of elements in Navigation Editor is relevant for you
.idea/navEditor.xml .idea/navEditor.xml
# Keystore files # Keystore files - NEVER commit these!
# Uncomment the following lines if you do not want to check your keystore files in. *.jks
#*.jks *.keystore
#*.keystore keystore.properties
# External native build folder generated in Android Studio 2.2 and later # External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild .externalNativeBuild

61
android/SIGNING_SETUP.md Normal file
View File

@@ -0,0 +1,61 @@
# Android App Signing Setup
## Why This Matters
Android requires apps to be signed with the same key for updates to work. Without proper signing, users cannot update your app - they must uninstall and reinstall, losing all data.
## Setup Instructions
### 1. Create a Keystore (if you don't have one)
Run this command in the `android/` directory:
```bash
keytool -genkey -v -keystore paarrot-release.keystore -alias paarrot -keyalg RSA -keysize 2048 -validity 10000
```
You'll be asked for:
- Keystore password (remember this!)
- Key password (remember this!)
- Your name, organization, etc.
**IMPORTANT**: Back up this keystore file and remember the passwords! If you lose either, you cannot update your app.
### 2. Create keystore.properties
Copy the example file:
```bash
cp keystore.properties.example keystore.properties
```
Then edit `keystore.properties` and fill in:
- `storeFile`: path to your keystore (e.g., `paarrot-release.keystore`)
- `storePassword`: the keystore password you set
- `keyAlias`: the alias (e.g., `paarrot`)
- `keyPassword`: the key password you set
### 3. Verify
The file `keystore.properties` should be gitignored (check `.gitignore`).
### 4. Build
Now your release builds will be properly signed:
```bash
cd android
./gradlew assembleRelease
```
The signed APK will be in: `app/build/outputs/apk/release/`
## Troubleshooting
### "Updates not installing"
- You're using a different keystore than the original APK
- Solution: Use the same keystore that was used for the first release
### "keystore.properties not found"
- Normal for debug builds
- Only needed for release builds
- Create the file following step 2 above

View File

@@ -1,9 +1,28 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
// Load keystore properties
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android { android {
namespace = "com.paarrot.app" namespace = "com.paarrot.app"
compileSdk = rootProject.ext.compileSdkVersion compileSdk = rootProject.ext.compileSdkVersion
signingConfigs {
release {
if (keystorePropertiesFile.exists()) {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
}
defaultConfig { defaultConfig {
applicationId "com.paarrot.app" applicationId "com.paarrot.app"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
@@ -21,6 +40,9 @@ android {
release { release {
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
}
} }
} }
applicationVariants.all { variant -> applicationVariants.all { variant ->

View File

@@ -0,0 +1,14 @@
# Copy this file to keystore.properties and fill in your actual values
# NEVER commit keystore.properties to git!
# Path to your keystore file (relative to android/ directory)
storeFile=paarrot-release.keystore
# Keystore password
storePassword=your_keystore_password_here
# Key alias
keyAlias=paarrot
# Key password
keyPassword=your_key_password_here

2
cinny

Submodule cinny updated: 6853e04db0...a3dac17b7c

View File

@@ -1,6 +1,6 @@
{ {
"name": "paarrot", "name": "paarrot",
"version": "4.11.84", "version": "4.11.87",
"description": "Paarrot - A Matrix client based on Cinny", "description": "Paarrot - A Matrix client based on Cinny",
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"