Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
3f07e09
Implement basic functionality
andre487 Aug 31, 2026
1ded18a
Better interface
andre487 Aug 31, 2026
74649a9
Add profiles
andre487 Aug 31, 2026
322cca4
Add connection stats
andre487 Aug 31, 2026
a48efb1
Implement export
andre487 Aug 31, 2026
11b0670
Change package
andre487 Aug 31, 2026
bdaa01a
Add persistant log
andre487 Aug 31, 2026
b03380e
Add crash handling
andre487 Aug 31, 2026
dec3f85
Real device fixes
andre487 Sep 1, 2026
67961ae
Simplify settings
andre487 Sep 1, 2026
36109a0
Better test message
andre487 Sep 1, 2026
86f78e4
Better profiles sorting
andre487 Sep 1, 2026
5bb33c9
Hide battery button if doesn't needed
andre487 Sep 1, 2026
baa6bf8
Add more import formats
andre487 Sep 1, 2026
5b753f7
Add visibility analysis
andre487 Sep 1, 2026
5255c96
Add SSH support
andre487 Sep 1, 2026
11a23f8
Add more options
andre487 Sep 1, 2026
5a36981
DNS fix
andre487 Sep 1, 2026
926f978
Better profile switching
andre487 Sep 1, 2026
d4bd049
Fix common things
andre487 Sep 1, 2026
ea8a632
Fix possible crashes
andre487 Sep 1, 2026
8f4e80a
Fix possible security issues
andre487 Sep 1, 2026
649e332
Fix possible UX issues
andre487 Sep 1, 2026
f51b346
Fix UX more issues
andre487 Sep 1, 2026
397576c
Add icons
andre487 Sep 1, 2026
57560b2
Add i18n
andre487 Sep 1, 2026
ef50034
Fix found issues
andre487 Sep 1, 2026
ad60aa3
Support more protocol options
andre487 Sep 1, 2026
5d6c4fe
Add release scripts
andre487 Sep 1, 2026
5f447c3
Fix keyboard height issues
andre487 Sep 1, 2026
53bf44d
Add GH tests
andre487 Sep 1, 2026
369c86c
Fix CI
andre487 Sep 1, 2026
cad8338
Add version
andre487 Sep 1, 2026
0c91d41
Add reconnect
andre487 Sep 1, 2026
dd756ab
Add release flow
andre487 Sep 1, 2026
3922e3b
Improve README
andre487 Sep 1, 2026
d11771e
Add docs
andre487 Sep 1, 2026
b54ba5d
Fix real devices issues
andre487 Sep 1, 2026
01ce695
Less UI freezes
andre487 Sep 1, 2026
5871ca6
Add update reconnect
andre487 Sep 1, 2026
ad618c1
Fix UI
andre487 Sep 1, 2026
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
87 changes: 87 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: CI

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
native-tests:
name: Native Go tests
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Check out repository
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: native/go.mod
cache-dependency-path: native/go.sum

- name: Run native tests with the race detector
working-directory: native
run: go test -race ./...

android-tests:
name: Android tests and checks
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Check out repository
uses: actions/checkout@v6

- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
cache: gradle

- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: native/go.mod
cache-dependency-path: native/go.sum

- name: Install Android SDK components
run: |
sdkmanager="$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
if [[ ! -x "$sdkmanager" ]]; then
echo "sdkmanager is unavailable at $sdkmanager" >&2
exit 1
fi
yes | "$sdkmanager" --licenses >/dev/null || true
"$sdkmanager" \
"platforms;android-35" \
"build-tools;34.0.0" \
"ndk;29.0.14206865"
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/29.0.14206865" >> "$GITHUB_ENV"

- name: Install gomobile
run: |
go install golang.org/x/mobile/cmd/gomobile@v0.0.0-20260821190718-4776eadac327
gomobile init

- name: Build arm64 Android AAR
working-directory: native
run: |
mkdir -p ../app/libs
gomobile bind \
-target=android/arm64 \
-androidapi 26 \
-trimpath \
-o ../app/libs/megaproxy.aar \
./mobile

- name: Run Android unit tests, lint, and debug build
run: ./gradlew --no-daemon testDebugUnitTest lintDebug assembleDebug
106 changes: 106 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Release APKs

on:
push:
tags:
- "v*"

permissions:
contents: write

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

jobs:
release:
name: Build and publish signed APKs
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Check out release tag
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
cache: gradle

- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: native/go.mod
cache-dependency-path: native/go.sum

- name: Install Android SDK components
run: |
sdkmanager="$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
if [[ ! -x "$sdkmanager" ]]; then
echo "sdkmanager is unavailable at $sdkmanager" >&2
exit 1
fi
yes | "$sdkmanager" --licenses >/dev/null || true
"$sdkmanager" \
"platforms;android-35" \
"build-tools;34.0.0" \
"ndk;29.0.14206865"
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/29.0.14206865" >> "$GITHUB_ENV"

- name: Install gomobile
run: |
go install golang.org/x/mobile/cmd/gomobile@v0.0.0-20260821190718-4776eadac327
gomobile init

- name: Validate release tag
run: |
version_name="$(sed -nE 's/^[[:space:]]*versionName = "([^"]+)"/\1/p' app/build.gradle.kts | head -n 1)"
expected_tag="v${version_name}"
if [[ -z "$version_name" || "$GITHUB_REF_NAME" != "$expected_tag" ]]; then
echo "Release tag $GITHUB_REF_NAME does not match app version $expected_tag" >&2
exit 1
fi

- name: Restore Android signing key
env:
SIGNING_KEY_BASE64: ${{ secrets.ANDROID_SIGNING_KEY_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
run: |
if [[ -z "$SIGNING_KEY_BASE64" || -z "$KEYSTORE_PASSWORD" ]]; then
echo "Android signing secrets are not configured" >&2
exit 1
fi
keystore="$RUNNER_TEMP/megaproxy-release.p12"
password_file="$RUNNER_TEMP/megaproxy-keystore-password"
printf '%s' "$SIGNING_KEY_BASE64" | base64 --decode > "$keystore"
printf '%s' "$KEYSTORE_PASSWORD" > "$password_file"
chmod 600 "$keystore" "$password_file"
echo "MEGAPROXY_KEYSTORE_PATH=$keystore" >> "$GITHUB_ENV"
echo "MEGAPROXY_KEY_PASSWORD_FILE=$password_file" >> "$GITHUB_ENV"

- name: Build optimized signed APKs
env:
MEGAPROXY_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
MEGAPROXY_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
MEGAPROXY_GIT_COMMIT: ${{ github.sha }}
run: ./scripts/build-release-apks.sh

- name: Publish GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
assets=(dist/release/*.apk dist/release/SHA256SUMS)
if gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
gh release upload "$GITHUB_REF_NAME" "${assets[@]}" \
--repo "$GITHUB_REPOSITORY" \
--clobber
else
gh release create "$GITHUB_REF_NAME" "${assets[@]}" \
--repo "$GITHUB_REPOSITORY" \
--verify-tag \
--generate-notes \
--title "MegaProxy ${GITHUB_REF_NAME}"
fi
39 changes: 10 additions & 29 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,34 +1,15 @@
# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
.idea/
local.properties

# Log/OS Files
*.log

# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.aab
*.apk
output-metadata.json

# IntelliJ
**/build/
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml

# Keystore files
.DS_Store
*.apk
*.aab
*.jks
*.keystore

# Google Services (e.g. APIs or Firebase)
google-services.json

# Android Profiling
*.hprof
/dist/
.externalNativeBuild/
.cxx/
native/*.aar
app/libs/*.aar
7 changes: 7 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"recommendations": [
"vscjava.vscode-java-pack",
"fwcd.kotlin",
"golang.go"
]
}
24 changes: 24 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node-terminal",
"name": "Run MegaProxy on Emulator",
"request": "launch",
"command": "${workspaceFolder}/scripts/run-without-debugging.sh",
"cwd": "${workspaceFolder}"
},
{
"type": "java",
"name": "Attach MegaProxy (JDWP)",
"request": "attach",
"hostName": "127.0.0.1",
"port": 8700,
"timeout": 60000,
"sourcePaths": [
"${workspaceFolder}/app/src/main/java"
],
"preLaunchTask": "Android: Prepare JDWP"
}
]
}
Loading