title: How to deliver a java program to a client?
body: <p>I wrote a software application in Java. Now I want to deliver it to my clients. But before that, I want to do something on that software which are mentioned below. You can answer any or all of the below questions:</p>
  
  <p>I want to:</p>
  
  <ol>
  <li>Encrypt all the .class files so that no one can decompile it. How can I encrypt it?</li>
  <li>After encryption I want to obfuscate that code to add extra safety. How can I do that?</li>
  <li>Add some "serial-key" functionality so that the software works only after registering it with the key provided by me. This is very important so as to prevent multi-user usage of my software. How can I add that key functionality and how can I generate keys. And how can I restrict that software to work only on a single computer.</li>
  <li>The jar file can be unzipped and the .class file can be seen. Is there any way to wrap jar file into something so that no one can unzip that file.</li>
  <li>I don't want to tell the client to first install java to run my application. So is there any way by which if anyone installs my software, the java automatically gets installed on his/her computer without informing him that java is being installed to his computer. If it is possible, then Is it legal to use Java software in this way.</li>
  <li>Change the icon of the jar file permanently.</li>
  <li>Implement a code which checks my site for any available updates.</li>
  </ol>
  
  <p>If you want any other suggestions to increase the security of the softwre, then you are welcomed too.</p>