3

我正在尝试在 AWS 服务器中安装 Android 环境。这是 buildspec.yml 文件,其中包含一组用于安装 Android SDK、NDK 和gradlew以生成 android build 的命令。适用于 Android 的 SDK 和 NDK 已成功下载并安装在 AWS Ubuntu 系统上。甚至我可以看到成功构建的./gradlew build的日志。

构建规范.yml

version: 0.1

phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
      - sudo apt-get -y install wget
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
      - wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
      - tar zxvf android-sdk_r24.4.1-linux.tgz
      - mkdir -p android-sdk-linux/licenses
      - cp android-sdk-license ./android-sdk-linux/licenses/
      - echo sdk.dir='pwd'/android-sdk-linux > local.properties
      - wget https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
      - unzip android-ndk-r13b-linux-x86_64.zip
      - export ANDROID_NDK_HOME=`pwd`/android-ndk-r13b
      - export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_NDK_HOME}
      - echo "sdk.dir=$ANDROID_HOME" > local.properties
      - echo "ndk.dir=$ANDROID_NDK_HOME" >> local.properties
  build:
    commands:
      - root/./gradlew --debug --stacktrace build
      - root/./gradlew assemble

  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
   files:
    - Monoca/app/**/*

当我尝试为 Android 构建执行./gradlew assemble命令时,它可以在 Android Studio 的 Android 输出目录中生成应用程序文件 (.apk),但不幸的是它在 AWS CodeBuild 环境中不起作用。

有人对这个问题有深入的了解吗?如果您在设置部分发现任何错误,请提出建议。

我已按照 AWS CodeBuild 的本教程进行操作。

4

1 回答 1

6

我认为这里的问题在于跨 CodeBuild 不遵循的命令传播环境变量值。CodeBuild 在新的 shell 中执行每个命令。最后 2 个命令本质上会将 sdk.dir 和 ndk.dir 变量设置为空(您可以通过运行来验证这一点cat local.properties)。

- echo "sdk.dir=$ANDROID_HOME" > local.properties - echo "ndk.dir=$ANDROID_NDK_HOME" >> local.properties

正确的方法是将构建逻辑移动到从 buildspec.yml 执行的脚本

- ./my-gradle-build.sh

或者

不使用环境变量在 local.properties 中设置变量,而是使用路径。

- echo sdk.dir='pwd'/android-ndk-r13b > local.properties - echo ndk.dir='pwd'/android-ndk-r13b >> local.properties

我希望这有帮助。

谢谢!

于 2017-03-14T18:26:52.423 回答