自动接受所有SDK许可证
自动接受所有SDK许可证
自从gradle android插件2.2-alpha4版本以后:\n
\nGradle将尝试下载项目所依赖的缺失的SDK包\n
\n这真是太酷了,而且是一个众所周知的JakeWharton项目。\n但是,为了下载SDK库,你需要接受许可协议,否则gradle会提示你:\n
\n您尚未接受以下SDK组件的许可协议:[Android SDK Build-Tools 24,Android SDK Platform 24]。在构建项目之前,您需要接受许可协议并使用Android Studio SDK Manager完成缺失组件的安装。或者,您可以前往http://d.android.com/r/studio-ui/export-licenses.html了解如何将许可协议从一台工作站传输到另一台工作站。\n
\n这是一个问题,因为我希望在执行gradle build
时安装所有的SDK依赖项。\n我正在寻找一种自动接受所有许可协议的解决方案。也许是一个gradle脚本?\n你有什么想法吗?
问题的原因是Gradle在构建过程中自动下载SDK包时,需要事先接受相关的许可证。如果没有手动接受许可证,就会出现问题。解决方法是通过命令行手动创建并接受许可证,然后重新构建。
具体的解决方法如下:
1. 在命令行中输入以下命令创建许可证文件夹:
mkdir -p "$ANDROID_SDK/licenses"
2. 输入以下命令将许可证内容写入文件:
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"
3. 重新构建项目。
这些命令会在本地机器上重新创建与错误信息中提到的过程相同的文件夹和许可证文件,解决了自动接受SDK许可证的问题。
需要注意的是,许可证的哈希值是许可证文本的SHA1哈希值,可能会定期更新,因此这些代码只能在一段时间内有效。
从上述内容中,我们可以整理出以下问题的出现原因和解决方法:
问题:自动接受所有SDK许可证(Automatically accept all SDK licences)。
出现原因:安装Android SDK Build-Tools版本30.0.2时,许可证未被接受。
解决方法:
1. 打开Android Studio。
2. 点击菜单栏中的"Tools"(工具)。
3. 选择"SDK Manager"(SDK管理器)。
4. 在弹出的窗口中,点击"SDK Tools"(SDK工具)。
5. 在列表中找到"Google Play Licensing Library",并安装它。
6. 安装完成后,重新构建项目或同步Gradle。
此外,还有一种解决方法是通过命令行执行以下命令:android-sdk/tools/bin/sdkmanager --licenses
。
以上方法适用于Windows和Mac操作系统,并且被多个用户确认在2021年仍然有效。
虽然这些方法可以解决问题,但是对于一些用户来说,构建软件变得更加复杂。对于为什么需要执行这些步骤以及命令行中的等效方法,一些用户表示不理解。
在上述讨论中,有用户提到在Debian系统中如何使用命令行执行这些步骤,但没有给出具体的解决方法。
通过执行特定的操作可以解决自动接受所有SDK许可证的问题。这些操作包括在Android Studio中安装Google Play Licensing Library,重新构建项目或同步Gradle,或者通过命令行执行相应的命令。然而,对于一些用户来说,这些操作可能会增加软件构建的复杂性,并且对于为什么需要这些操作以及命令行中的等效方法,一些用户表示不理解。
2021年的更新表明Android SDK终于可以接受许可证了。可以通过以下步骤解决问题:
1. 打开路径`Android\sdk\tools\bin`
2. 在命令行中输入以下命令:yes | sdkmanager --licenses
在评论中提到,在macOS上,可以使用以下命令:yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
在Windows上,可以使用以下命令:cmd.exe /C"%ANDROID_HOME%\tools\bin\sdkmanager.bat --licenses"
。
确保先安装Java。
在Windows上,还需要打开运行窗口,然后输入C:\Users\x1\AppData\Local\Android\sdk\tools\android
,然后弹出一个GUI界面,点击"install missing",然后在新对话框中点击"Accept Licenses"。
但是以上方法在Linux上不起作用,因为在tools/bin目录或其他地方没有sdkmanager文件。
在macOS上,可以使用以下命令:yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
。
如何在Gradle Wrapper中自动接受许可证?
在macOS上,通过命令行进入路径/Library/Android/sdk/tools/bin
,执行以下命令:yes | ./sdkmanager --licenses
。
如果要自动化此过程(可能使用Travis等工具),需要先通过运行sdkmanager --update
更新sdkmanager。
这个特性是在哪个版本中引入的?
在我的Dockerfile中,这个方法很好用,我需要在SDK管理器中安装某些软件包时自动接受所有许可证:RUN yes | sdkmanager "build-tools;28.0.2" "platform-tools"
。
感谢评论中的路径提示,但是它没有起作用,我需要在命令提示符中运行C:\Users\x1\AppData\Local\Android\sdk\tools\bin\sdkmanager.bat --licenses
并按"y" + Enter键。
如果找不到sdkmanager在哪里,可能是因为你下载的"Android Studio and SDK tools"中没有bin文件夹。我的路径是C:\Users\UserName\sdk-tools-windows-4333796 \tools\bin\sdkmanager.bat
。
如果你在Windows上安装了GitBash,可以在GitBash中运行yes | C:\Users\x1\AppData\Local\Android\sdk\tools\bin\sdkmanager.bat --licenses
。
我遇到了问题,无法运行sdkmanager,如果你遇到关于Java.xml文件的问题,请确保你使用的是Java8,因为我之前设置了Java11作为我的全局版本。
对我来说,命令行的方法都不起作用,但是打开工具 -> SDK,并下载另一个SDK,会提示你接受许可证。
Android开发真糟糕。几年前我开始使用它们的一个模板示例,每次回来的时候,都有一个新版本的Android Studio,要把项目恢复正常需要花几个小时...
"sdkmanager --licenses"已经很多年都不起作用了,但人们仍然将其发布为解决方案并获得赞同。我错过了什么吗?你们都在使用过时的Android SDK吗?
在Windows上,使用echo y| "%ANDROID_SDK_PATH%\tools\bin\sdkmanager" "ndk-bundle"
命令可以成功接受一个许可证。注意y
和|
之间不能有空格。
在Mac上,如果在运行上述命令时遇到"zsh command not found sdkmanager Mac"的问题,说明你还没有安装JDK。请先安装JDK,然后再运行上述命令。所有许可证都将被接受。现在你可以继续你的工作,比如再次运行项目,就不会出现任何问题。
--licenses
不再是SDK的一部分了!
在运行上述命令之前,我需要按照这个链接:stackoverflow.com/questions/53994924/…
我需要在命令前加上sudo
前缀,然后它才能工作。否则,它会显示"licenses accepted",但当我再次检查时,它们实际上并没有被接受。使用sudo
后,接受的许可证将变为永久性。
这实际上不起作用,因为你没有下载SDK,所以仍然会停止。