Как помешать декомпилировать клиентскую программу?
1) Наговнокодить
2) Вырубить дебаг режим при компиляции.  
3) Использовать  какой-нибудь обфускатор типа ProGuard
Больше нет смысла заморачиваться.
Смотря какая цель преследуется:
1. Не дать воспользоваться вашим кодом для создания другого аналогичного продукта.
2. Скрыть какую-то маленькую "изюминку", которую можно использовать для читерства, если раскопать ее в коде.
Первое - вполне реально. Стоимость доработки вашего кода без исходников будет намного превышать стоимость создания аналогичного продукта с нуля.
Второе - нереально в принципе. Не стоит тратить время на это. Потребность в скрытии "изюминок" возникает обычно вследствие ошибочных архитектурных решений (например, проверка на клиенте того, что по-нормальному должно проверяться на сервере) или ошибочных бизнес-моделей.