Skip to content

Commit

Permalink
Merge branch 'main' into ci-detect
Browse files Browse the repository at this point in the history
  • Loading branch information
phorcys420 authored Aug 11, 2024
2 parents 93e8760 + 21ddcec commit 6080b56
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ jobs:
id: filter
with:
filters: |
android-sdk:
- src/android-sdk/**
- test/android-sdk/**
burp-suite:
- src/burp-suite/**
- test/burp-suite/**
Expand Down
3 changes: 3 additions & 0 deletions src/android-sdk/NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
> [!NOTE]
> It's fine if we let `version` run out of date since it's rarely updated.
> (version from "Command line tools only" section @ https://developer.android.com/studio?hl=en)
51 changes: 51 additions & 0 deletions src/android-sdk/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"name": "Android SDK (via Google CDN)",
"id": "android-sdk",
"version": "1.0.0",
"description": "A feature that installs the Android command line tools and SDK",
"keywords": ["android", "mobile", "mobile-development"],
"options": {
"version": {
"type": "string",
"proposals": [
"11076708"
],
"default": "11076708",
"description": "Select the Android command line tools version ('latest' is not supported)"
},

"installMavenRepos": {
"type": "boolean",
"default": true,
"description": "Whether or not to install the Android and Google Maven repos"
},

"installPlayServices": {
"type": "boolean",
"default": true,
"description": "Whether or not to install Play Services"
},

"installEmulator": {
"type": "boolean",
"default": false,
"description": "Whether or not to install the Android Emulator (NOTE: you still have to install the images yourself using sdkmanager)"
}
},

"containerEnv": {
"ANDROID_HOME": "/usr/local/android-sdk",
"ANDROID_CMDLINE_TOOLS_HOME": "${ANDROID_HOME}/cmdline-tools",
"PATH": "${PATH}:${ANDROID_HOME}:${ANDROID_CMDLINE_TOOLS_HOME}/latest/bin:${ANDROID_HOME}/emulator:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools"
},

"installsAfter": [
"ghcr.io/devcontainers/features/common-utils"
],

"dependsOn": {
"ghcr.io/phorcys420/devcontainer-features/lib-common:1": {},

"ghcr.io/devcontainers/features/java:1": {}
}
}
64 changes: 64 additions & 0 deletions src/android-sdk/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/env bash

set -euo pipefail

FEATURE_NAME="android-sdk"
echo "Activating feature '$FEATURE_NAME'"

# Source lib-common feature (DEVCONTAINER_LIBRARIES_HOME is defined by lib-common)
source "$DEVCONTAINER_LIBRARIES_HOME/common/1/main.sh"

# Load options
VERSION=${VERSION:-11076708}

INSTALL_MAVEN_REPOS=${INSTALL_MAVEN_REPOS:-"true"}
INSTALL_PLAY_SERVICES=${INSTALL_PLAY_SERVICES:-"true"}
INSTALL_EMULATOR=${INSTALL_EMULATOR:-"false"}

# ANDROID_HOME and ANDROID_CMDLINE_TOOLS_HOME are defined in the containerEnv value of the feature's manifest
ANDROID_HOME=${ANDROID_HOME:-/usr/local/android-sdk}
ANDROID_CMDLINE_TOOLS_HOME=${ANDROID_CMDLINE_TOOLS_HOME:-${ANDROID_HOME}/cmdline-tools}

# Check for dependencies
checkPackages curl ca-certificates unzip

TMP=$(mktemp -d)
DESTINATION_FILE="$TMP/android-sdk.zip"

echo "[$FEATURE_NAME] [+] Downloading version $VERSION of Android command line tools"

curl --get --location --silent --show-error --fail \
--output "$DESTINATION_FILE" \
"https://dl.google.com/android/repository/commandlinetools-linux-${VERSION}_latest.zip"

mkdir -p "$ANDROID_CMDLINE_TOOLS_HOME"

echo "[$FEATURE_NAME] [+] Extracting Android command line tools"
unzip "$TMP/android-sdk.zip" -d "$ANDROID_CMDLINE_TOOLS_HOME"
mv "$ANDROID_CMDLINE_TOOLS_HOME/cmdline-tools" "$ANDROID_CMDLINE_TOOLS_HOME/latest"

echo "[$FEATURE_NAME] [+] Accepting sdkmanager's licenses"
(yes || true) | sdkmanager --licenses


TOOLS=("tools" "platform-tools" "build-tools;34.0.0")

if [ "$INSTALL_MAVEN_REPOS" = "true" ]; then
echo "[$FEATURE_NAME] [+] Adding Android and Google's Maven repositories to the list of tools"
TOOLS+=("extras;android;m2repository" "extras;google;m2repository")
fi

if [ "$INSTALL_PLAY_SERVICES" = "true" ]; then
echo "[$FEATURE_NAME] [+] Adding play services to the list of tools"
TOOLS+=("extras;google;google_play_services")
fi

if [ "$INSTALL_EMULATOR" = "true" ]; then
echo "[$FEATURE_NAME] [+] Adding the emulator to the list of tools"
TOOLS+=("emulator")
fi

echo "[$FEATURE_NAME] [+] Installing SDK tools"
sdkmanager --install "${TOOLS[@]}"

rm -rf "$TMP"
1 change: 1 addition & 0 deletions test/android-sdk/scenarios.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
18 changes: 18 additions & 0 deletions test/android-sdk/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env bash

set -euo pipefail

# Optional: Import test library bundled with the devcontainer CLI
source dev-container-features-test-lib

check "Android SDK folder exists" test -d "$ANDROID_HOME"

BINARY_LIST=("sdkmanager" "adb")

for binary in "${BINARY_LIST[@]}"; do
check "Android SDK binary '$binary' is in the PATH" which "$binary"
done

# Report results
# If any of the checks above exited with a non-zero exit code, the test will fail.
reportResults

0 comments on commit 6080b56

Please sign in to comment.