首页 文章

自动接受所有SDK许可证

提问于
浏览
283

自从gradle android插件2.2-alpha4

Gradle将尝试下载项目所依赖的缺失SDK包

这真是太酷了,并且知道是JakeWharton project .

但是,要下载SDK库,您需要:接受许可协议或gradle告诉您:

您尚未接受以下SDK组件的许可协议:[Android SDK Build-Tools 24,Android SDK Platform 24] . 在构建项目之前,您需要接受许可协议并使用Android Studio SDK Manager完成缺少的组件的安装 . 或者,要了解如何将许可协议从一个工作站转移到另一个工作站,请访问http://d.android.com/r/studio-ui/export-licenses.html

这是一个问题因为我喜欢在做 gradle build 时安装所有sdk依赖项 .

我正在寻找一种自动接受所有许可证的解决方案 . 也许是一个gradle脚本?你有什么想法 ?

谢谢!

[编辑]

一个解决方案是执行:

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

并手动安装,但这是gradle的新功能目的 .

[编辑2]

更好的解决方案是使用sdkmananger:

yes | sudo sdkmanager --licenses

30 回答

  • 2

    我跑

    #react-native run-android
    

    从终端并遇到了这个问题 . 对于手动,请转到Android Studio - > Android SDK - > SDK平台单击“显示包详细信息”并选中:

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

    安装包时,选中accept license =>可以解决问题 .

  • 17

    在Mac OSX上,导航到 sdk/tools/bin

    然后运行 ./sdkmanager --licenses ,并接受所有许可证 .

  • 150

    我在 alpha5 预览中遇到了这个问题 .

    杰克沃顿向我指出,你目前可以使用

    mkdir -p "$ANDROID_SDK/licenses"
    echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
    echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"
    

    在您的计算机上重新创建当前的 $ANDROID_HOME/license 文件夹 . 这与错误消息(http://tools.android.com/tech-docs/new-build-system/license)的链接中概述的过程具有相同的结果 .

    哈希是许可文本的sha1s,我想这将定期更新,所以这段代码只会工作这么久:)

    并手动安装,但这是gradle的新功能目的 .

    我很惊讶,即使我已经通过 android 工具接受了命名组件的许可证,但这并没有开箱即用,但有人向我指出它内部的SDK管理器创建了 /licenses 文件夹 .

    我想官方工具不会因为法律原因而不想跳过这一步 .

    重读它所述的发行说明

    SDK自动下载:Gradle将尝试下载项目所依赖的缺失SDK包 .

    这并不意味着如果您还没有安装Android工具并且已经接受了最新的许可证,它将会起作用 .

    编辑:说,在我将SDK链接到AS之前,它仍然无法在我的测试gubuntu盒子上运行 . CI工作正常 - 不确定区别是什么......

  • 29

    AndroidSDK最终可以接受许可 .

    yes | sdkmanager --licenses
    
  • 164

    对于最新的Android Studio(2.3),更新/接受所有许可证的最佳方法是运行:

    tools/bin/sdkmanager --licenses
    

    您可能仍需要根据您的设置将许可证文件复制到其他位置 .

  • 4

    对于新的 sdkmanager 实用程序:

    yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"

    在yes之间有一点延迟,因此命令可能会挂起许可证显示一段时间,但它不需要人为干预 .

  • 4

    如果您使用的是Jenkins,则可以使用以下bash脚本作为构建过程的第一步:

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

    这当然会安装所有可用的更新,但如果你可以节省磁盘空间,它将节省你一些时间 . 睡眠是为了避免安装程序中的读取线损坏,因为在这种情况下“是”不能正常工作 .

    编辑:如果您使用内置的SDK管理器,还需要在构建步骤中添加“安装Android项目先决条件”插件以获取正确的$ ANDROID_HOME .

  • 23

    不幸的是,OP最初解决它的方式并不总是有效 . 如果您从错误消息中找到了什么是您的构建当前构建工具 version . 它可能是缺少更高版本的构建工具 . 在这种情况下,您需要手动启动SDK Manager并添加构建工具并接受许可 .

    每个OP指令,如下所示 .

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

    注意:2017-04-16 Android工具现已被弃用,转而使用新的sdkmanager . 请参阅Joe Lawson的回答和随后的帖子,从2017年3月开始 .

    然后按如下方式调整命令:

    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.
    

    再次运行,仍然不会让Gradle高兴 . 因此,在有人提出更好的建议之前,手动接受是唯一的解决方案 . (请做!)

  • 2

    这解决了我的错误

    echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
    
  • 3

    不推荐使用 android 工具,您应该使用 sdkmanager . sdkmanager 也在您第一次接受时写入许可证文件 . 许可证会根据您使用的SDK进行更改,即使命令也是如此

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

    适用于某些系统 . 它不适用于所有人 . 某些SDK安装期望许可文件在文件中没有换行符结束,因此请尝试在echo命令中添加 -n .

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

    如果这不起作用,您可以尝试使用base64编码 .

    所以发现我的许可证:

    $> 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"
    

    它'll prompt you to accept the license. After accepting it'将其复制到 ${ANDROID_HOME}/licenses/android-sdk-license . 为了确保您始终准确地获得所写内容,请使用 base64 .

    $> base64 ${ANDROID_HOME}/licenses/android-sdk-license
    Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=
    

    然后你可以使用 base64 -d 重新创建文件准确 .

    $> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license
    

    您可以通过在其上运行sha1sum来验证写入的文件是否符合预期 .

    $> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license
    da6b80c9c47b41c0bf7032938e7137a58a3dc249
    
  • 0

    我终于在Windows上找到了一个解决方案,以实现真正的静默和自动安装:

    在Windows上,以下语法不起作用:

    echo y | sdkmanager --licenses
    

    似乎“y”未正确发送到批处理中调用的java程序 .

    解决方法是创建一个文件file-y.txt,其中包含几个“y”,一个接一个地使用

    call sdkmanager --licenses < file-y.txt
    

    这将在许可证目录中创建所需的文件 . 问题可能与在Java中使用BufferedReader有关

  • 15

    如果您运行 yes | sdkmanager --licenses ,那么我们打印 $ANDROID_HOME/licenses/android-sdk-license 的内容,

    我们会得到这个

    # cat $ANDROID_HOME/licenses/android-sdk-license
    
    8933bad161af4178b1185d1a37fbf41ea5269c55
    
    d56f5187479451eabf01fb78af6dfcb131a6481e
    

    对于GitLab CI,要接受Android SDK Build-Tools 26.0.2许可证,您需要运行此许可证

    before_script:
      - mkdir -p $ANDROID_HOME/licenses
      - echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license
      - echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license
    
  • 19

    请注意,对于目前遇到此问题的任何人来说,build-tools-24.0.2(我认为)现在已经过时了,所以你会得到:

    Error: Ignoring unknown package filter 'build-tools-24.0.2'
    

    运行已建议安装它们的各种命令时 .

    解决方案是添加 --all

    android update sdk --no-ui --all --filter "build-tools-24.0.2"
    

    此外,如果你在32位Linux上,所有after build tools 23.0.1 is 64bit only,所以不会运行 . 32位用户坚持使用23.0.1,获得更高版本工具的唯一方法是切换到64位 .

  • 3

    我们在Jenkins上发现了同样的问题 . 使用 buildToolsVersion '25.0.2' ,我们必须在构建之前接受许可 . 在我们的例子中,我们需要运行:

    ./sdkmanager --update 要求我们接受sdkmanager的许可,然后

    ./sdkmanager --licenses 要求我们接受之前未接受的新许可

    请记住:使用与 jenkins 相同的用户运行这些commans . 在我的Debian中,Jenkins用户只是 jenkins . 换句话说:将其作为 root 将创建接受的许可证为 root ,因此Jenkins不会读取它们 .

    顺便说一下,我们在 /var/lib/jenkins/tools/android-sdk/tools/bin 找到了 sdkmanager . 如果你的不在,请用 find / -name "sdkmanager" 找到它

  • 4

    有关SDK api编号25的错误消息:

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

  • 108

    如果您使用 tools/bin/sdkmanager --licenses ,您仍然需要进行人工干预 . 我有使用我的gitlab CI的问题 . 这是我的解决方案:

    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 会说是,但你需要为每个安装包制作一行

  • 10

    我通过使用接受的许可证文件创建公共git仓库来解决此问题 . 然后我使用 wget 在我需要的任何机器上将这些许可证提取到 [sdk-dir]/licenses 目录中,然后再运行 ./gradlew 来构建我的项目 .

  • 0

    您可以通过执行以下命令接受所有许可证:

    sdkmanager --licenses
    

    这将提示您完成尚未接受的每个许可证,您只需输入 y 即可接受其中的每个许可证 .

  • 15

    对于2018年以前有这个问题的任何人都可以 . 以上答案对我来说根本不起作用 . DID的工作是打开Android SDK - 单击工具栏上的DOWNLOAD按钮并选择相应的包 . 下载完成后,它会让您接受许可协议 .

    enter image description here

  • 9

    你也可以执行

    $ ANDROID_HOME / tools / bin / sdkmanager --licenses

    或者对于Windows执行

    %ANDROID_HOME%/ tools / bin / sdkmanager --licenses

  • 2

    使用Cordova时我遇到了同样的错误 .

    问题是由于我通过Android Studio安装了Android Sdk并通过 apt 安装了 apt install android-sdk adb . Cordova通过 apt 调用安装的文件,而不是我主目录中的文件 .

    一旦我在bash中改变了SDK的路径,它就起作用了:

    # 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
    

    然后我删除了不再使用的系统文件: apt remove android-sdk adb .

  • 1

    对于那些在命令行SDK中遇到问题的人来说,它找不到您接受的许可证的原因是因为它们已被写入与 $ANDROID_HOME/licenses 不同的位置,这是他们需要的位置 .

    我发现最简单的解决方案是接受这样的许可证:

    $ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME

    注意:这假设您已将 ANDROID_HOME 设置为指向安装sdk的位置 .

  • 42

    复制整个许可证/目录并将其粘贴到您希望构建项目的计算机上的Android SDK主目录中 .

    https://developer.android.com/studio/intro/update.html#download-with-gradle

    这解决了我的问题

  • 0

    在Windows PowerShell中,您可以执行此操作

    for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
    

    这更加灵活,无需人工干预 . 30号是任意的,应足以涵盖许可证接受的数量,但如果需要可以增加

  • 0

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

  • 4

    我可以找到这个问题的方法 .

    • 通过接受许可协议更新带命令窗口的sdk工具,如下所示,只需根据需要更改版本 .

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

    • 第二种方法是将许可证文件夹复制到Android根目录 . 转到您的开发机器打开Android Studio . 从“项目结构”菜单中找到您的sdk位置 . (C:\ Users \用户名\应用程序数据\本地\的Android \ SDK) . 在该目录下必须有许可证文件夹 . 使用内容复制该文件夹 . 在android sdk根文件夹下将该文件夹粘贴到Jenkins服务器计算机中(或者您遇到此问题的位置) . (C:\用户\ UserName.jenkins \ TOOLS \ Android的SDK)
  • 40

    最后,这2个简单的步骤适用于Windows 10 .

    1)确保更新你的android构建工具和api . 在您的Android Sdk上只需单击安装包即可安装可用更新 .

    2)启动Android Studio,系统将提示您为已更新的api和工具安装reqiured构建工具 . 这将安装构建工具属性,包括许可证和完成 .

  • 2

    我导航到:

    /usr/lib/android-sdk/licenses
    

    我输入了终端:

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

    有root权限 . 它现在对我有用 .

  • 1

    对于REACT NATIVE APPs:

    如果你有一个React Native应用程序的问题,除了上面提到的步骤,请确保你的应用程序的android目录(AppName / android)中有local.properties文件指向你的'sdk'目录:

    sdk.dir=/PATH_TO_SDK/
    
  • 0

    我在Windows 10机器上尝试了以上所有命令,但解决方案是使用SDKMANAGER检查并接受许可证购买安装缺失版本

    enter image description here

相关问题