This is a fairly advanced topic and there are different methods, but I have yet to even spend time finding the best solution for Android / GL ES 1.X. It sounds like you came across a few that I'll summarize. If you are asking for ready made Java/Android code that does this you may very well be out of luck.
First, there is ray casting, but it only partially answers your question, but provides some mileage. You can can cast a ray from eye/camera position to the point on the touchscreen and set up a plane perpendicular to the cube. This will find a point on that plane then you can test with an AABB (axis aligned bounding box) to determine if the cube is selected. To detect which specific side is a little more complex.
Color picking (could work well if each face of the cube is a different color or you perhaps render twice; requires no lighting or other effects):http://www.lighthouse3d.com/opengl/pick ... hp3?color1
This might work the best in non-complex scenes like your example.
Depth picking (haven't tried this):http://blogs.agi.com/insight3d/index.ph ... th-buffer/
Somewhat related and perhaps your next question:
model rotation based on user perspective (see the bottom of this article)http://www.sunsetlakesoftware.com/2008/ ... -opengl-es
glGetFloatv is not implemented on the G1 / 1.5/1.6 OSes though I haven't checked on the Droid / 2.x You have to use something similar to the matrix tracking code in the triangles GL demo provided by Google.
I'm sure there may be other methods suitable for OpenGL ES, but I have yet to explore them. I'd recommend color picking at this point especially since your scene is so simple. When you have to detect a pick you can just clear/render the colored version do the check / clear the buffer / then render the actual full scene