13 Commits

Author SHA1 Message Date
Hermes
0bf7f6b387 fix: cross-compile bundled Android git libs with Rust
All checks were successful
Android build / build (push) Successful in 14m1s
Android build / build (release) Successful in 24m0s
2026-08-31 20:40:02 -05:00
Hermes
1ac5f0d7fa ci: build and verify bundled Android git libs
Some checks failed
Android build / build (push) Failing after 4m53s
2026-08-31 20:33:40 -05:00
Hermes
052ea8de4c ci: verify Android bundles ship native git
Some checks failed
Android build / build (push) Failing after 38s
Android build / build (release) Failing after 53s
2026-08-31 18:53:02 -05:00
Hermes
9c77cdc3a3 ci: compile bundled git for Android builds
Some checks failed
Android build / build (push) Failing after 1m13s
2026-08-31 18:51:08 -05:00
Hermes
b5fea9e010 ci: prefer github token for release asset upload
All checks were successful
Android build / build (push) Successful in 9m6s
Android build / build (release) Successful in 11m31s
2026-08-31 17:52:41 -05:00
Hermes
df07409e48 ci: broaden release asset upload token fallback
Some checks failed
Android build / build (push) Has been cancelled
2026-08-31 16:12:17 -05:00
Hermes
6604b5b94a ci: bump APK versionCode and timestamp AAB names
Some checks failed
Android build / build (push) Successful in 11m49s
Android build / build (release) Failing after 9m55s
2026-08-31 15:05:53 -05:00
Hermes
56eddb424a fix: repair AGP upgrade file corruption
All checks were successful
Android build / build (push) Successful in 7m48s
2026-08-31 13:49:47 -05:00
Hermes
98faa8b6f0 build: upgrade AGP for Android 16 support
Some checks failed
Android build / build (push) Has been cancelled
2026-08-31 13:30:52 -05:00
Hermes
ee21751e03 build: target Android 16 / API 36
All checks were successful
Android build / build (push) Successful in 17m7s
2026-08-31 12:18:29 -05:00
Hermes
0b719dcc36 ci: visible-file push trigger test
All checks were successful
Android build / build (push) Successful in 6m50s
2026-08-30 10:01:44 -05:00
Hermes
dc167328fe ci: trigger Githug-Android validation run
Some checks failed
Android build / build (push) Successful in 11m59s
Android build / build (release) Failing after 11m17s
2026-08-29 14:45:35 -05:00
Hermes
5e05ad192d ci: align Githug-Android workflow with Android release pattern
Some checks failed
Android build / build (push) Has been cancelled
2026-08-29 14:43:18 -05:00
6 changed files with 301 additions and 26 deletions

View File

@@ -0,0 +1,250 @@
name: Android build
permissions:
contents: write
releases: write
on:
push:
branches:
- '**'
pull_request:
release:
types:
- published
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
- name: Install Android SDK command-line tools and packages
shell: bash
run: |
set -euxo pipefail
export ANDROID_SDK_ROOT="$HOME/.android/sdk"
export ANDROID_HOME="$ANDROID_SDK_ROOT"
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
if [ ! -x "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" ]; then
tools_url="$(curl -fsSL https://developer.android.com/studio | grep -o 'https://dl.google.com/android/repository/commandlinetools-linux-[0-9][0-9]*_latest.zip' | head -n 1)"
test -n "$tools_url"
curl -fsSL -o /tmp/commandlinetools.zip "$tools_url"
rm -rf "$ANDROID_SDK_ROOT/cmdline-tools/latest" "$ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools"
unzip -q /tmp/commandlinetools.zip -d "$ANDROID_SDK_ROOT/cmdline-tools"
mv "$ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools" "$ANDROID_SDK_ROOT/cmdline-tools/latest"
fi
export PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH"
set +o pipefail
yes | sdkmanager --licenses >/dev/null
set -o pipefail
sdkmanager \
"platform-tools" \
"platforms;android-36" \
"build-tools;36.0.0" \
"ndk;27.2.12479018" \
"cmake;3.22.1"
- name: Prepare optional release signing
if: github.event_name == 'release'
continue-on-error: true
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
shell: bash
run: |
set -euo pipefail
missing=()
for key in ANDROID_KEYSTORE_BASE64 ANDROID_KEYSTORE_PASSWORD ANDROID_KEY_ALIAS ANDROID_KEY_PASSWORD; do
if [ -z "${!key:-}" ]; then
missing+=("$key")
fi
done
if [ ${#missing[@]} -gt 0 ]; then
printf -v missing_csv '%s, ' "${missing[@]}"
missing_csv="${missing_csv%, }"
echo "::error::Release signing secrets missing: ${missing_csv}. Continuing with unsigned/default-signed release AAB."
exit 1
fi
mkdir -p .ci-secrets
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 -d > .ci-secrets/release-keystore.jks
cat > keystore.properties <<EOF
storeFile=.ci-secrets/release-keystore.jks
storePassword=$ANDROID_KEYSTORE_PASSWORD
keyAlias=$ANDROID_KEY_ALIAS
keyPassword=$ANDROID_KEY_PASSWORD
EOF
- name: Make Gradle wrapper executable
run: chmod +x gradlew
- name: Write Android SDK location
shell: bash
run: |
set -euxo pipefail
printf 'sdk.dir=%s/.android/sdk\n' "$HOME" > local.properties
- name: Install Rust toolchain
shell: bash
run: |
set -euxo pipefail
if ! command -v cargo >/dev/null 2>&1; then
curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal
fi
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
export PATH="$HOME/.cargo/bin:$PATH"
cargo --version
rustc --version
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
- name: Compile bundled native Git binaries
shell: bash
run: |
set -euxo pipefail
export PATH="$HOME/.cargo/bin:$PATH"
export ANDROID_SDK_ROOT="$HOME/.android/sdk"
export ANDROID_HOME="$ANDROID_SDK_ROOT"
chmod +x ./AndroidProjectTooling.sh
bash ./AndroidProjectTooling.sh --compile-android-git
- name: Prepare CI build metadata
id: build_meta
shell: bash
run: |
set -euxo pipefail
timestamp_utc="$(date -u +%Y%m%d-%H%M%S)"
version_code="$(date -u +%s)"
project_name="$(basename "$GITHUB_REPOSITORY")"
python3 - "$version_code" <<'PY'
from pathlib import Path
import re, sys
path = Path('app/build.gradle.kts')
text = path.read_text(encoding='utf-8')
new_text, count = re.subn(r'(\bversionCode\s*=\s*)\d+', rf'\g<1>{sys.argv[1]}', text, count=1)
if count != 1:
raise SystemExit('versionCode not found in app/build.gradle.kts')
path.write_text(new_text, encoding='utf-8')
PY
echo "Using CI versionCode: $version_code"
echo "project_name=$project_name" >> "$GITHUB_OUTPUT"
echo "timestamp_utc=$timestamp_utc" >> "$GITHUB_OUTPUT"
echo "version_code=$version_code" >> "$GITHUB_OUTPUT"
- name: Build debug APK
if: github.event_name != 'release'
shell: bash
run: |
set -euxo pipefail
export ANDROID_SDK_ROOT="$HOME/.android/sdk"
export ANDROID_HOME="$ANDROID_SDK_ROOT"
./gradlew --no-daemon clean assembleDebug
- name: Verify debug APK bundles native Git
if: github.event_name != 'release'
shell: bash
run: |
set -euxo pipefail
python3 - <<'PY'
from pathlib import Path
import zipfile
apk = next(Path('app/build/outputs/apk/debug').glob('*.apk'))
with zipfile.ZipFile(apk) as zf:
names = zf.namelist()
required = {
'lib/arm64-v8a/libgit.so',
'lib/armeabi-v7a/libgit.so',
'lib/x86/libgit.so',
'lib/x86_64/libgit.so',
}
found = {name for name in names if name in required}
print('APK_NATIVE_GIT', sorted(found))
missing = sorted(required - found)
if missing:
raise SystemExit(f'Missing native Git libraries in {apk}: {missing}')
PY
- name: Build release AAB
if: github.event_name == 'release'
shell: bash
run: |
set -euxo pipefail
export ANDROID_SDK_ROOT="$HOME/.android/sdk"
export ANDROID_HOME="$ANDROID_SDK_ROOT"
./gradlew --no-daemon bundleRelease
- name: Verify release AAB bundles native Git
if: github.event_name == 'release'
shell: bash
run: |
set -euxo pipefail
python3 - <<'PY'
from pathlib import Path
import zipfile
aab = next(Path('app/build/outputs/bundle/release').glob('*.aab'))
with zipfile.ZipFile(aab) as zf:
names = zf.namelist()
required = {
'base/lib/arm64-v8a/libgit.so',
'base/lib/armeabi-v7a/libgit.so',
'base/lib/x86/libgit.so',
'base/lib/x86_64/libgit.so',
}
found = {name for name in names if name in required}
print('AAB_NATIVE_GIT', sorted(found))
missing = sorted(required - found)
if missing:
raise SystemExit(f'Missing native Git libraries in {aab}: {missing}')
PY
- name: Rename release AAB for upload
if: github.event_name == 'release'
id: release_aab
shell: bash
run: |
set -euxo pipefail
aab="$(find app/build/outputs/bundle/release -name '*.aab' | head -n 1)"
renamed="app/build/outputs/bundle/release/${{ steps.build_meta.outputs.project_name }}-${{ steps.build_meta.outputs.timestamp_utc }}-release.aab"
mv -f "$aab" "$renamed"
echo "Renamed release AAB to $(basename "$renamed")"
echo "path=$renamed" >> "$GITHUB_OUTPUT"
- name: Upload debug APK
if: github.event_name != 'release'
uses: actions/upload-artifact@v3
with:
name: debug-apk
path: app/build/outputs/apk/debug/*.apk
if-no-files-found: error
- name: Attach release AAB to Gitea release
if: github.event_name == 'release'
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITHUB_TOKEN: ${{ github.token }}
shell: bash
run: |
set -euxo pipefail
token="${GITHUB_TOKEN:-${GITEA_TOKEN:-}}"
if [ -z "$token" ]; then
echo "::error::No release upload token is available from secrets.GITEA_TOKEN or github.token"
exit 1
fi
release_id="$(python3 -c 'import json, os; print(json.load(open(os.environ["GITHUB_EVENT_PATH"], encoding="utf-8"))["release"]["id"])')"
aab="${{ steps.release_aab.outputs.path }}"
curl --fail-with-body \
--request POST \
--header "Authorization: token ${token}" \
--form "attachment=@${aab}" \
"${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets?name=$(basename "$aab")"

View File

@@ -30,8 +30,8 @@ GRADLE_DIST_URL="https://services.gradle.org/distributions/gradle-8.7-bin.zip"
JDK_DIST_URL="https://api.adoptium.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/eclipse" JDK_DIST_URL="https://api.adoptium.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/eclipse"
ANDROID_NDK_PACKAGE="ndk;27.2.12479018" ANDROID_NDK_PACKAGE="ndk;27.2.12479018"
ANDROID_CMAKE_PACKAGE="cmake;3.22.1" ANDROID_CMAKE_PACKAGE="cmake;3.22.1"
ANDROID_EMULATOR_SYSTEM_IMAGE="system-images;android-35;google_apis;x86_64" ANDROID_EMULATOR_SYSTEM_IMAGE="system-images;android-36;google_apis;x86_64"
ANDROID_TEST_AVD_NAME="githug_android_api35" ANDROID_TEST_AVD_NAME="githug_android_api36"
ANDROID_NDK_DIR="$SDK_DIR/ndk/27.2.12479018" ANDROID_NDK_DIR="$SDK_DIR/ndk/27.2.12479018"
ANDROID_CMAKE_DIR="$SDK_DIR/cmake/3.22.1" ANDROID_CMAKE_DIR="$SDK_DIR/cmake/3.22.1"
ANDROID_TOOLBIN="$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/linux-x86_64/bin" ANDROID_TOOLBIN="$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/linux-x86_64/bin"
@@ -48,7 +48,7 @@ quiet_log_name() {
local arg local arg
for arg in "$@"; do for arg in "$@"; do
case "$arg" in case "$arg" in
--build|--build-release-aab|--test|--clean-test|--test-emulator|--compile-git) --build|--build-release-aab|--test|--clean-test|--test-emulator|--compile-git|--compile-android-git)
mode="${arg#--}" mode="${arg#--}"
;; ;;
esac esac
@@ -139,8 +139,8 @@ mark_successful_check() {
required_sdk_packages_present() { required_sdk_packages_present() {
[ -d "$SDK_DIR/platform-tools" ] \ [ -d "$SDK_DIR/platform-tools" ] \
&& [ -d "$SDK_DIR/platforms/android-35" ] \ && [ -d "$SDK_DIR/platforms/android-36" ] \
&& [ -d "$SDK_DIR/build-tools/35.0.0" ] \ && [ -d "$SDK_DIR/build-tools/36.0.0" ] \
&& [ -d "$ANDROID_NDK_DIR" ] \ && [ -d "$ANDROID_NDK_DIR" ] \
&& [ -d "$ANDROID_CMAKE_DIR" ] && [ -d "$ANDROID_CMAKE_DIR" ]
} }
@@ -148,7 +148,7 @@ required_sdk_packages_present() {
required_emulator_packages_present() { required_emulator_packages_present() {
required_sdk_packages_present \ required_sdk_packages_present \
&& [ -x "$SDK_DIR/emulator/emulator" ] \ && [ -x "$SDK_DIR/emulator/emulator" ] \
&& [ -d "$SDK_DIR/system-images/android-35/google_apis/x86_64" ] && [ -d "$SDK_DIR/system-images/android-36/google_apis/x86_64" ]
} }
auto_commit_if_needed() { auto_commit_if_needed() {
@@ -502,10 +502,11 @@ build_host_git() {
build_android_git_for_abi() { build_android_git_for_abi() {
local abi="$1" local abi="$1"
local cc="$2" local cc="$2"
local rust_target="$3"
local output_dir="$ANDROID_JNI_DIR/$abi" local output_dir="$ANDROID_JNI_DIR/$abi"
local output_binary="$output_dir/libgit.so" local output_binary="$output_dir/libgit.so"
local stamp="$output_dir/.source-fingerprint" local stamp="$output_dir/.source-fingerprint"
local fingerprint="$3:android:$abi:$cc:$ANDROID_API:githug-embedded-main" local fingerprint="$4:android:$abi:$cc:$rust_target:$ANDROID_API:githug-embedded-main"
require_path "$ANDROID_TOOLBIN/$cc" require_path "$ANDROID_TOOLBIN/$cc"
@@ -530,6 +531,7 @@ build_android_git_for_abi() {
AR=llvm-ar \ AR=llvm-ar \
RANLIB=llvm-ranlib \ RANLIB=llvm-ranlib \
STRIP=llvm-strip \ STRIP=llvm-strip \
RUST_TARGETS="$rust_target" \
"${make_args[@]}" \ "${make_args[@]}" \
git git
@@ -554,10 +556,10 @@ build_android_git() {
local fingerprint local fingerprint
fingerprint="$(git_source_fingerprint)" fingerprint="$(git_source_fingerprint)"
build_android_git_for_abi "arm64-v8a" "aarch64-linux-android${ANDROID_API}-clang" "$fingerprint" build_android_git_for_abi "arm64-v8a" "aarch64-linux-android${ANDROID_API}-clang" "aarch64-linux-android" "$fingerprint"
build_android_git_for_abi "armeabi-v7a" "armv7a-linux-androideabi${ANDROID_API}-clang" "$fingerprint" build_android_git_for_abi "armeabi-v7a" "armv7a-linux-androideabi${ANDROID_API}-clang" "armv7-linux-androideabi" "$fingerprint"
build_android_git_for_abi "x86" "i686-linux-android${ANDROID_API}-clang" "$fingerprint" build_android_git_for_abi "x86" "i686-linux-android${ANDROID_API}-clang" "i686-linux-android" "$fingerprint"
build_android_git_for_abi "x86_64" "x86_64-linux-android${ANDROID_API}-clang" "$fingerprint" build_android_git_for_abi "x86_64" "x86_64-linux-android${ANDROID_API}-clang" "x86_64-linux-android" "$fingerprint"
} }
build_all_git_targets() { build_all_git_targets() {
@@ -598,8 +600,8 @@ ensure_sdk_packages() {
log "Installing required Android SDK packages" log "Installing required Android SDK packages"
"$CMDLINE_TOOLS_LATEST_DIR/bin/sdkmanager" --sdk_root="$SDK_DIR" \ "$CMDLINE_TOOLS_LATEST_DIR/bin/sdkmanager" --sdk_root="$SDK_DIR" \
"platform-tools" \ "platform-tools" \
"platforms;android-35" \ "platforms;android-36" \
"build-tools;35.0.0" \ "build-tools;36.0.0" \
"$ANDROID_NDK_PACKAGE" \ "$ANDROID_NDK_PACKAGE" \
"$ANDROID_CMAKE_PACKAGE" "$ANDROID_CMAKE_PACKAGE"
@@ -629,8 +631,8 @@ ensure_emulator_sdk_packages() {
log "Installing Android emulator SDK packages" log "Installing Android emulator SDK packages"
"$CMDLINE_TOOLS_LATEST_DIR/bin/sdkmanager" --sdk_root="$SDK_DIR" \ "$CMDLINE_TOOLS_LATEST_DIR/bin/sdkmanager" --sdk_root="$SDK_DIR" \
"platform-tools" \ "platform-tools" \
"platforms;android-35" \ "platforms;android-36" \
"build-tools;35.0.0" \ "build-tools;36.0.0" \
"$ANDROID_NDK_PACKAGE" \ "$ANDROID_NDK_PACKAGE" \
"$ANDROID_CMAKE_PACKAGE" \ "$ANDROID_CMAKE_PACKAGE" \
"emulator" \ "emulator" \
@@ -786,6 +788,11 @@ maybe_run_operation() {
build_all_git_targets build_all_git_targets
return return
;; ;;
--compile-android-git)
setup_env
build_android_git
return
;;
*) *)
return return
;; ;;
@@ -850,7 +857,7 @@ maybe_run_operation() {
print_usage() { print_usage() {
cat <<EOF_USAGE cat <<EOF_USAGE
Usage: bash ./AndroidProjectTooling.sh [--quiet] [--build | --build-release-aab | --test | --clean-test | --test-emulator [--hide-emulator-window] | --compile-git] Usage: bash ./AndroidProjectTooling.sh [--quiet] [--build | --build-release-aab | --test | --clean-test | --test-emulator [--hide-emulator-window] | --compile-git | --compile-android-git]
--build Set up the environment and build the debug APK --build Set up the environment and build the debug APK
--build-release-aab Set up the environment and build a release Android App Bundle (AAB) --build-release-aab Set up the environment and build a release Android App Bundle (AAB)
@@ -859,6 +866,7 @@ Usage: bash ./AndroidProjectTooling.sh [--quiet] [--build | --build-release-aab
--test-emulator Set up a visible Android emulator and run debug instrumentation tests on it --test-emulator Set up a visible Android emulator and run debug instrumentation tests on it
--hide-emulator-window Run --test-emulator with the emulator window hidden --hide-emulator-window Run --test-emulator with the emulator window hidden
--compile-git Compile Git for the development host and all Android target ABIs --compile-git Compile Git for the development host and all Android target ABIs
--compile-android-git Compile Git only for the Android target ABIs used by the app
--quiet Write full output to build/reports/android-project-tooling/ and print only a concise result --quiet Write full output to build/reports/android-project-tooling/ and print only a concise result
EOF_USAGE EOF_USAGE
} }
@@ -872,7 +880,7 @@ validate_args() {
shift || true shift || true
case "$mode" in case "$mode" in
""|--build|--build-release-aab|--test|--clean-test|--test-emulator|--compile-git) ""|--build|--build-release-aab|--test|--clean-test|--test-emulator|--compile-git|--compile-android-git)
;; ;;
*) *)
echo "Unknown argument: $mode" >&2 echo "Unknown argument: $mode" >&2
@@ -913,11 +921,18 @@ main() {
require_tool git require_tool git
require_tool perl require_tool perl
require_tool make require_tool make
require_tool clang
require_tool pkg-config require_tool pkg-config
require_tool readelf require_tool readelf
require_tool file require_tool file
local mode="${1:-}"
if [ "$mode" = "--build" ] || [ "$mode" = "--build-release-aab" ] || [ "$mode" = "--test" ] || [ "$mode" = "--clean-test" ] || [ "$mode" = "--compile-git" ] || [ "$mode" = "--test-emulator" ] || [ "$mode" = "--compile-android-git" ]; then
require_tool cargo
fi
if [ "$mode" = "--build" ] || [ "$mode" = "--build-release-aab" ] || [ "$mode" = "--test" ] || [ "$mode" = "--clean-test" ] || [ "$mode" = "--compile-git" ] || [ "$mode" = "--test-emulator" ]; then
require_tool clang
fi
ensure_dir "$TMP_DIR" ensure_dir "$TMP_DIR"
ensure_dir "$SDK_DIR" ensure_dir "$SDK_DIR"
ensure_dir "$GRADLE_USER_HOME_DIR" ensure_dir "$GRADLE_USER_HOME_DIR"
@@ -936,6 +951,7 @@ main() {
log "NDK dir: $ANDROID_NDK_DIR" log "NDK dir: $ANDROID_NDK_DIR"
log "CMake dir: $ANDROID_CMAKE_DIR" log "CMake dir: $ANDROID_CMAKE_DIR"
log "To compile Git for host and Android ABIs: bash ./AndroidProjectTooling.sh --compile-git" log "To compile Git for host and Android ABIs: bash ./AndroidProjectTooling.sh --compile-git"
log "To compile Git only for Android ABIs: bash ./AndroidProjectTooling.sh --compile-android-git"
log "To build without a background Gradle daemon: ./gradlew --no-daemon assembleDebug" log "To build without a background Gradle daemon: ./gradlew --no-daemon assembleDebug"
log "To set up and build in one step: bash ./AndroidProjectTooling.sh --build" log "To set up and build in one step: bash ./AndroidProjectTooling.sh --build"
log "To set up and build a release AAB in one step: bash ./AndroidProjectTooling.sh --build-release-aab" log "To set up and build a release AAB in one step: bash ./AndroidProjectTooling.sh --build-release-aab"

View File

@@ -0,0 +1 @@
trigger test 2026-08-30T10:01:44-05:00

View File

@@ -1,10 +1,16 @@
import java.util.Properties import java.util.Properties
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("keystore.properties") val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) { if (keystorePropertiesFile.exists()) {
keystorePropertiesFile.inputStream().use { keystoreProperties.load(it) } keystorePropertiesFile.inputStream().use { keystoreProperties.load(it) }
} }
val hasReleaseSigning = listOf(
"storeFile",
"storePassword",
"keyAlias",
"keyPassword",
).all { !keystoreProperties.getProperty(it).isNullOrBlank() }
plugins { plugins {
id("com.android.application") id("com.android.application")
@@ -13,13 +19,13 @@ plugins {
android { android {
namespace = "solutions.tretter.githugandroid" namespace = "solutions.tretter.githugandroid"
compileSdk = 35 compileSdk = 36
ndkVersion = "27.2.12479018" ndkVersion = "27.2.12479018"
defaultConfig { defaultConfig {
applicationId = "solutions.tretter.githugandroid" applicationId = "solutions.tretter.githugandroid"
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 36
versionCode = 184 versionCode = 184
versionName = "0.1.183" versionName = "0.1.183"
@@ -34,9 +40,9 @@ android {
} }
signingConfigs { signingConfigs {
if (keystorePropertiesFile.exists()) { if (hasReleaseSigning) {
create("release") { create("release") {
storeFile = file(keystoreProperties.getProperty("storeFile")) storeFile = rootProject.file(keystoreProperties.getProperty("storeFile"))
storePassword = keystoreProperties.getProperty("storePassword") storePassword = keystoreProperties.getProperty("storePassword")
keyAlias = keystoreProperties.getProperty("keyAlias") keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword") keyPassword = keystoreProperties.getProperty("keyPassword")
@@ -45,9 +51,11 @@ android {
} }
buildTypes { buildTypes {
debug {
}
release { release {
isMinifyEnabled = false isMinifyEnabled = false
if (signingConfigs.findByName("release") != null) { if (hasReleaseSigning) {
signingConfig = signingConfigs.getByName("release") signingConfig = signingConfigs.getByName("release")
} }
proguardFiles( proguardFiles(

View File

@@ -1,4 +1,4 @@
plugins { plugins {
id("com.android.application") version "8.6.1" apply false id("com.android.application") version "8.10.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.24" apply false id("org.jetbrains.kotlin.android") version "1.9.24" apply false
} }

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME