Since gradle android plugins 2.2-alpha4:
Gradle will attempt to download missing SDK packages that a project depends on
Which
Here is my Docker setup.
You can follow from a plain Linux environment.
Note that yes |
and --licenses --sdk_root=${ANDROID_HOME}
clauses.
It seems sdkmanager --update
reverts agreements, so yes |
is appeared twice.
FROM openjdk:8
# Install dev-essential(gnumake)
RUN apt update
RUN apt install -y build-essential
# Set ENV
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" \
ANDROID_HOME="/usr/local/android-sdk" \
ANDROID_VERSION=28 \
ANDROID_BUILD_TOOLS_VERSION=28.0.3 \
GRADLE_VERSION=4.10.3 \
NDK_VERSION=r16b
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android \
&& cd "$ANDROID_HOME" \
&& curl -o sdk.zip $SDK_URL \
&& unzip sdk.zip \
&& rm sdk.zip \
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses --sdk_root=${ANDROID_HOME}
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platforms;android-${ANDROID_VERSION}" \
"platform-tools" --sdk_root=${ANDROID_HOME}
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
RUN mkdir /opt/gradle
RUN unzip gradle-${GRADLE_VERSION}-all.zip -d /opt/gradle
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
# Install NDK
RUN wget https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-x86_64.zip
RUN mkdir /opt/ndk-bundle
RUN unzip android-ndk-${NDK_VERSION}-linux-x86_64.zip -d /opt/ndk-bundle
ENV PATH=${PATH}:/opt/ndk-bundle
RUN mkdir /application
WORKDIR /application
The android
tool is deprecated and you should use the sdkmanager
instead. sdkmanager
also writes the licenses file when you first accept it. The license changes depending on which SDK you are using so even though the command
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
works on some systems. It won't work on all. Some SDK installs expect to license file to end without a newline in the file so try adding a -n
to the echo command.
echo -n -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
If that isn't working you can try using the base64 encoding instead.
So to discover my license:
$> rm ${ANDROID_HOME}/
$> unzip tools_r25.2.3-linux.zip -d ${ANDROID_HOME}
$> ${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-23;default;x86_64"
It'll prompt you to accept the license. After accepting it'll copy it to ${ANDROID_HOME}/licenses/android-sdk-license
. To ensure you always get exactly what is written use base64
.
$> base64 ${ANDROID_HOME}/licenses/android-sdk-license
Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=
Then you can use base64 -d
recreate the file exactly.
$> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license
You can verify if the file written is what is expected by running a sha1sum on it.
$> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license
da6b80c9c47b41c0bf7032938e7137a58a3dc249
I had the same error while using Cordova.
The problem was due to the fact that I installed Android Sdk through Android Studio and through apt
with apt install android-sdk adb
. And Cordova was calling the files installed through apt
instead of the files in my home directory.
It worked once I changed the path to SDK in bash:
# Change path
export ANDROID_HOME="$HOME/Android/Sdk/"
echo "Android home = $ANDROID_HOME"
# Accept licenses
eval "${ANDROID_HOME}/tools/bin/sdkmanager --licenses"
# Run Cordova
cordova build android
Then I removed the system files that weren't used anymore: apt remove android-sdk adb
.
AndroidSDK can finally accept licenses.
yes | sdkmanager --licenses
EDIT:
as pointed out in the comments by @MoOx, on macOS, you can do
yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
as pointed out in the comments by @pho, @mikebridge and @ Noitidart on Windows, you can do
cmd.exe /C"%ANDROID_HOME%\tools\bin\sdkmanager.bat --licenses"
be sure to install java before
For an error message about SDK api number 25:
android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository
cd $ANDROID_HOME/tools/bin
yes | ./sdkmanager --update
or
yes | $ANDROID_HOME/tools/bin/sdkmanager --update