Pin generated Gradle wrapper
This commit is contained in:
+2
-4
@@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
## Bugs
|
## 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.
|
No known bugs at the moment.
|
||||||
- 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.
|
|
||||||
|
|
||||||
## TODO
|
## 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.
|
||||||
|
|||||||
@@ -57,9 +57,16 @@ The CLI is now split into smaller scripts for readability and maintenance:
|
|||||||
|
|
||||||
- Gradle settings and properties
|
- Gradle settings and properties
|
||||||
- a single `app` module
|
- a single `app` module
|
||||||
|
- a real Gradle wrapper for the generated project
|
||||||
- a minimal `MainActivity`
|
- a minimal `MainActivity`
|
||||||
- a simple default theme and string resources
|
- 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
|
## Notes
|
||||||
|
|
||||||
- The project is designed around Termux.
|
- The project is designed around Termux.
|
||||||
|
|||||||
+27
-8
@@ -5,6 +5,9 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|||||||
AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}"
|
AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}"
|
||||||
SDK="$HOME/android-sdk"
|
SDK="$HOME/android-sdk"
|
||||||
PLATFORM="${ANDROID_BUILDER_PLATFORM:-android-33}"
|
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() {
|
ensure_termux() {
|
||||||
if [ -z "${PREFIX:-}" ] || [ ! -d "/data/data/com.termux/files/usr" ]; then
|
if [ -z "${PREFIX:-}" ] || [ ! -d "/data/data/com.termux/files/usr" ]; then
|
||||||
@@ -13,6 +16,24 @@ ensure_termux() {
|
|||||||
fi
|
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() {
|
get_project_name() {
|
||||||
if [ -f settings.gradle ]; then
|
if [ -f settings.gradle ]; then
|
||||||
DETECTED_NAME="$(grep -E '^rootProject.name[[:space:]]*=' settings.gradle \
|
DETECTED_NAME="$(grep -E '^rootProject.name[[:space:]]*=' settings.gradle \
|
||||||
@@ -38,6 +59,8 @@ get_apk_path() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_base_project() {
|
create_base_project() {
|
||||||
|
require_gradle
|
||||||
|
|
||||||
NAME="$1"
|
NAME="$1"
|
||||||
MESSAGE="$2"
|
MESSAGE="$2"
|
||||||
PACKAGE="com.example.$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9')"
|
PACKAGE="com.example.$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9')"
|
||||||
@@ -71,7 +94,7 @@ EOF2
|
|||||||
|
|
||||||
cat > "$NAME/app/build.gradle" <<EOF2
|
cat > "$NAME/app/build.gradle" <<EOF2
|
||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '8.5.2'
|
id 'com.android.application' version '$AGP_VERSION'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@@ -156,13 +179,8 @@ public class MainActivity extends Activity {
|
|||||||
}
|
}
|
||||||
EOF2
|
EOF2
|
||||||
|
|
||||||
cat > "$NAME/gradlew" <<'EOF2'
|
(cd "$NAME" && gradle wrapper --gradle-version "$GRADLE_VERSION" --distribution-type bin)
|
||||||
#!/data/data/com.termux/files/usr/bin/bash
|
set_gradle_wrapper_sha256 "$NAME/gradle/wrapper/gradle-wrapper.properties"
|
||||||
set -e
|
|
||||||
exec gradle "$@"
|
|
||||||
EOF2
|
|
||||||
|
|
||||||
chmod +x "$NAME/gradlew"
|
|
||||||
|
|
||||||
echo "Created project: $NAME"
|
echo "Created project: $NAME"
|
||||||
echo
|
echo
|
||||||
@@ -170,4 +188,5 @@ EOF2
|
|||||||
echo " cd $NAME"
|
echo " cd $NAME"
|
||||||
echo " android-builder build"
|
echo " android-builder build"
|
||||||
echo " android-builder export"
|
echo " android-builder export"
|
||||||
|
echo " ./gradlew assembleDebug"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user