在 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 任务超时

Azure Pipelines:在 Powershell 中设置和访问变量

Azure DevOps Pipelines 上的 Android SDK 构建工具

建立Azure Dev Ops持续集成和持续交付(CICD)(使用 Azure Pipelines 建立CICD)

建立Azure Dev Ops持续集成和持续交付(CICD)(使用 Azure Pipelines 建立CICD)