Yes, you can use the OSM XML data. Unfortunately it's a 250GB XML file. Trying to get all that data onto a mobile device is very challenging.
I don't think SQLite is the right way to store the map data, you're going to need something more efficient (in terms of disk space efficiency). There is a format under development called OSM Mobile Binary Format, which may be suitable:
Essentially it breaks the world up into smallish chunks, and has some simple math to figure out which one you need for a given position in the world. You should be able to fit at least most of the world on a typical smartphone in this format.
That will cover reverse geocoding. But for geocoding you will need your data the other way around, perhaps an SQLite database containing street/city names with a single lat/long coordinate for each one. Once you have a lat/long, you can quickly search the OSM Mobile Binary files to find the rest of the metadata related to that entry.
You are required to provide your own mirror of the data for all the users of your app. You cannot write an app which downloads data directly from the openstreetmap servers. You will be blacklisted. This might mean you will need to sell your app for a nominal fee, to cover server costs.
In terms of licensing, it's creative commons/share alike. You need to give clear attribution to openstreetmap.org somewhere in your app, and any modifications to the map data must be released under the same or equivalent license (your actual app can be any license). See the OSM wiki for more specific details.
As long as you have the data in OpenStreetMap format (i.e., you created it in JOSM, and exported as .osm), you should be able to load it into any tool that works with OSM data.
I'd take a look at OpenTripPlanner, which has a heavy transit focus but should also work for simple walk trips. You should be able to build a graph file that is then loaded into an OTP server for routing.
We built an open-source OTP Android app as well, which you're free to use (and contribute to ;)). You basically set up an OTP server, and point the app to it. Then you can plan any trip in the app based on the underlying data in OTP.
Note that the above is for routing, but won't help you with visualizing map tiles. However, we do support custom tile servers (right now we support Mapbox, Lyrk, MapQuest OSM, CycleMap, and Google tiles) in our Android app. So, if you're able to render tiles based on your .osm file and load them into a tile server, you should be able to add the tile server fairly easily into OTP Android (just a matter of configuring a new URL for a tile provider in a resource file, and adding an entry for that in the app user interface).
Feel free to contact us via mailing list if you have any more questions on these projects.
Best Answer
A ready-to-go solution can be the web service of http://extract.bbbike.org/, there you can define a boundingbox on an online map and choose many different output formats for OSM based maps. They also have mapsforge format there.
Have not tried on my own so far, so I cannot give any information about size limit for downloads, like a whole continent or similar