Vendor Gradle wrappers for new projects

This commit is contained in:
Dark98
2026-07-02 05:33:07 +01:00
parent 4b62fa108a
commit 6df469c073
9 changed files with 28 additions and 18 deletions
+1 -1
View File
@@ -6,4 +6,4 @@ No known bugs at the moment.
## TODO
- Consider vendoring wrapper files so `android-builder new` does not need a system `gradle` binary at generation time.
No open TODOs at the moment.
+3 -1
View File
@@ -57,7 +57,7 @@ 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
- vendored Gradle wrapper files for the generated project
- a minimal `MainActivity`
- a simple default theme and string resources
@@ -67,6 +67,8 @@ The template defaults are controlled in one place through environment variables:
- `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`
The project generator and the generated projects themselves do not need a system `gradle` binary anymore.
## Notes
- The project is designed around Termux.
+1 -1
View File
@@ -11,7 +11,7 @@ case "$COMMAND" in
-h|--help) TARGET="help" ;;
esac
shift || true
exec "$ROOT_DIR/lib/commands/$TARGET.sh" "$@"
exec bash "$ROOT_DIR/lib/commands/$TARGET.sh" "$@"
;;
*)
echo "Unknown command: $COMMAND"
+3 -1
View File
@@ -20,5 +20,7 @@ if [ -f ./gradlew ]; then
chmod +x ./gradlew
./gradlew "$TASK"
else
gradle "$TASK"
echo "Error: ./gradlew is missing."
echo "This project needs the vendored Gradle wrapper generated by android-builder new."
exit 1
fi
-2
View File
@@ -9,8 +9,6 @@ echo
java -version
echo
gradle -v | grep Gradle
echo
aapt2 version
echo
+1 -1
View File
@@ -9,7 +9,7 @@ ensure_termux
echo "==> Installing packages"
pkg update -y
pkg install -y git curl wget unzip zip nano \
openjdk-21 gradle aapt2 apksigner d8 dx android-tools
openjdk-21 aapt2 apksigner d8 dx android-tools
echo "==> Configuring Java"
JAVA_BIN="$(command -v java)"
+14 -11
View File
@@ -8,6 +8,7 @@ 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}"
TEMPLATE_DIR="$ROOT_DIR/templates/gradle-wrapper"
ensure_termux() {
if [ -z "${PREFIX:-}" ] || [ ! -d "/data/data/com.termux/files/usr" ]; then
@@ -16,14 +17,6 @@ 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"
@@ -59,8 +52,6 @@ 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')"
@@ -179,7 +170,19 @@ public class MainActivity extends Activity {
}
EOF2
(cd "$NAME" && gradle wrapper --gradle-version "$GRADLE_VERSION" --distribution-type bin)
mkdir -p "$NAME/gradle/wrapper"
cp "$TEMPLATE_DIR/gradle-wrapper.jar" "$NAME/gradle/wrapper/gradle-wrapper.jar"
cp "$TEMPLATE_DIR/gradlew" "$NAME/gradlew"
chmod +x "$NAME/gradlew"
cat > "$NAME/gradle/wrapper/gradle-wrapper.properties" <<EOF2
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip
distributionSha256Sum=$GRADLE_DISTRIBUTION_SHA256
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
EOF2
set_gradle_wrapper_sha256 "$NAME/gradle/wrapper/gradle-wrapper.properties"
echo "Created project: $NAME"
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
#!/data/data/com.termux/files/usr/bin/bash
set -e
APP_HOME="$(cd "$(dirname "$0")" && pwd -P)"
exec java -classpath "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" org.gradle.wrapper.GradleWrapperMain "$@"