204 lines
4.2 KiB
Bash
Executable File
204 lines
4.2 KiB
Bash
Executable File
#!/data/data/com.termux/files/usr/bin/bash
|
|
set -e
|
|
|
|
AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}"
|
|
SDK="$HOME/android-sdk"
|
|
PLATFORM="${ANDROID_BUILDER_PLATFORM:-android-33}"
|
|
|
|
install_packages() {
|
|
echo "==> Installing Termux packages"
|
|
pkg update -y
|
|
pkg install -y git curl wget unzip zip nano \
|
|
openjdk-21 gradle aapt2 apksigner d8 dx android-tools
|
|
}
|
|
|
|
configure_java() {
|
|
echo "==> Configuring Java"
|
|
|
|
JAVA_BIN="$(command -v java || true)"
|
|
|
|
if [ -z "$JAVA_BIN" ]; then
|
|
echo "ERROR: java not found after installing openjdk-21."
|
|
exit 1
|
|
fi
|
|
|
|
JAVA_HOME_DETECTED="$(dirname "$(dirname "$(readlink -f "$JAVA_BIN")")")"
|
|
|
|
export JAVA_HOME="$JAVA_HOME_DETECTED"
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
|
|
touch "$HOME/.bashrc"
|
|
|
|
grep -q 'ANDROID_BUILDER_JAVA_HOME' "$HOME/.bashrc" || cat >> "$HOME/.bashrc" <<EOF
|
|
|
|
# Java for AndroidBuilder
|
|
export JAVA_HOME=$JAVA_HOME_DETECTED
|
|
export PATH=\$JAVA_HOME/bin:\$PATH
|
|
export ANDROID_BUILDER_JAVA_HOME=\$JAVA_HOME
|
|
EOF
|
|
|
|
java -version
|
|
echo "JAVA_HOME=$JAVA_HOME"
|
|
}
|
|
|
|
install_cmdline_tools() {
|
|
echo "==> Installing Android SDK cmdline-tools"
|
|
|
|
mkdir -p "$SDK/cmdline-tools"
|
|
cd "$SDK/cmdline-tools"
|
|
|
|
if [ ! -d latest ]; then
|
|
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip
|
|
unzip -q cmdline-tools.zip
|
|
mv cmdline-tools latest
|
|
rm cmdline-tools.zip
|
|
fi
|
|
}
|
|
|
|
configure_android_environment() {
|
|
echo "==> Configuring Android SDK environment"
|
|
|
|
touch "$HOME/.bashrc"
|
|
|
|
grep -q 'ANDROID_HOME' "$HOME/.bashrc" || cat >> "$HOME/.bashrc" <<'EOF'
|
|
|
|
# AndroidBuilder SDK environment
|
|
export ANDROID_HOME=$HOME/android-sdk
|
|
export ANDROID_SDK_ROOT=$ANDROID_HOME
|
|
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
|
|
EOF
|
|
|
|
export ANDROID_HOME="$SDK"
|
|
export ANDROID_SDK_ROOT="$SDK"
|
|
export PATH="$SDK/cmdline-tools/latest/bin:$PATH"
|
|
}
|
|
|
|
accept_licenses() {
|
|
echo "==> Accepting Android SDK licenses"
|
|
|
|
mkdir -p "$SDK/licenses"
|
|
|
|
cat > "$SDK/licenses/android-sdk-license" <<'EOF'
|
|
24333f8a63b6825ea9c5514f83c2829b004d1fee
|
|
d56f5187479451eabf01fb78af6dfcb131a6481e
|
|
8933bad161af4178b1185d1a37fbf41ea5269c55
|
|
EOF
|
|
}
|
|
|
|
install_sdk_platform() {
|
|
echo "==> Installing SDK platform: $PLATFORM"
|
|
|
|
command -v java >/dev/null || {
|
|
echo "ERROR: Java is not available."
|
|
exit 1
|
|
}
|
|
|
|
command -v sdkmanager >/dev/null || {
|
|
echo "ERROR: sdkmanager not found."
|
|
exit 1
|
|
}
|
|
|
|
sdkmanager "platforms;$PLATFORM"
|
|
}
|
|
|
|
configure_gradle() {
|
|
echo "==> Writing Gradle config"
|
|
|
|
mkdir -p "$HOME/.gradle"
|
|
|
|
cat > "$HOME/.gradle/gradle.properties" <<EOF
|
|
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
|
|
org.gradle.daemon=true
|
|
org.gradle.parallel=true
|
|
org.gradle.caching=true
|
|
android.aapt2FromMavenOverride=$PREFIX/bin/aapt2
|
|
EOF
|
|
}
|
|
|
|
setup() {
|
|
install_packages
|
|
configure_java
|
|
install_cmdline_tools
|
|
configure_android_environment
|
|
accept_licenses
|
|
install_sdk_platform
|
|
configure_gradle
|
|
|
|
echo
|
|
echo "Setup complete."
|
|
echo "Run:"
|
|
echo " source ~/.bashrc"
|
|
echo " android-builder doctor"
|
|
}
|
|
|
|
doctor() {
|
|
echo "AndroidBuilder Doctor"
|
|
echo
|
|
|
|
echo "Java:"
|
|
java -version || true
|
|
echo
|
|
|
|
echo "Gradle:"
|
|
gradle -v | grep Gradle || true
|
|
echo
|
|
|
|
echo "AAPT2:"
|
|
aapt2 version || true
|
|
echo
|
|
|
|
echo "SDK:"
|
|
echo "$SDK"
|
|
test -f "$SDK/platforms/$PLATFORM/android.jar" \
|
|
&& echo "android.jar: found" \
|
|
|| echo "android.jar: missing"
|
|
}
|
|
|
|
build() {
|
|
test -f local.properties || echo "sdk.dir=$SDK" > local.properties
|
|
|
|
if [ -f ./gradlew ]; then
|
|
chmod +x ./gradlew
|
|
./gradlew assembleDebug
|
|
else
|
|
gradle assembleDebug
|
|
fi
|
|
}
|
|
|
|
install_apk() {
|
|
APK=$(find . -path "*/build/outputs/apk/debug/*.apk" -type f | head -n 1)
|
|
|
|
if [ -z "$APK" ]; then
|
|
echo "No debug APK found."
|
|
exit 1
|
|
fi
|
|
|
|
termux-open "$APK"
|
|
}
|
|
|
|
help() {
|
|
echo "AndroidBuilder"
|
|
echo
|
|
echo "Usage:"
|
|
echo " android-builder setup"
|
|
echo " android-builder doctor"
|
|
echo " android-builder build"
|
|
echo " android-builder install"
|
|
}
|
|
|
|
COMMAND="$1"
|
|
shift || true
|
|
|
|
case "$COMMAND" in
|
|
setup) setup "$@" ;;
|
|
doctor) doctor "$@" ;;
|
|
build) build "$@" ;;
|
|
install) install_apk "$@" ;;
|
|
help|-h|--help|"") help ;;
|
|
*)
|
|
echo "Unknown command: $COMMAND"
|
|
echo "Run: android-builder help"
|
|
exit 1
|
|
;;
|
|
esac
|