因为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脚本? 你有什么想法吗?


当前回答

这解决了我的错误

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

其他回答

我解决了这个问题,因为我不能使用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 Studio上构建我的项目时遇到了两个错误:

不接受Android SDK平台28包的许可证。(同时在Android Studio 4.1中构建我的项目) java.lang.noclassdeffounderror javax/xml/bind/annotation/xmlschema(当运行SDK管理器接受许可证时)

对我来说,这是java版本的问题。我安装了JDK而不是java。为了解决这个问题,我执行了以下步骤。

Windows:

步骤1:从https://www.java.com/en/download/下载并安装最新的JAVA版本

第二步:在开始菜单按钮(windows图标)中搜索“查看高级系统设置”

第三步:点击“环境变量”

Step4:在“系统变量”下点击“新建”,现在设置“变量名:JAVA_HOME”和“变量值:C:\Program Files\Java\ jre1.8.0_271”(此处添加最新安装的java路径)。然后"OK", "OK", "OK"。

步骤5:以管理员身份打开cmd,输入以下命令:

cd C:\Users\kevin\AppData\Local\Android\Sdk\tools\bin(*此处更改用户名) sdkmanager——许可证

所有问题按“y”键。

步骤6:重新启动Android Studio。

完成了。

如果有人在执行上述步骤时遇到问题,请告诉我。

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

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

这为我解决了问题

下面是我的Docker设置。 您可以在普通的Linux环境中进行操作。

注意:yes |和——licenses——sdk_root=${ANDROID_HOME}子句。 似乎sdkmanager -update恢复了协议,所以是的|出现了两次。

FROM openjdk:8
# Install dev-essential(gnumake)
RUN apt update
RUN apt install -y build-essential
# Set ENV
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" \
    ANDROID_HOME="/usr/local/android-sdk" \
    ANDROID_VERSION=28 \
    ANDROID_BUILD_TOOLS_VERSION=28.0.3 \
    GRADLE_VERSION=4.10.3 \
    NDK_VERSION=r16b
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android \
    && cd "$ANDROID_HOME" \
    && curl -o sdk.zip $SDK_URL \
    && unzip sdk.zip \
    && rm sdk.zip \
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses --sdk_root=${ANDROID_HOME}
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
    "platforms;android-${ANDROID_VERSION}" \
    "platform-tools" --sdk_root=${ANDROID_HOME}
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
RUN mkdir /opt/gradle
RUN unzip gradle-${GRADLE_VERSION}-all.zip -d /opt/gradle
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
# Install NDK
RUN wget https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-x86_64.zip
RUN mkdir /opt/ndk-bundle
RUN unzip android-ndk-${NDK_VERSION}-linux-x86_64.zip -d /opt/ndk-bundle
ENV PATH=${PATH}:/opt/ndk-bundle

RUN mkdir /application
WORKDIR /application

如果你输入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