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
123 changes: 114 additions & 9 deletions .fdroid.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Categories:
- Connectivity
- VPN & Proxy
License: MIT
AuthorName: Andrey Prokopyuk
AuthorWebSite: https://github.com/andre487
Expand All @@ -12,9 +12,9 @@ RepoType: git
Repo: https://github.com/andre487/AndroidMegaProxy.git

Builds:
- versionName: 0.0.7
versionCode: 7
commit: v0.0.7
- versionName: 0.0.8
versionCode: 8001
commit: d314a250df796643ce9e52c60f9b061318634935
subdir: app
ndk: 29.0.14206865
sudo:
Expand All @@ -27,8 +27,10 @@ Builds:
- yes
srclibs:
- go@go1.26.3
binary: https://github.com/andre487/AndroidMegaProxy/releases/download/v%v/mega-proxy-universal.apk
prebuild: sdkmanager 'platforms;android-26'
binary: https://github.com/andre487/AndroidMegaProxy/releases/download/v%v/mega-proxy-armeabi-v7a.apk
prebuild:
- sdkmanager 'platforms;android-26'
- echo 'megaproxyVersionVariant=armeabi-v7a' >> ../gradle.properties
build:
- pushd $$go$$/src
- ./make.bash
Expand All @@ -38,11 +40,114 @@ Builds:
- export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
- cp -a .. /home/runner/work/AndroidMegaProxy/AndroidMegaProxy
- cd /home/runner/work/AndroidMegaProxy/AndroidMegaProxy/app
- ../scripts/build-fdroid-native.sh
- MEGAPROXY_ANDROID_ABI=armeabi-v7a ../scripts/build-fdroid-native.sh
- mkdir -p $OLDPWD/libs
- cp libs/megaproxy.aar $OLDPWD/libs/

- versionName: 0.0.8
versionCode: 8002
commit: d314a250df796643ce9e52c60f9b061318634935
subdir: app
ndk: 29.0.14206865
sudo:
- apt-get update
- apt-get install -t trixie-backports -y golang-go
- apt-get install -y gcc libc-dev make openjdk-21-jdk-headless
- mkdir -p /home/runner/work/AndroidMegaProxy
- chown -R vagrant:vagrant /home/runner
gradle:
- yes
srclibs:
- go@go1.26.3
binary: https://github.com/andre487/AndroidMegaProxy/releases/download/v%v/mega-proxy-arm64-v8a.apk
prebuild:
- sdkmanager 'platforms;android-26'
- echo 'megaproxyVersionVariant=arm64-v8a' >> ../gradle.properties
build:
- pushd $$go$$/src
- ./make.bash
- popd
- export GOROOT=$$go$$
- export GOPATH=$HOME/go
- export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
- cp -a .. /home/runner/work/AndroidMegaProxy/AndroidMegaProxy
- cd /home/runner/work/AndroidMegaProxy/AndroidMegaProxy/app
- MEGAPROXY_ANDROID_ABI=arm64-v8a ../scripts/build-fdroid-native.sh
- mkdir -p $OLDPWD/libs
- cp libs/megaproxy.aar $OLDPWD/libs/

- versionName: 0.0.8
versionCode: 8003
commit: d314a250df796643ce9e52c60f9b061318634935
subdir: app
ndk: 29.0.14206865
sudo:
- apt-get update
- apt-get install -t trixie-backports -y golang-go
- apt-get install -y gcc libc-dev make openjdk-21-jdk-headless
- mkdir -p /home/runner/work/AndroidMegaProxy
- chown -R vagrant:vagrant /home/runner
gradle:
- yes
srclibs:
- go@go1.26.3
binary: https://github.com/andre487/AndroidMegaProxy/releases/download/v%v/mega-proxy-x86.apk
prebuild:
- sdkmanager 'platforms;android-26'
- echo 'megaproxyVersionVariant=x86' >> ../gradle.properties
build:
- pushd $$go$$/src
- ./make.bash
- popd
- export GOROOT=$$go$$
- export GOPATH=$HOME/go
- export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
- cp -a .. /home/runner/work/AndroidMegaProxy/AndroidMegaProxy
- cd /home/runner/work/AndroidMegaProxy/AndroidMegaProxy/app
- MEGAPROXY_ANDROID_ABI=x86 ../scripts/build-fdroid-native.sh
- mkdir -p $OLDPWD/libs
- cp libs/megaproxy.aar $OLDPWD/libs/

- versionName: 0.0.8
versionCode: 8004
commit: d314a250df796643ce9e52c60f9b061318634935
subdir: app
ndk: 29.0.14206865
sudo:
- apt-get update
- apt-get install -t trixie-backports -y golang-go
- apt-get install -y gcc libc-dev make openjdk-21-jdk-headless
- mkdir -p /home/runner/work/AndroidMegaProxy
- chown -R vagrant:vagrant /home/runner
gradle:
- yes
srclibs:
- go@go1.26.3
binary: https://github.com/andre487/AndroidMegaProxy/releases/download/v%v/mega-proxy-x86_64.apk
prebuild:
- sdkmanager 'platforms;android-26'
- echo 'megaproxyVersionVariant=x86_64' >> ../gradle.properties
build:
- pushd $$go$$/src
- ./make.bash
- popd
- export GOROOT=$$go$$
- export GOPATH=$HOME/go
- export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
- cp -a .. /home/runner/work/AndroidMegaProxy/AndroidMegaProxy
- cd /home/runner/work/AndroidMegaProxy/AndroidMegaProxy/app
- MEGAPROXY_ANDROID_ABI=x86_64 ../scripts/build-fdroid-native.sh
- mkdir -p $OLDPWD/libs
- cp libs/megaproxy.aar $OLDPWD/libs/

VercodeOperation:
- 1000 * %c + 1
- 1000 * %c + 2
- 1000 * %c + 3
- 1000 * %c + 4

AutoUpdateMode: Version
UpdateCheckMode: Tags
CurrentVersion: 0.0.7
CurrentVersionCode: 7
UpdateCheckData: app/build.gradle.kts|versionCodeBase = (\d+)|.|versionName = "([^"]+)"
CurrentVersion: 0.0.8
CurrentVersionCode: 8004
18 changes: 16 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ val releaseKeystorePath = providers.environmentVariable("MEGAPROXY_KEYSTORE_PATH
val releaseKeystorePassword = providers.environmentVariable("MEGAPROXY_KEYSTORE_PASSWORD").orNull
val releaseKeyAlias = providers.environmentVariable("MEGAPROXY_KEY_ALIAS").orNull
val releaseKeyPassword = providers.environmentVariable("MEGAPROXY_KEY_PASSWORD").orNull
val versionCodeBase = 8
val versionVariant = providers.gradleProperty("megaproxyVersionVariant")
.orElse("universal")
.get()
val versionVariantCode = mapOf(
"universal" to 0,
"armeabi-v7a" to 1,
"arm64-v8a" to 2,
"x86" to 3,
"x86_64" to 4,
)[versionVariant] ?: throw GradleException("Unsupported MegaProxy version variant: $versionVariant")
val gitCommitHash = providers.environmentVariable("GITHUB_SHA")
.orElse(providers.environmentVariable("MEGAPROXY_GIT_COMMIT"))
.orElse(providers.exec {
Expand All @@ -28,8 +39,11 @@ android {
applicationId = "net.megaproxy487"
minSdk = 26
targetSdk = 35
versionCode = 7
versionName = "0.0.7"
// Each APK has a unique, monotonically ordered code. Keeping the
// universal code below the ABI variants lets app stores prefer the
// smaller compatible APK when both are available.
versionCode = versionCodeBase * 1000 + versionVariantCode
versionName = "0.0.8"
buildConfigField("String", "GIT_COMMIT_HASH", "\"$gitCommitHash\"")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
15 changes: 14 additions & 1 deletion scripts/build-fdroid-native.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,23 @@ go install "golang.org/x/mobile/cmd/gomobile@$gomobile_version"
go install "golang.org/x/mobile/cmd/gobind@$gomobile_version"
gomobile init

android_abi="${MEGAPROXY_ANDROID_ABI:-}"
case "$android_abi" in
"") gomobile_target="android" ;;
armeabi-v7a) gomobile_target="android/arm" ;;
arm64-v8a) gomobile_target="android/arm64" ;;
x86) gomobile_target="android/386" ;;
x86_64) gomobile_target="android/amd64" ;;
*)
echo "Unsupported MEGAPROXY_ANDROID_ABI: $android_abi" >&2
exit 1
;;
esac

mkdir -p "$project_dir/app/libs"
cd "$project_dir/native"
gomobile bind \
-target=android \
-target="$gomobile_target" \
-androidapi 26 \
-trimpath \
-ldflags='-s -w -buildid=' \
Expand Down
35 changes: 27 additions & 8 deletions scripts/build-release-apks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,20 @@ verify_release_apk() {
fi
}

verify_release_version_code() {
local apk="$1"
local expected_version_code="$2"
local actual_version_code
actual_version_code="$(
"$ANDROID_HOME/build-tools/34.0.0/aapt" dump badging "$apk" \
| sed -n "s/^package:.*versionCode='\([^']*\)'.*/\1/p"
)"
if [[ "$actual_version_code" != "$expected_version_code" ]]; then
echo "Unexpected versionCode for $apk: expected $expected_version_code, got $actual_version_code" >&2
exit 1
fi
}

temporary_dir="$(mktemp -d "${TMPDIR:-/tmp}/megaproxy-release.XXXXXX")"
original_aar="$project_dir/app/libs/megaproxy.aar"
had_original_aar=false
Expand Down Expand Up @@ -115,18 +129,19 @@ echo "Running native tests"

# gomobile architecture names and their corresponding Android ABI names.
targets=(
"arm64:arm64-v8a"
"arm:armeabi-v7a"
"amd64:x86_64"
"386:x86"
"arm64:arm64-v8a:8002"
"arm:armeabi-v7a:8001"
"amd64:x86_64:8004"
"386:x86:8003"
)

# A clean checkout has no app/libs/megaproxy.aar. Gradle resolves local AAR
# dependencies while configuring Android unit tests, so build the first ABI
# before invoking Gradle and reuse it for the first release APK below.
first_target="${targets[0]}"
first_go_arch="${first_target%%:*}"
first_android_abi="${first_target##*:}"
first_target_rest="${first_target#*:}"
first_android_abi="${first_target_rest%%:*}"
echo "Building initial native AAR for $first_android_abi"
(
cd "$project_dir/native"
Expand All @@ -147,7 +162,9 @@ echo "Running Android unit tests"

for target in "${targets[@]}"; do
go_arch="${target%%:*}"
android_abi="${target##*:}"
target_rest="${target#*:}"
android_abi="${target_rest%%:*}"
version_code="${target_rest##*:}"
output_apk="$MEGAPROXY_RELEASE_DIR/mega-proxy-${android_abi}.apk"

if [[ "$android_abi" == "$first_android_abi" ]]; then
Expand All @@ -173,7 +190,7 @@ for target in "${targets[@]}"; do
# requested in one task graph, Gradle does not guarantee that clean has
# finished before every generated-resource task starts.
./gradlew clean
./gradlew assembleRelease
./gradlew assembleRelease -PmegaproxyVersionVariant="$android_abi"
)
built_apk="$project_dir/app/build/outputs/apk/release/app-release.apk"
if [[ ! -f "$built_apk" ]]; then
Expand All @@ -183,6 +200,7 @@ for target in "${targets[@]}"; do
cp "$built_apk" "$output_apk"

verify_release_apk "$output_apk"
verify_release_version_code "$output_apk" "$version_code"
done

# F-Droid verifies this universal APK against a clean source build before
Expand All @@ -204,7 +222,7 @@ echo "Building and signing universal APK"
(
cd "$project_dir"
./gradlew clean
./gradlew assembleRelease
./gradlew assembleRelease -PmegaproxyVersionVariant=universal
)
universal_apk="$MEGAPROXY_RELEASE_DIR/mega-proxy-universal.apk"
built_apk="$project_dir/app/build/outputs/apk/release/app-release.apk"
Expand All @@ -214,6 +232,7 @@ if [[ ! -f "$built_apk" ]]; then
fi
cp "$built_apk" "$universal_apk"
verify_release_apk "$universal_apk"
verify_release_version_code "$universal_apk" 8000

(
cd "$MEGAPROXY_RELEASE_DIR"
Expand Down