I understand where you're coming from, it's a popular situation, but fortunately you have several options.
Firstly: Protect your work
If your serious about it, then the very first step you should do is to copyright it. When people think of copyrighting they often think of some all-controlling mechanism that you buy to lock down your app so no one can touch it. This is in fact wrong.
A copyright says that your work is your work, officially, and that whatever rules you lay down, even if it's anybody can do anything or something really weird like you must write my name on derivative work 5 times in a row has to be upheld legally or said person will be in copyright violation.
Copyrights are also fairly cheap (I think like $35) and last a lifetime, literally, so copyright up. By doing this, you can set certain limits (Adhering to open source philosophy, keeping your app wonderfully open source, but also have placeholders in place that don't disrupt the open source-ness of your app but allow you to make some kind of money). If people blissfully ignore your app, and recreate it as you said how you don't want it to be used, they are in copyright violation and you have right to take action if you want to so you have legal backing.
Secondly: Think about how you want to make money
Alright so you may or may not have gotten the copyright but now how do you want to make money without ruining the open source-ness and overall enjoyment from it.
Here are many popular methods people use, you can pick any or all you like, maybe they'll also help you come up with some of your own.
- Take donations?
- It's a huge 2-minute freebie to just place a Bitcoin, Ethereum, or other coin address as well as maybe a PayPal address address in your README file or other page, not anywhere nagging or annoying, just somewhere off to the side but easily findable and accessible. If your app is good enough, trust me, people will look for somewhere to pay you for your efforts. I've seen this many times where people repeatedly asked the developer for a donation address because he/she didn't charge anything or provide one and was nagged enough one was finally noted somewhere.
- Derivatives cannot be commercialized?
- This is a popular one used by many big companies although there are others ones noted below that you may find better. With this option, you allow any derivative work (which is very open-source compliant) and encourage derivative work (good for business for you if you require attribution) but disallow all derivative work to be sold for profit. The last part is a bit of a hiccup on the open source community because it means you are the sole person who can profit from it but I note it because many companies do use this
- Derivatives can be commercialized only via license
- It's the same as above but very popular with big companies who want to open source their projects. Instead of you being the sole person ever who can make money on your project, it allows the purchase of a license setup however you want in order for said derivative to make profit. Again some companies who are serious about open source are moving away from this as there are arguably better ways to do this but it's another popular option I list here for completion sake. It also allows companies or organizations to take in your project/app or game possibly under a different set of rules that might interest them more and gain extra payout from them while you still keep control over it
- Derivatives can be freely commercialized with shared profit percent
- This is based on the idea that "Your success is my success" and what some companies are moving towards. The famous Unreal Engine has also very successfully chosen this path. Essentially it's the same as above but allows you to denote a percent of profits that the derivative projects must share with you. Usually, if you choose this option, it's recommended to pick a starting amount. For example the unreal project requires this only if your project is making I think $1,000 a month or something like that giving the project at least a fighting chance to startup and become successful first.
- Derivatives must follow one or more from above unless it's different enough
There are many other setups you can think about like derivatives of derivatives, or if the derivative looks different enough it should be regarded as its own project and not tied to yours (This protects you from blatant copies as you mentioned in your post where all that happens is it's free). Just brainstorm away on other ideas.
But a copyright will give you legal backing to tackle those who ignore any set of rules you make or misuse your project in some way and give you more control down the road in many various cases. It's no problem if you don't copyright it, but then your mostly own your own if people decide to just ignore whatever license or rules you have set in place.
If I'm wrong anywhere feel free to correct me and best of luck ^_^