因为gradle android插件2.2-alpha4:

Gradle会尝试下载项目中缺失的SDK包 取决于

这非常酷,是杰克·沃顿的一个项目。

但是,要下载SDK库,你需要:接受许可协议,否则gradle会告诉你:

您还没有接受以下SDK的许可协议 组件:[Android SDK Build-Tools 24, Android SDK Platform 24]。 在构建项目之前,您需要接受许可证 协议并完成缺少组件的安装 使用Android Studio SDK管理器。或者,学习如何 将许可证协议从一个工作站转移到另一个工作站,转到 http://d.android.com/r/studio-ui/export-licenses.html

这是一个问题,因为我想在做gradle构建时安装所有的sdk依赖。

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


当前回答

截至2019年7月,最简单的方法是在命令提示符中使用:flutter doctor -android-licenses。

它继续逐个显示sdk的未接受的T&C,并给你选择“y/n”的选项。全部选择y。

或者,当您运行flutter doctor时,它将运行Android工具链诊断,显示有多少许可证尚未被接受,并建议您使用——Android -licenses标志运行它。

其他回答

我解决了这个问题,因为我不能使用UI。它用于Azure中的管道。(Windows)没有一个答案对我有用,但是@ mobyfr发的file-y.t xtxt给我指明了正确的方向

这适用于新安装。你根本不需要使用Android Studio或任何UI。

Create C:\AndroidTest Create ENV variable called ANDROID_SDK_TOOLS with path from #1 Create ENV variable called JAVA_HOME and give it the folder path open up CMD in Admin mode and go to C:\Android curl --output test.zip https://dl.google.com/android/repository/commandlinetools-win-8092744_latest.zip Use your favorite command line to extract the zip into the same folder Navigate to the bin folder ( cmdline-tools\bin ) In this folder, create a file like mentions in another answer. file-y.txt and add a bunch of y's. Basically type y on each line. I did 20. So you have 20 lines with 1 y on each sdkmanager "platform-tools" "platforms;android-29" --sdk_root="C:\AndroidTest\cmdline-tools\bin" < file-y.txt

这将下载所有你需要的sdk,而不需要gradle/AndroidStudio/Xamarin。对于管道来说,动态下载整个SDK支持非常棒

如果你有问题,你需要输入sdkmanager——licenses——sdk_root="C:\AndroidTest\cmdline-tools\bin" < file-y.txt 但是,我对此表示怀疑。

我得到了同样的错误,许可证不接受…尝试设置android环境,在API级别23的android模拟器中运行react原生应用程序。

我做了以下事情:

基于链接https://developer.android.com/studio/intro/update#download-with-gradle

验证许可是否通过Android studio 3.1.3的SDK管理器下载。

设置ANDROID_HOME为C:\\Android\Sdk

(安装在C:\Users\username\AppData\Local\Android\Sdk)

在新的命令提示符中重新尝试构建后,错误得到解决。

从这个链接下载SDK管理器。然后在终端中解压缩并使用以下命令。

!tools/bin/sdkmanager --sdk_root=/usr/lib/android-sdk --licenses <<< $'y\ny\ny\ny\ny\ny\ny\n'

我可以找到两种方法来解决这个问题。

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

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精确地重新创建文件。

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

您可以通过对其运行sha1sum来验证所写入的文件是否符合预期。

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