Pin generated Gradle wrapper

This commit is contained in:
Dark98
2026-07-02 05:15:37 +01:00
parent 4a1b873d2c
commit 4b62fa108a
3 changed files with 36 additions and 12 deletions
+2 -4
View File
@@ -2,10 +2,8 @@
## Bugs
- The generated `gradlew` wrapper just forwards to the system `gradle` package. That is convenient in Termux, but it means builds are not pinned to a project-specific Gradle wrapper version.
- The generated app pins Android Gradle Plugin `8.5.2` without pinning a compatible Gradle wrapper version. That can break when the installed Gradle package changes or is incompatible with that plugin version.
- The CLI is now split into a dispatcher plus per-command scripts under `lib/commands/`, which improves readability but adds more files to maintain.
No known bugs at the moment.
## TODO
- Consider generating a real Gradle wrapper for new projects instead of relying on `gradle` from Termux.
- Consider vendoring wrapper files so `android-builder new` does not need a system `gradle` binary at generation time.
+7
View File
@@ -57,9 +57,16 @@ The CLI is now split into smaller scripts for readability and maintenance:
- Gradle settings and properties
- a single `app` module
- a real Gradle wrapper for the generated project
- a minimal `MainActivity`
- a simple default theme and string resources
The template defaults are controlled in one place through environment variables:
- `ANDROID_BUILDER_GRADLE_VERSION` defaults to `8.7`
- `ANDROID_BUILDER_AGP_VERSION` defaults to `8.5.2`
- `ANDROID_BUILDER_GRADLE_DISTRIBUTION_SHA256` defaults to the official checksum for `gradle-8.7-bin.zip`
## Notes
- The project is designed around Termux.
+27 -8
View File
@@ -5,6 +5,9 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}"
SDK="$HOME/android-sdk"
PLATFORM="${ANDROID_BUILDER_PLATFORM:-android-33}"
GRADLE_VERSION="${ANDROID_BUILDER_GRADLE_VERSION:-8.7}"
AGP_VERSION="${ANDROID_BUILDER_AGP_VERSION:-8.5.2}"
GRADLE_DISTRIBUTION_SHA256="${ANDROID_BUILDER_GRADLE_DISTRIBUTION_SHA256:-544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d}"
ensure_termux() {
if [ -z "${PREFIX:-}" ] || [ ! -d "/data/data/com.termux/files/usr" ]; then
@@ -13,6 +16,24 @@ ensure_termux() {
fi
}
require_gradle() {
if ! command -v gradle >/dev/null 2>&1; then
echo "Error: gradle is required to generate the project wrapper."
echo "Run: android-builder setup"
exit 1
fi
}
set_gradle_wrapper_sha256() {
WRAPPER_PROPERTIES="$1"
if grep -q '^distributionSha256Sum=' "$WRAPPER_PROPERTIES"; then
sed -i "s/^distributionSha256Sum=.*/distributionSha256Sum=$GRADLE_DISTRIBUTION_SHA256/" "$WRAPPER_PROPERTIES"
else
printf '\ndistributionSha256Sum=%s\n' "$GRADLE_DISTRIBUTION_SHA256" >> "$WRAPPER_PROPERTIES"
fi
}
get_project_name() {
if [ -f settings.gradle ]; then
DETECTED_NAME="$(grep -E '^rootProject.name[[:space:]]*=' settings.gradle \
@@ -38,6 +59,8 @@ get_apk_path() {
}
create_base_project() {
require_gradle
NAME="$1"
MESSAGE="$2"
PACKAGE="com.example.$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9')"
@@ -71,7 +94,7 @@ EOF2
cat > "$NAME/app/build.gradle" <<EOF2
plugins {
id 'com.android.application' version '8.5.2'
id 'com.android.application' version '$AGP_VERSION'
}
android {
@@ -156,13 +179,8 @@ public class MainActivity extends Activity {
}
EOF2
cat > "$NAME/gradlew" <<'EOF2'
#!/data/data/com.termux/files/usr/bin/bash
set -e
exec gradle "$@"
EOF2
chmod +x "$NAME/gradlew"
(cd "$NAME" && gradle wrapper --gradle-version "$GRADLE_VERSION" --distribution-type bin)
set_gradle_wrapper_sha256 "$NAME/gradle/wrapper/gradle-wrapper.properties"
echo "Created project: $NAME"
echo
@@ -170,4 +188,5 @@ EOF2
echo " cd $NAME"
echo " android-builder build"
echo " android-builder export"
echo " ./gradlew assembleDebug"
}