Шифрование будет трудным, но вы можете запутать байт-код, чтобы сделать его более трудным для чтения. Выезд Proguard .
Вы не можете сделать невозможным декомпиляцию, если хотите, чтобы она работала. Это было бы верно, даже если ваша программа была сделана, например, на C или C ++ (только сложнее).
Возможно, вы могли бы динамически загружать части программы и шифровать эти части, но тогда пользователю потребуется указать ключ шифрования, и поэтому он сможет декомпилироваться в любом случае.