ZXing (AKA Zerba Crossing) is the oldest of the three, it boasts the best maintenance record, and in my experience is also the most popular. It is a Google project from way back in 2007, and is still receiving regular updates.

The project consists of a core Java library that handles the decoding for all platforms, and a number of platform-specific apps (including Android, Glass, Java SE, and the web). You are probably already familiar with the Android app in the repository- it is the app known simply as Barcode Scanner.

That’s where we run into the first problem with ZXing, and it is a big one. There is no Android-specific library that manages the camera APIs. The “correct” way to use ZXing is to use the android-integration library to fire off an intent to launch the Barcode Scanner app.

We don’t want to ask our users to install two apps for one of our most popular features, so the integration library is not a viable solution. Instead we went with a popular approach: take the source code for the Android app, plop it into our application, and hack it apart to suit our needs. Of course this isn’t an ideal solution, particularly because it makes incorporating future ZXing updates more difficult.

There are some efforts out there such as ZXing Android Embedded and dm77's Barcode Scanner that aim to fix this. However, those suffer the same issue with updating the core ZXing libraries. Due to this and the fact that in the end still use the same underlying scanning libraries we didn’t explore these wrapper libraries much further.

One other issue we ran into with ZXing is that it only supports scanning barcodes that are in the same orientation as the camera. If you scan a barcode at a 90° angle, ZXing won’t pick it up. Even trying to coerce ZXing to support an Activity in portrait used to be a chore, but at least that was fixed recently.

Pros: Well-supported, reasonably quick, accurate

Cons: Most difficult to integrate, only supports one barcode orientation at a time.