Sunday, September 30, 2012

Android build on Ubuntu 64

After fiddling with what should have been a trivial matter (i.e., following directions on android.com) I kept running into:
user@AndroidBuilder:~/android_src/out/host/linux-x86/bin$ ANDROID_SWT=/home/user/android_src/prebuilts/tools/linux-x86_64/swt ./android avd
using /home/user/android_src/out/host/linux-x86/framework/sdkmanager.jar:/home/user/android_src/out/host/linux-x86/framework/swtmenubar.jar:/home/user/android_src/prebuilts/tools/linux-x86_64/swt/swt.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.C.(Unknown Source)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.android.sdkmanager.Main.showAvdManagerWindow(Main.java:354)
at com.android.sdkmanager.Main.doAction(Main.java:307)
at com.android.sdkmanager.Main.run(Main.java:118)
at com.android.sdkmanager.Main.main(Main.java:101)
I searched high and low, and finally decided to edit the out/host/linux-x86/bin/android script, swapping the classpath order to -classpath "$swtpath/swt.jar:$jarpath" \ (i.e, put the swtpath first).  Note from my invocation of the android script that ANDROID_SWT (and therefor $swtpath) is pointing to prebuilts/tools/linux-x86_64/swt.  However, if I let the jarpath come first, java wants to use the wrong swt.  With this tweak, instead of a stack trace, I get:


It's also annoying to install jdk6 on Ubuntu 12.04.  I blame Oracle...