BuildChain v1.0.0 — on-device Android build toolchain
System-level KernelSU module: aapt2/aidl/zipalign (API 35), BusyBox, platform-tools, all as static arm64 binaries in the Android framework. Termux integration for Java/Kotlin/Gradle/Python via pkg. CLI tools: buildchain, bc-build, bc-sign. WebUI on :8089 for toolchain management. Turns any Android phone into a native compilation powerhouse.
This commit is contained in:
164
scripts/buildchain
Executable file
164
scripts/buildchain
Executable file
@@ -0,0 +1,164 @@
|
||||
#!/system/bin/sh
|
||||
# BuildChain — main CLI tool
|
||||
# Usage: buildchain <command> [args]
|
||||
|
||||
CONFIG_DIR="/data/adb/buildchain"
|
||||
MODDIR=$(cat "$CONFIG_DIR/moddir" 2>/dev/null)
|
||||
TOOLS="$MODDIR/tools"
|
||||
VERSION="1.0.0"
|
||||
|
||||
usage() {
|
||||
echo "BuildChain v$VERSION — On-device Android build toolchain"
|
||||
echo ""
|
||||
echo "Usage: buildchain <command>"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " status Show installed toolchain components"
|
||||
echo " setup Install Java, Python, Kotlin, Gradle via Termux"
|
||||
echo " env Print current build environment"
|
||||
echo " paths Show all tool paths"
|
||||
echo " test Test all build tools"
|
||||
echo " version Show version info"
|
||||
echo ""
|
||||
echo "Build helpers:"
|
||||
echo " bc-build Compile an Android project"
|
||||
echo " bc-sign Sign an APK with debug or release key"
|
||||
echo ""
|
||||
echo "WebUI: http://localhost:8089"
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
echo "=== BuildChain Status ==="
|
||||
echo ""
|
||||
|
||||
echo "[Build Tools — API 35]"
|
||||
for tool in aapt aapt2 aidl dexdump zipalign split-select; do
|
||||
local path="$TOOLS/build-tools/$tool"
|
||||
if [ -f "$path" ]; then
|
||||
echo " [OK] $tool"
|
||||
else
|
||||
echo " [--] $tool (missing)"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "[Platform Tools]"
|
||||
for tool in adb fastboot sqlite3 e2fsdroid etc1tool mke2fs make_f2fs sload_f2fs; do
|
||||
local path="$TOOLS/platform-tools/$tool"
|
||||
if [ -f "$path" ]; then
|
||||
echo " [OK] $tool"
|
||||
else
|
||||
echo " [--] $tool (missing)"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "[BusyBox]"
|
||||
if [ -f "$TOOLS/busybox" ]; then
|
||||
local applets=$("$TOOLS/busybox" --list 2>/dev/null | wc -l)
|
||||
echo " [OK] busybox ($applets applets)"
|
||||
else
|
||||
echo " [--] busybox (missing)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "[Termux Packages]"
|
||||
local tbin="/data/data/com.termux/files/usr/bin"
|
||||
for pkg in java javac python3 kotlin kotlinc gradle git cmake make gcc g++ clang; do
|
||||
if [ -f "$tbin/$pkg" ]; then
|
||||
echo " [OK] $pkg"
|
||||
else
|
||||
echo " [--] $pkg (run: buildchain setup)"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "[Android Environment]"
|
||||
echo " Device: $(getprop ro.product.model)"
|
||||
echo " Android: $(getprop ro.build.version.release) (API $(getprop ro.build.version.sdk))"
|
||||
echo " Arch: $(uname -m)"
|
||||
echo " Kernel: $(uname -r)"
|
||||
}
|
||||
|
||||
cmd_env() {
|
||||
[ -f "$CONFIG_DIR/env.sh" ] && cat "$CONFIG_DIR/env.sh" || echo "Environment not configured. Run: buildchain setup"
|
||||
}
|
||||
|
||||
cmd_paths() {
|
||||
echo "=== Tool Paths ==="
|
||||
echo "Build tools: $TOOLS/build-tools/"
|
||||
echo "Platform tools: $TOOLS/platform-tools/"
|
||||
echo "BusyBox: $TOOLS/busybox"
|
||||
echo "Config: $CONFIG_DIR/"
|
||||
echo "Module: $MODDIR"
|
||||
echo ""
|
||||
echo "=== Resolved Binaries ==="
|
||||
for tool in aapt2 aidl zipalign java javac python3 kotlinc gradle git make cmake clang busybox; do
|
||||
local p=$(which "$tool" 2>/dev/null)
|
||||
[ -n "$p" ] && echo " $tool -> $p" || echo " $tool -> (not found)"
|
||||
done
|
||||
}
|
||||
|
||||
cmd_test() {
|
||||
echo "=== Testing Build Tools ==="
|
||||
echo ""
|
||||
|
||||
echo "aapt2:"
|
||||
"$TOOLS/build-tools/aapt2" version 2>&1 && echo " PASS" || echo " FAIL"
|
||||
echo ""
|
||||
|
||||
echo "aidl:"
|
||||
"$TOOLS/build-tools/aidl" --version 2>&1 && echo " PASS" || echo " FAIL"
|
||||
echo ""
|
||||
|
||||
echo "zipalign:"
|
||||
"$TOOLS/build-tools/zipalign" 2>&1 | head -1 && echo " PASS" || echo " FAIL"
|
||||
echo ""
|
||||
|
||||
echo "dexdump:"
|
||||
"$TOOLS/build-tools/dexdump" 2>&1 | head -1 && echo " PASS" || echo " FAIL"
|
||||
echo ""
|
||||
|
||||
echo "busybox:"
|
||||
"$TOOLS/busybox" --help 2>&1 | head -1 && echo " PASS" || echo " FAIL"
|
||||
echo ""
|
||||
|
||||
# Test Termux tools if available
|
||||
local tbin="/data/data/com.termux/files/usr/bin"
|
||||
if [ -f "$tbin/java" ]; then
|
||||
echo "java:"
|
||||
"$tbin/java" -version 2>&1 | head -1
|
||||
echo ""
|
||||
fi
|
||||
if [ -f "$tbin/python3" ]; then
|
||||
echo "python:"
|
||||
"$tbin/python3" --version 2>&1
|
||||
echo ""
|
||||
fi
|
||||
if [ -f "$tbin/kotlinc" ]; then
|
||||
echo "kotlin:"
|
||||
"$tbin/kotlinc" -version 2>&1 | head -1
|
||||
echo ""
|
||||
fi
|
||||
if [ -f "$tbin/gradle" ]; then
|
||||
echo "gradle:"
|
||||
"$tbin/gradle" --version 2>&1 | grep "Gradle " | head -1
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_version() {
|
||||
echo "BuildChain v$VERSION"
|
||||
echo "Build tools: API 35 (35.0.2)"
|
||||
echo "Target: $(getprop ro.product.model) / Android $(getprop ro.build.version.release)"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
status) cmd_status ;;
|
||||
setup) sh "$MODDIR/scripts/buildchain-setup" ;;
|
||||
env) cmd_env ;;
|
||||
paths) cmd_paths ;;
|
||||
test) cmd_test ;;
|
||||
version) cmd_version ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user