我应该如何为Android库配置Travis-CI?

时间:2014-01-10 22:54:42

标签: android travis-ci

我正在开发一个Android库(RateMyApp,您可以在GitHub上找到它)但我无法看到每次推送新代码时我应该如何设置它Travis CI

我使用的.travis.yml文件如下:

language: java
script:
    - gradle bundleRelease

但它似乎被忽略,因为永远不会调用gradle bundleRelease。相反,我得到以下输出,表明我调用了gradle assemble

Using worker: worker-linux-8-1.bb.travis-ci.org:travis-linux-5

travis_fold:start:git.1
$ git clone --depth=50 --branch=master git://github.com/mariosangiorgio/RateMyApp.git
[...]
mariosangiorgio/RateMyApp
Cloning into 'mariosangiorgio/RateMyApp'...
done.
travis_fold:end:git.1    
$ cd mariosangiorgio/RateMyApp
travis_fold:start:git.3
$ git checkout -qf 90faf4539c835136895ea92dd2bcc7da12ad1145
travis_fold:end:git.3
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
$ javac -version
javac 1.7.0_45
travis_fold:start:install
$ gradle assemble
[...]
The command "gradle assemble" failed and exited with 1 during install.

Your build has been stopped.

我读了page linked in the documentation,但不幸的是,这对我没什么帮助。

3 个答案:

答案 0 :(得分:3)

这是构建apk的我的yaml文件。但它也适用于图书馆。

language: java
jdk: oraclejdk7
branches:
  only:
    - master
before_install:
  - chmod +x gradlew
  # Install base Android SDK
  - sudo apt-get update -qq
  - if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch > /dev/null; fi
  - wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz
  - tar xzf android-sdk_r22.0.5-linux.tgz
  - export ANDROID_HOME=$PWD/android-sdk-linux
  - export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
  # install android build tools
  - wget https://dl-ssl.google.com/android/repository/build-tools_r19.0.1-linux.zip
  - unzip build-tools_r19.0.1-linux.zip -d $ANDROID_HOME
  - mkdir -p $ANDROID_HOME/build-tools/
  - mv $ANDROID_HOME/android-4.4.2 $ANDROID_HOME/build-tools/19.0.1
  # Install required components.
  - echo yes | android update sdk --filter platform-tools --no-ui --force > /dev/null
  - echo yes | android update sdk --filter android-19 --no-ui --force > /dev/null
  - echo yes | android update sdk --filter extra-android-support --no-ui --force > /dev/null
  - echo yes | android update sdk --filter extra-android-m2repository --no-ui --force > /dev/null
install:
  - true
script:
  - TERM=dumb ./gradlew test assembleDebug

但要小心,因为这个脚本不会在任何地方推送构建的人工制品

答案 1 :(得分:3)

我在SDK installer .travis.yml中使用Hilt脚本。

language: java
jdk: oraclejdk7
before_install:
    # Install base Android SDK and components
    - sudo apt-get update -qq
    - sudo apt-get install -qq libstdc++6:i386 lib32z1 expect
    - export COMPONENTS=build-tools-19.0.3,android-19,extra-android-support,extra-android-m2repository,extra-google-m2repository
    - export LICENSES=android-sdk-license-bcbbd656
    - curl -3L https://raw.github.com/embarkmobile/android-sdk-installer/version-2/android-sdk-installer | bash /dev/stdin --install=$COMPONENTS --accept=$LICENSES
    - source ~/.android-sdk-installer/env

install:
    # Without TERM=dumb, we get mangled output in the Travis console
    - TERM=dumb ./gradlew clean assemble -PdisablePreDex

script:
    - TERM=dumb ./gradlew check -PdisablePreDex

编辑: Travis-CI已将Android作为一等公民实施 - http://blog.travis-ci.com/2014-05-07-android-build-support-now-in-beta/

答案 2 :(得分:1)

要解决您看到gradle assemble而不是gradle bundleRelease的原因:

默认情况下会在Travis的gradle assemble阶段调用

install:(有关阶段的说明,请参阅Travis docs,以及this note)。

由于您的脚本没有install:部分来覆盖默认值,因此Travis正在调用gradle assemble

您可以通过添加以下行来防止这种情况,这会告诉Travis在安装阶段不要做任何事情:

install:
    - true

我有a similar issue,Travis在我希望执行gradle assemble时执行gradlew assembleDebug

所以,对我来说,一个完整的工作脚本(截至2014年5月1日,Android as a first class citizen)是:

language: android
jdk: oraclejdk7

android:
  components:
    - build-tools-19.0.1

install:
    - true

script: TERM=dumb ./gradlew assembleDebug

感谢Austyn Mahoney为我澄清这一点here

修改

截至2014年5月8日,Travis CI删除了Android测试版的默认install:阶段,正如here所述。因此,您现在应该可以从脚本中删除install:阶段,Travis不应该执行gradle assemble