自动接受所有SDK许可证
由于gradle安卓插件2.2-alpha4 :
Gradle将尝试下载项目依赖的缺less的SDK包
这是非常酷,并知道是一个杰克·沃顿项目 。
但是,要下载SDK库,您需要:接受许可协议或gradle告诉您:
您尚未接受以下SDK组件的许可协议:[Android SDK Build-Tools 24,Android SDK Platform 24]。 在构build项目之前,您需要接受许可证协议,并使用Android Studio SDK Manager完成缺失组件的安装。 或者,要了解如何将许可协议从一个工作站传输到另一个工作站,请访问http://d.android.com/r/studio-ui/export-licenses.html
这是一个问题,因为我希望在进行gradle build
时安装所有的sdk依赖gradle build
。
我正在寻找一个解决scheme来自动接受所有的许可证。 也许是一个gradle脚本? 你有什么想法吗?
谢谢!
[编辑]
一个解决scheme是执行:
android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository
并手动安装,但这是gradle的新function。
[编辑2]
更好的解决scheme是使用sdkmananger:
yes | sudo sdkmanager --licenses
我遇到了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"
重新创build您机器上的当前$ANDROID_HOME/license
文件夹。 这与msg( http://tools.android.com/tech-docs/new-build-system/license )链接中列出的过程具有相同的结果。
哈希是许可证文本的sha1s,我想这将被定期更新,所以这个代码将只工作这么长时间:)
并手动安装,但这是gradle的新function。
一开始我很惊讶,即使我已经通过android
工具接受了命名组件的许可证,但这并没有起作用,但是它指出了AS内的SDKpipe理器创build/licenses
文件夹。
我想官方工具不会因法律原因而跳过这一步。
重新阅读它的发行说明
SDK自动下载:Gradle将尝试下载项目依赖的缺less的SDK包。
这并不意味着它会工作,如果你还没有安装Android工具,并已经接受了最新的许可证。
编辑:说,它仍然不能在我的testinggubuntu框上工作,直到我连接SDK到AS。 CI工作正常 – 不知道有什么区别…
对于最新的Android Studio(2.3),更新/接受所有许可证的最佳方法是运行:
tools/bin/sdkmanager --licenses
您可能仍然需要根据您的设置将许可证文件复制到其他位置。
如果您正在使用Jenkins,则可以使用以下bash脚本作为构build过程中的第一步:
(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u
这当然会安装所有可用的更新,但如果您可以节省磁盘空间,它将为您节省一些时间。 睡眠是为了避免安装程序中的readline被破坏,因为在这种情况下“yes”无法正常工作。
编辑:您还需要在构build步骤中添加“安装Android项目先决条件”插件,以获得正确的$ ANDROID_HOME,如果您正在使用内置的SDKpipe理器。
AndroidSDK终于可以接受许可证。
yes | sdkmanager --licenses
对于新的sdkmanager
实用程序:
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
yesses之间有一点点延迟,所以命令可能会暂停,许可显示一段时间,但不需要人为干预。
不幸的是,OP最初解决的方式并不总是有效。 如果您从错误消息中发现什么是您的构build当前构build工具版本 。 这可能是它缺less的更高版本的构build工具。 在这种情况下,您需要手动启动SDK Manager并添加构build工具并接受许可证。
根据OP说明,它看起来如下。
$ ./gradlew build
为了遵守这个构build的JVM设置,将分叉一个新的JVM。 请考虑使用守护进程:https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html。 失败:生成失败,出现exception。 * 什么地方出了错: configuration项目“:app”时发生问题。 >您尚未接受以下SDK组件的许可协议: [Android SDK Build-Tools 24.0.2]。 ... 构build失败
注意:2017-04-16
android
工具现在已经被弃用,以支持新的sdkmanager
。 请参阅Joe Lawson的答案以及从2017年3月开始的后续post。
然后调整你的命令如下:
android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository
刷新来源: 获取https://dl.google.com/android/repository/addons_list-2.xml validationXML parsingXML 获取插件列表成功 刷新来源 获取url:https://dl.google.com/android/repository/repository-11.xml validationXML:https://dl.google.com/android/repository/repository-11.xml parsingXML:https://dl.google.com/android/repository/repository-11.xml ... 错误:忽略未知的包filter“build-tools-24.0.2” ------------------------------- 许可证ID:android-sdk-license-xxxxxxxx 使用: - SDK平台Android 7.0,API 24,修订版2 - Android支持库,修订版39 ------------------------------- ... 2015年11月20日 你接受许可证'android-sdk-license-xxxxxxxx'[y / n]:y 安装档案: 准备安装档案 下载SDK平台Android 7.0,API 24,修订版2 安装SDK平台Android 7.0,API 24,修订版2 已安装SDK平台Android 7.0,API 24,修订版296%) 下载Android支持库,修订版本39 安装Android支持库,修订版39 已安装Android支持库,修订版3999%) 完成。 2包安装。
再次运行这个,还是不要让Gradle高兴。 所以人工接受是唯一的解决scheme,直到有人提出更好的东西。 (请做!)
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"
它会提示你接受许可证。 接受后将它复制到${ANDROID_HOME}/licenses/android-sdk-license
。 为了确保你总是得到正确的书面使用base64
。
$> base64 ${ANDROID_HOME}/licenses/android-sdk-license Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=
然后你可以使用base64 -d
重新创build文件。
$> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license
您可以通过运行sha1sum来validation写入的文件是否是预期的。
$> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license da6b80c9c47b41c0bf7032938e7137a58a3dc249
请注意,对于目前所有遇到这个问题的人来说,build-tools-24.0.2现在被认为已经过时了,所以你会得到:
Error: Ignoring unknown package filter 'build-tools-24.0.2'
当运行已经build议安装它们的各种命令时。
解决scheme是添加 – 所有:
android update sdk --no-ui --all --filter "build-tools-24.0.2"
另外,如果你在32位的Linux上, 所有的 构build工具23.0.1之后的版本都是64位 ,所以不会运行。 32位用户被困在23.0.1上,获得更高版本的工具的唯一方法是切换到64位。
我们在jenkins发现了同样的问题。 使用buildToolsVersion '25.0.2'
,我们必须在构build之前接受许可证。 在我们的例子中,我们需要运行:
./sdkmanager --update
,要求我们接受sdkmanager的许可证,然后
./sdkmanager --licenses
要求我们接受之前未被接受的新许可证的许可证
记住:用jenkins的用户来运行这些指令。 在我的Debian中,Jenkins用户只是jenkins
。 换句话说:以root
身份进行操作会以root
身份创build所接受的许可证,因此Jenkins将不会读取它们。
顺便说一句,我们在/var/lib/jenkins/tools/android-sdk/tools/bin
find了sdkmanager
。 如果你的不在那里,用find / -name "sdkmanager"
有关SDK api编号为25的错误消息:
android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository
这解决了我的错误
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
如果你运行yes | sdkmanager --licenses
yes | sdkmanager --licenses
,然后我们打印$ANDROID_HOME/licenses/android-sdk-license
,
我们会得到这个
# cat $ANDROID_HOME/licenses/android-sdk-license 8933bad161af4178b1185d1a37fbf41ea5269c55 d56f5187479451eabf01fb78af6dfcb131a6481e
对于GitLab CI,要接受Android SDK构build工具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
如果您使用tools/bin/sdkmanager --licenses
,则仍然需要人工交互。 我有使用我的gitlab CI的问题。 这是我的解决scheme:
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
会说是,但是您需要为每个安装包制作一行
我通过使用公认的许可证文件创build公共git回购来解决这个问题。 然后,我使用wget
在运行./gradlew构build我的项目之前将所需的任何计算机上的许可证提取到[sdk-dir] / licenses目录中。
复制整个许可证/目录,并将其粘贴到您希望构build项目的机器上的Android SDK主目录中。
https://developer.android.com/studio/intro/update.html#download-with-gradle
这为我解决了这个问题
在Windows PowerShell中,您可以执行此操作
for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
这更加灵活,并且需要零手动干预。 30号码是任意的,应该足以覆盖许可证接受的数量,但是如果需要的话可以增加
我跑
#react-native run-android
从terminal,并遇到了这个问题。 对于手动,请转到Android Studio – > Android SDK – > SDK Platform单击Show Packages Detail并检查:
+ Google APIs + Android SDK Platform 23 + Intel x86 Atom_64 System Image + Google APIs Intel x86 Atom_64 System Image
安装软件包时,勾选accept license =>可以解决问题。
有两种方法可以解决这个问题。
-
通过接受许可协议,使用命令窗口更新sdk工具如下,只需根据您的需要更改版本。
android update sdk –no-ui –filter build-tools-25.0.2,android-25,extra-android-m2repository
-
第二种方法是将许可证文件夹复制到Android根目录。 转到您的开发机器打开Android Studio。 从“项目结构”菜单中find您的SDK位置。 (C:\ Users \用户名\应用程序数据\本地\的Android \ SDK)。 在该目录下,必须有一个许可证文件夹。 复制该文件夹的内容。 把这个文件夹粘贴到你的Jenkins服务器机器上(或者你遇到这个问题的地方)在android sdk根目录下。 (C:\用户\ UserName.jenkins \ TOOLS \ Android的SDK)
最后,这两个简单的步骤在Windows 10上为我工作。
1)确保你更新你的Android构build工具和API。 在Android Sdk上点击安装包安装可用的更新。
2)启动您的Android Studio,系统会提示您安装需要的编译工具,以便更新已经更新的api和工具。这将安装编译工具属性,包括许可证和完成的工作。
我导航到:
/usr/lib/android-sdk/licenses
我inputterminal:
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"
拥有root权限。 现在它适用于我。
这项工作就像一个魅力。 疑难杂症。
(同时睡3;做回声“y”;完成)| $ ANDROID_HOME / tools / android update sdk -u
cd $ ANDROID_HOME / tools / bin ./sdkmanager –update
- 无法升级Android SDK工具
- Google应用程序脚本超时〜5分钟?
- 在Eclipse中找不到AVD或SDKpipe理器
- Android SDK应用程序更新版本后崩溃(NoClassDefFound,工具版本22)
- 什么是dSYM以及如何使用它? (iOS SDK)
- 我无法让IntelliJ识别我的Android SDK
- Android Studio更新0.5.3 – 未find平台“android-19”
- Android打开并保存文件到/从Google Drive SDK
- 无法获取urlhttps://dl-ssl.google.com/android/repository/addons_list-1.xml,原因:连接到https://dl-ssl.google.com拒绝