Just a small FYI, for some reason, IntelliJIdea does not want api-keys.xml so use api_keys.xml instead.
–
RupertOct 4 '13 at 0:25

This is a great answer. For some reason I thought all string resource xml files needed to be named values by convention. Now I have learned that I can do the same thing on Android as I do for my other projects!
–
Mike HollerFeb 7 '14 at 6:34

Well, what you could do is put your AndroidManifest.XML file in your .gitignore file and that way it won't get pushed up with the rest of your code.. Then just push up a readme file or something that has a generalized AndroidManifest.xml source that anyone would have to copy and paste into an AndroidManifest.xml file in order to build your application. That way you can make changes in your app, build it as needed and then not have to deal with generalizing it on every build and push into source control.

The way I have approached similar issues in the past is by using specific branches in my git repo for pubic pushes.

Say you have a local master branch with your keys in the manifest. When you are ready to push to github (or wherever else) you can make a new "release" branch with no history. You can see a bit more about that here: How to push new branch without historygit branch --orphan release. Once you do that remove all private information, commit all files and push only that branch to github git push origin release.

The issue with this is you will not have a commit history, maybe someone else can come up with something better.