Since gradle android plugins 2.2-alpha4:
Gradle will attempt to download missing SDK packages that a project depends on
Which is amazingly cool and was know to be a JakeWharton project.
But, to download the SDK library you need to: accept the license agreements or gradle tells you:
You have not accepted the license agreements of the following SDK components: [Android SDK Build-Tools 24, Android SDK Platform 24]. Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager. Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html
And this is a problem because I would love to install all sdk dependencies while doing a gradle build
.
I am looking for a solution to automatically accept all licenses. Maybe a gradle script ? Do you have any ideas ?
echo y |
in front of that command to auto accept the licence. Useful when running on a headless CI box :)
~/.android/tools/android update sdk --no-ui --filter build-tools-25.0.0,android-25,extra-android-m2repository
because the android
tool was localized to my home
$ANDROID_SDK_PATH
to the actual root path where you've installed the SDK (i.e.: /opt/android-sdk
), or just put the path directly (i.e.: yes | sdkmanager --licenses --sdk_root=/opt/android-sdk
)
UPDATE 2021 This should be the accepted answer as its easy and upto date
AndroidSDK can finally accept licenses.
Go to Android\sdk\tools\bin
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
I was getting this error:
License for package Android SDK Build-Tools 30.0.2 not accepted.
So, I went to Tools -> SDK Manager -> SDK Tools. Then I installed Google Play Licensing Library. It solved the problem.
https://i.stack.imgur.com/hJ5s0.png
android-sdk/tools/bin/sdkmanager --licenses
I have encountered this with the alpha5
preview.
Jake Wharton pointed out to me that you can currently use
mkdir -p "$ANDROID_SDK/licenses"
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"
to recreate the current $ANDROID_HOME/license
folder on you machine. This would have the same result as the process outlined in the link of the error msg (http://tools.android.com/tech-docs/new-build-system/license).
The hashes are sha1s of the licence text, which I imagine will be periodically updated, so this code will only work for so long :)
And install it manually, but it is the gradle's new feature purpose to do it.
I was surprised at first that this didnt work out of the box, even when I had accepted the licenses for the named components via the android
tool, but it was pointed out to me its the SDK manager inside AS that creates the /licenses
folder.
I guess that official tools would not want to skip this step for legal reasons.
Rereading the release notes it states
SDK auto-download: Gradle will attempt to download missing SDK packages that a project depends on.
Which does not mean it will work if you have not installed the android tools yet and have already accepted the latest license(s).
EDIT: Saying that, it still does not work on my test gubuntu box until I link the SDK up to AS. CI works fine though - not sure what the difference is...
mkdir -p
instead of || true
.
echo
: echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "${ANDROID_HOME}/licenses/android-sdk-license"
. But I think your problem hides somewhere else.
For the newest Android Studio (2.3) the best way to update/accept all licenses is to run:
cd $ANDROID_HOME
tools/bin/sdkmanager --licenses
you might still need to copy the licence files to other locations based on your setup.
tools/bin/sdkmanager --licenses
yes
into this command somehow for automated build systems? You won't always have interactive console access to these machines, so pressing y
on keyboard physically won't work.
cd $ANDROID_HOME
before executing this command
For the new sdkmanager
utility:
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
There's a bit of a delay between yesses, so the command could hang with the license showing for a while, but it doesn't require human intervention.
up-to-date
answer. It seems --licenses
does not exist anymore. Note: to see list of possible versions that can be provided: $ANDROID_HOME/tools/bin/sdkmanager --list
yes | android-sdk-linux/tools/bin/sdkmanager --licenses || true
in my CI.
If you are using Jenkins, you can use the following bash script as first step in the build process:
(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u
This will of course install ALL available updates, but it will save you some time if you can spare the disk space. The sleep is to avoid the broken readline in the installation program, since "yes" does not work properly in this case.
EDIT: You also need to add the "Install Android project prerequisites" plugin in the build step to get the correct $ANDROID_HOME if you are using the built-in SDK manager.
this solved my error
echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
does the same thing.
We found same issue building the project on Jenkins. With buildToolsVersion '25.0.2'
, we must accept licenses before building. In our case, we needed to run:
yes | sdkmanager --update
that accepts licenses for the sdkmanager itself, and then
yes | sdkmanager --licenses
that accepts new licenses not previously accepted
Remember: run these commans with the same user that jenkins
does. In our Debian, the Jenkins user is just jenkins
. In other words: doing it as root
will create the accepted licenses as root
, so Jenkins will not be able to read them.
By the way, we found sdkmanager
at /var/lib/jenkins/tools/android-sdk/tools/bin
. If yours is not there, find it with find / -name "sdkmanager"
Unfortunately the way as OP originally solved it does not always work. If you find from the error message what is your builds current build-tools version. It could be that it is a higher version of build-tools that is missing. In that case you need to manually start SDK Manager and add the build-tools and accept license.
Per OP instructions, it look as follows.
$ ./gradlew build
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html. FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':app'. > You have not accepted the license agreements of the following SDK components: [Android SDK Build-Tools 24.0.2]. ... BUILD FAILED
NOTE: 2017-04-16 The android tool has now been deprecated in favor of the new sdkmanager. Please see Joe Lawson's answer and subsequent posts from March (2017) and onward.
Then adjust you command as follows:
android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository
Refresh Sources: Fetching https://dl.google.com/android/repository/addons_list-2.xml Validate XML Parse XML Fetched Add-ons List successfully Refresh Sources Fetching URL: https://dl.google.com/android/repository/repository-11.xml Validate XML: https://dl.google.com/android/repository/repository-11.xml Parse XML: https://dl.google.com/android/repository/repository-11.xml ... Error: Ignoring unknown package filter 'build-tools-24.0.2' ------------------------------- License id: android-sdk-license-xxxxxxxx Used by: - SDK Platform Android 7.0, API 24, revision 2 - Android Support Repository, revision 39 ------------------------------- ... November 20, 2015 Do you accept the license 'android-sdk-license-xxxxxxxx' [y/n]: y Installing Archives: Preparing to install archives Downloading SDK Platform Android 7.0, API 24, revision 2 Installing SDK Platform Android 7.0, API 24, revision 2 Installed SDK Platform Android 7.0, API 24, revision 296%) Downloading Android Support Repository, revision 39 Installing Android Support Repository, revision 39 Installed Android Support Repository, revision 3999%) Done. 2 packages installed.
Running this again, still do not make Gradle happy. So manual acceptance is the only solution until someone come up with something better. (Please do!)
android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository
running this via command prompt with admin right fixed the error. I was unable to install phonegap plugin manager
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
if you run yes | sdkmanager --licenses
, then we print content of $ANDROID_HOME/licenses/android-sdk-license
,
we will get this
# cat $ANDROID_HOME/licenses/android-sdk-license
8933bad161af4178b1185d1a37fbf41ea5269c55
d56f5187479451eabf01fb78af6dfcb131a6481e
For GitLab CI, to accept Android SDK Build-Tools 26.0.2 licenses, you need to run this
before_script:
- mkdir -p $ANDROID_HOME/licenses
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license
- echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license
$ANDROID_HOME/licenses/android-sdk-license
is this intended? ie. appending
Android SDK Build-Tools 26.02
added a new license sha1 string
Build-Tools 26.0.2
and our build broke. My end solution was to simply do yes | sdkmanager --licenses
. No echo
s needed and this is future proof.
Note that for anyone coming to this question currently, build-tools-24.0.2 is (I think) now considered obsolete, so you'll get:
Error: Ignoring unknown package filter 'build-tools-24.0.2'
when running the various commands that have been suggested to install them.
The solution is to add --all
:
android update sdk --no-ui --all --filter "build-tools-24.0.2"
Also if you're on 32bit linux, everything after build tools 23.0.1 is 64bit only, so will not run. 32bit users are stuck on 23.0.1, the only way to get a later build tools is to switch to 64bit.
25.0.1
.
If you use tools/bin/sdkmanager --licenses
you still need to have a human interaction. I have the problem using my gitlab CI. This is my solution:
wget --quiet --output-document=tools.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
unzip -qq tools.zip
echo y | tools/bin/sdkmanager "platforms;android-25"
echo y | tools/bin/sdkmanager "platform-tools"
echo y | tools/bin/sdkmanager "build-tools;25.0.2"
echo y | tools/bin/sdkmanager "extras;android;m2repository"
echo y | tools/bin/sdkmanager "extras;google;m2repository"
echo y
will say yes if there is any question, but you need to make one line per installe package
You can also just execute:
$ANDROID_HOME/tools/bin/sdkmanager --licenses
And in Windows, execute:
%ANDROID_HOME%/tools/bin/sdkmanager --licenses
Ok FOR ANYONE HAVING THIS ISSUE AS OF 2018. The above answers did NOT work for me at all. What DID work was opening Android SDK - clicking the DOWNLOAD button on the tool bar and selecting the appropriate packages. After they finish downloading, it will let you accept the license agreement.
https://i.stack.imgur.com/yvMlc.png
In Android Studio for Windows, the solution is as follows:
Go to File
-> Settings
-> Appearance & Behaviour
-> System Settings
-> Android SDK
-> SDK Tools
-> check Google Play Licensing Library
-> Click Apply
, and then Ok
After the installation, build your application. It will work.
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
Note: This is only for Mac users
I had same issue but none of the answers posted helped since there was no tools
folder present in Library/Android/sdk.
(I'm using Android 3.6.3 on Mac OS 10.14.4)
https://i.stack.imgur.com/rfTzT.jpg
Below steps helped me to overcome licensing problem error:
Open Android Studio Press cmd + shift + A. This opens Actions pop-up window. Search for SDK Manager and hit enter to open. This opens pop-up for Android SDK. Select some other version of Android apart from already installed one. (In my case Android 10.0 was already installed so I selected Android 9.0) Then select Apply button. This will install corresponding SDK.
https://i.stack.imgur.com/R1AdP.jpg
Now run your app it should work without any exception.
https://i.stack.imgur.com/bC89y.png
I solved this problem by creating a public git repo with the accepted license files. Then I use wget
to fetch these licenses on any machine I need into a [sdk-dir]/licenses directory before running ./gradlew to build my project.
I went to Tools -> SDK Manager -> SDK Tools. Then I installed Google Play Licensing Library. It solved the problem.
For those having issues with the command line SDK, the reason it won't find the licenses you have accepted is because they have have been written to a different location than $ANDROID_HOME/licenses
which is where they need to be.
I found the easiest solution was to accept the licenses like this:
$ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME
Note: This assumes you've set ANDROID_HOME
to point to wherever your sdk is installed.
cd $ANDROID_HOME/tools/bin yes | ./sdkmanager --update
or
yes | $ANDROID_HOME/tools/bin/sdkmanager --update
for windows, open cmd and enter into bin
directory by running command:
cd C:\Users\username\AppData\Local\Android\sdk\tools\android\Sdk\tools\bin
then run sdkmanager --licenses
command, it asks to accept licenses.
Error: Unknown argument --licenses
I finally found a solution on Windows, to have a real silent and automatic install:
On Windows, the following syntax doesn't work:
echo y | sdkmanager --licenses
It seems the "y" aren't correctly sent to the java program called in the batch.
The workaround is to create a file file-y.txt with several "y", one by line, and to use
call sdkmanager --licenses < file-y.txt
This will create the needed files in the licenses directory. The problem is probably related to the use of BufferedReader in Java
I tried all the above command on windows 10 machine but the solution was to use the SDKMANAGER to check and accept licenses buy installing missing versions
https://i.stack.imgur.com/X0l2Y.jpg
I have faced two errors while Build my project on Android Studio:
License for package Android SDK Platform 28 not accepted. (while Build my project in Android Studio 4.1) exception in thread main java.lang.noclassdeffounderror javax/xml/bind/annotation/xmlschema (while running SDK manager to accept license)
For me, it was a java version problem. I have installed JDK instead of java. TO SOLVE THE ISSUE, I did the following steps.
For Windows:
Step1: Download and install the latest JAVA version from https://www.java.com/en/download/
Step2: Search for "View advanced system settings" in the start menu button (windows icon)
Step3: Click on "Environment Variables"
Step4: under "System variables" click on "New", now set "Variable name: JAVA_HOME
" and "Variable value: C:\Program Files\Java\jre1.8.0_271
" (add latest installed java path here). Then "OK", "OK", and "OK".
Step5: open cmd as an administrator and type the following commands:
cd C:\Users\kevin\AppData\Local\Android\Sdk\tools\bin (*change username here) sdkmanager --licenses
Press "y" for all questions.
Step6: Restart your Android Studio again.
DONE.
Let me know if anyone having a problem while following the above steps.
Copy the entire licenses/ directory and paste it into the Android SDK home directory on the machine where you wish to build your projects.
https://developer.android.com/studio/intro/update.html#download-with-gradle
this resolved the issue for me
In Windows PowerShell, you can do
for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
This is much more flexible and requires zero manual intervention. The 30 number is arbitrary, should be enough to cover the number of license acceptances, but can be increased if needed
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
.
You can accept all the license by executing the following command:
sdkmanager --licenses
This will prompt you through each licenses you haven't accepted yet and you can just enter y
to accept each of them.
Success story sharing
C:\Users\x1\AppData\Local\Android\sdk\tools\android
then it popped open a GUI and then install missing then click "Accept Liscenses" in new dialog that pops.yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses