Home Automatically accept all SDK licences
Reply: 26

Automatically accept all SDK licences

nsvir
1#
nsvir Published in 2016-06-29 09:56:41Z

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 ?

Thanks!

[EDIT]

A solution was to execute:

android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository

And install it manually, but it is the gradle's new feature purpose to do it.

[EDIT 2]

A better solution is to use the sdkmananger:

yes | sudo sdkmanager --licenses
sschuberth
2#
sschuberth Reply to 2017-05-18 11:51:20Z

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...

Community
3#
Community Reply to 2017-05-23 12:34:44Z

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!)

Igor Ganapolsky
4#
Igor Ganapolsky Reply to 2016-11-15 17:21:29Z

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.

JosephH
5#
JosephH Reply to 2016-12-10 15:47:54Z

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.

raven
6#
raven Reply to 2016-12-29 10:43:03Z

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.

ofir_aghai
7#
ofir_aghai Reply to 2017-02-01 11:21:25Z

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

Joe Lawson
8#
Joe Lawson Reply to 2017-02-02 18:35:11Z

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
A. Rager
9#
A. Rager Reply to 2017-02-08 23:45:29Z

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.

DiRiNoiD
10#
DiRiNoiD Reply to 2017-02-19 20:27:00Z

There are 2 approach that I can found to this problem.

  1. Update sdk tools with command window by accepting licence agreement as follows, just change the version according to your need.

    android update sdk --no-ui --filter build-tools-25.0.2,android-25,extra-android-m2repository

  2. Second approach is copying licence folders to Android root directory. Goto your development machine open Android Studio. Find your sdk location from Project Structure menu. (C:\Users\UserName\AppData\Local\Android\sdk). Under that directory there must be a licence folder. Copy that folder with the content. Paste that folder in your Jenkins server machine (or where you face with this problem) under android sdk root folder. (C:\Users\UserName.jenkins\tools\android-sdk)

Roc Boronat
11#
Roc Boronat Reply to 2017-05-20 18:23:47Z

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:

./sdkmanager --update that requests us to accept a license for the sdkmanager, and then

./sdkmanager --licenses that requests us to accept new licenses not previously accepted

Remember: run these commans with the same user that jenkins does. In my 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 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"

surya
12#
surya Reply to 2017-03-22 10:13:28Z

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

jnv
13#
jnv Reply to 2017-04-25 04:48:51Z

For the newest Android Studio (2.3) the best way to update/accept all licenses is to run:

tools/bin/sdkmanager --licenses

you might still need to copy the licence files to other locations based on your setup.

Thibaut Mottet
14#
Thibaut Mottet Reply to 2017-04-28 05:21:19Z

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

Chinedu Etoh
15#
Chinedu Etoh Reply to 2017-05-30 10:54:57Z

Finally, this 2 simple steps worked for me on windows 10.

1) Make sure you update your android build tools and api. On your Android Sdk Just click on install packages to install available updates.

2) Start your Android Studio and you'll be prompted to install the reqiured build tools for the already updated api and tools, This will install the build tools properties including the licences and your done.

Mark Johnson
16#
Mark Johnson Reply to 2017-06-02 23:41:19Z

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

Phuc Nguyen
17#
Phuc Nguyen Reply to 2017-06-28 09:55:34Z

I run

#react-native run-android 

from terminal and met that problem. For manually, go to Android Studio -> Android SDK -> SDK Platform Click Show Packages Detail and check :

+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image

When install packages, check accept license => can solve the problem.

Vinicius de Santana
18#
Vinicius de Santana Reply to 2017-07-31 01:54:34Z

I navigate to:

/usr/lib/android-sdk/licenses

and I typed in terminal:

echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"

With root permission. And it works for me now.

Cristian Agudelo
19#
Cristian Agudelo Reply to 2017-08-14 07:37:51Z

this solved my error

yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
Ryan R
20#
Ryan R Reply to 2017-08-20 13:33:03Z

AndroidSDK can finally accept licenses.

yes | sdkmanager --licenses
Samrat Basra
21#
Samrat Basra Reply to 2017-10-31 07:10:53Z

this work like a charm. gotcha.

(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u

Jimmy Yin
22#
Jimmy Yin Reply to 2017-11-07 03:05:31Z

cd $ANDROID_HOME/tools/bin ./sdkmanager --update

A.L
23#
A.L Reply to 2017-11-17 15:27:49Z

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.

Nauman Tahir
24#
Nauman Tahir Reply to 2017-12-03 00:47:29Z

FOR REACT NATIVE APPs:

If you are having this problem for a React Native app, in addition to above mentioned steps, make sure you have the local.properties file in the android directory(AppName/android) of your app which points to your 'sdk' directory:

sdk.dir=/PATH_TO_SDK/
Manoj Shrestha
25#
Manoj Shrestha Reply to 2017-12-11 22:39:07Z

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.

Micheal C Wallas
26#
Micheal C Wallas Reply to 2018-01-28 18:34:56Z

On Mac OSX, navigate to the sdk/tools/bin

Then run ./sdkmanager --licenses, and accept all the licenses.

moobyfr
27#
moobyfr Reply to 2018-01-31 09:48:18Z

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

You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.424403 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO