Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Jenkins and Android

We use Jenkins to build our Android app. I am converting the build from r12 to r18 (now r20, since Google I/O 2012) which is forcing some config changes, but trying to preserve the old build in case we need to rebuild something old. So I use $ANDROID_HOME, specified in the System config under “Android SDK root”, which each job will specify, to point to the correct SDK. And I define two other vars, ANDROID_HOME_18 and ANDROID_HOME_12 to refer to later.

[EnvInject] - Injecting as environment variables the properties content 
ANDROID_HOME=${ANDROID_HOME_18}
PATH=${ANDROID_HOME_18}/tools:${ANDROID_HOME_18}/platform-tools:${SONAR_RUNNER_HOME}/bin

[EnvInject] - Variables injected successfully.
[locks-and-latches] Checking to see if we really have the locks
[locks-and-latches] Have all the locks, build can start
$ /usr/share/android-sdk-macosx.r18//tools/android list target
/usr/share/android-sdk-macosx.r18//tools/android: line 30: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 33: basename: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 40: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 44: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 48: basename: command not found
[android] The configured Android platform needs to be installed: android-8
[android] Installing the 'android-8' SDK component(s)...
$ /usr/share/android-sdk-macosx.r18//tools/android update sdk -u -a -t android-8
/usr/share/android-sdk-macosx.r18//tools/android: line 30: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 33: basename: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 40: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 44: dirname: command not found
/usr/share/android-sdk-macosx.r18//tools/android: line 48: basename: command not found
: can't find sdkmanager.jar
[android] Using Android SDK: /usr/share/android-sdk-macosx.r18/
[android] Waiting 1 seconds before starting emulator...
$ /usr/share/android-sdk-macosx.r18//platform-tools/adb start-server

Lots of things missing. dirname and basename live in /usr/bin, cannot be found due to bad path. sdkmanager.jar missing. Add /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin to PATH. Better. Still cannot find the android-8 libs. Spent a lot of time, adding debug to the Ant scripts, trying to log the environment. Ready to crack into the source. Sigh.

Read a bit on the Android Emulator Plugin, and it exports ANDROID_HOME. Could it be colliding with mine? I injected a NEW home variable, instead of ANDROID_HOME, and use that to pass in the current SDK location.

[EnvInject] - Injecting as environment variables the properties content 
XXX_ANDROID_HOME=${ANDROID_HOME_18}
PATH=${ANDROID_HOME_18}/tools:${ANDROID_HOME_18}/platform-tools:${SONAR_RUNNER_HOME}/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

[EnvInject] - Variables injected successfully.
[locks-and-latches] Checking to see if we really have the locks
[locks-and-latches] Have all the locks, build can start
[android] Using Android SDK: /usr/share/android-sdk-macosx.r18/
[android] Waiting 1 seconds before starting emulator...
$ /usr/share/android-sdk-macosx.r18//platform-tools/adb start-server
[android] Starting Android emulator
[android] Erasing existing emulator data...
$ /usr/share/android-sdk-macosx.r18//tools/emulator -no-boot-anim -ports 58553,58554 -prop persist.sys.language=en -prop

and that seems to work.

Takeaway : don’t define ANDROID_HOME locally, let the plugin define it. It will anyway.

Leave a Reply