在 Azure Pipelines 的 Ubuntu 代理上构建 Android 项目时,SDK 目录不可写
Posted
技术标签:
【中文标题】在 Azure Pipelines 的 Ubuntu 代理上构建 Android 项目时,SDK 目录不可写【英文标题】:SDK directory is not writable when building Android project on Ubuntu agent of Azure Pipelines 【发布时间】:2019-05-21 02:19:52 【问题描述】:我正在为一个 android 项目配置我的构建管道。到目前为止,我的所有步骤都在 Hosted VS2017 代理上完美运行,包括获取代码、使用 gradlew 构建、发布工件并将其部署到 AppCenter。
但是,在 Hosted Ubuntu 1604 上,gradlew 步骤存在一些问题。
在 VS2017 代理上,这仅适用于:.\gradlew assembleDebug
在 Ubuntu 1604 上,这就是我现在所拥有的:
chmod 775 gradlew
chmod 775 /usr/local/lib/android/sdk --> The fix I'm working on
./gradlew assembleDebug
在没有第二行的情况下运行构建,代理会抛出这个异常:
出了什么问题:配置项目 ':app' 时出现问题。 未能安装以下 SDK 组件:build-tools;28.0.3 Android SDK Build-Tools 28.0.3SDK 目录不可写(/usr/local/lib/android/sdk)
我是 Ubuntu 的初学者...为什么它不可写?我尝试chmod
,但这样做时出现异常:chmod: changing permissions of '/usr/local/lib/android/sdk': Operation not permitted
。
我现在应该看哪个方向来解决这个问题...?提前谢谢大家!
【问题讨论】:
【参考方案1】:更改 Android SDK 的所有权:
sudo chown -R $(whoami) $ANDROID_HOME
【讨论】:
在较新的 SDK 安装中,ANDROID_HOME
已弃用并替换为 ANDROID_SDK_ROOT
,因此此命令变为 sudo chown -R $(whoami) $ANDROID_SDK_ROOT
【参考方案2】:
我在标准 Ubuntu 安装中遇到了同样的问题。
解决方案:在您的主目录中安装 Android SDK。
问题是,使用 Gradle 构建项目无法使用只读 SDK。使用apt
安装 Android SDK 会使其处于只读状态。
更准确地说,/usr/
中的所有内容都应该是只读数据,因此它归root
所有,权限设置为755
。您的用户没有写入权限,只有所有者才有。在您的主目录中安装 SDK(并确保您的用户拥有它)应该可以解决问题。
安装 SDK
我还没有看到安装只是 SDK 的好方法。有another SO question 解决这个问题;那里列出的方法之一应该可以工作。 但是,您可能会发现只安装 Android Studio 并为 SDK 选择自定义位置会更容易。
希望对你有帮助!
【讨论】:
即使这个答案对大多数人来说都是正确的。它不适用于特定问题,因为 OP 在托管代理上的 Azure Devops 中构建。 android SDK 预装在那里(出于某种原因在 /usr/lib 下)。【参考方案3】:根本不需要重新安装任何东西......
为当前登录的用户授予 write 权限可以解决问题。
【讨论】:
以上是关于在 Azure Pipelines 的 Ubuntu 代理上构建 Android 项目时,SDK 目录不可写的主要内容,如果未能解决你的问题,请参考以下文章
如何在 azure-pipelines 中使用公钥对某些内容进行 scp?
Azure Pipelines:在 Powershell 中设置和访问变量
Azure DevOps Pipelines 上的 Android SDK 构建工具