Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ concurrency:
jobs:
build-and-test:
name: Build and test
runs-on: ubuntu-latest
runs-on: ubuntu-24.04

steps:
- name: Check out repository
Expand All @@ -38,7 +38,7 @@ jobs:
- name: Set up Android SDK
uses: android-actions/setup-android@v4
with:
packages: 'platforms;android-37 build-tools;36.0.0'
packages: 'platforms;android-37.0 build-tools;36.0.0'

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6
Expand Down
4 changes: 4 additions & 0 deletions .idea/shelf/Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1,112 changes: 1,112 additions & 0 deletions .idea/shelf/Default/shelved.patch

Large diffs are not rendered by default.

129 changes: 61 additions & 68 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,35 @@ This app converts strings with commonly used algorithms. API 26+
You can check [releases page](https://github.com/SnowVolf/ConvertX/releases) for latest version
You can also build this app from sources in Android Studio or Intellij IDEA (`Build -> Build Bundles -> Build APK`)

## Build and upload to Google Drive

The helper script can build an APK and upload it to a Google Drive folder through
[`rclone`](https://rclone.org/drive/). The uploaded filename contains the app
version from `app/version.properties`, the upload date, and the build variant:
`Convert X 2.1.3 (19.09.2026) release.apk`.

Configure an authenticated Google Drive remote once:

```bash
rclone config
```

Create a remote named `gdrive` with the Google Drive storage type. Then run:

```bash
./scripts/build-and-upload-drive.sh
```

Useful variants:

```bash
./scripts/build-and-upload-drive.sh --variant debug
./scripts/build-and-upload-drive.sh --variant both
./scripts/build-and-upload-drive.sh --folder "Convert X" --remote gdrive
./scripts/build-and-upload-drive.sh --variant release --no-upload
```

The default destination is the `Convert X` folder in the configured Drive
remote. Override it with `--folder` or the `DRIVE_FOLDER` environment variable.
The script does not store Google credentials in the repository.

1 change: 0 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ dependencies {
implementation libs.androidx.lifecycle.viewmodel.navigation3
implementation libs.androidx.lifecycle.viewmodel.compose
implementation libs.androidx.lifecycle.runtime.compose
implementation libs.androidx.lifecycle.runtime.ktx

implementation libs.androidx.room.runtime
implementation libs.androidx.room.ktx
Expand Down
27 changes: 0 additions & 27 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,3 @@
-dontwarn com.google.auto.**
-dontwarn com.google.common.**
-dontwarn com.google.j2objc.**

# Keep `Companion` object fields of serializable classes.
# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
static <1>$Companion Companion;
}

# Keep `serializer()` on companion objects (both default and named) of serializable classes.
-if @kotlinx.serialization.Serializable class ** {
static **$* *;
}
-keepclassmembers class <2>$<3> {
kotlinx.serialization.KSerializer serializer(...);
}

# Keep `INSTANCE.serializer()` of serializable objects.
-if @kotlinx.serialization.Serializable class ** {
public static ** INSTANCE;
}
-keepclassmembers class <1> {
public static <1> INSTANCE;
kotlinx.serialization.KSerializer serializer(...);
}

# @Serializable and @Polymorphic are used at runtime for polymorphic serialization.
-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
Loading