Convert my Sikuli python script in a java (obfuscated) standalone package --- available in 1.1.2 after 2017-11-29

Asked by Max

------------------------- solution information

see faq 2947

---------------------------------------------------------
Hi!

Preface: I'm not a software developer and have never developed anything in java :)
I developed some sikuli scripts in python to automate actions for my researches (I work in academia).

Now I need to build a java standalone package for one of my programs (with the obfuscation) to be able to run it without installing and configure sikuli when I move or if I need to lend it to other departments.

I asked already the question here => https://stackoverflow.com/questions/47042941/jar-or-exe-file-from-sikuli-python-script
 but could not performed already the second step...

I have my script in a folder "my_program.sikuli":

image1.png
image2.png
...
script.py

So far I just compiled my py script with jython obtaining a .class file

$JYTHON_HOME/jython $JYTHON_HOME/Lib/compileall.py /home/my_program.sikuli/

===> a new file called "script$py.class" is in /home/my_program.sikuli/

Now I have no idea what to do and how to do it! In the link they spoke about wrappers and __run__.py but cannot understand what to do.

Could you help me explaining step by step the actions?

Thank you very much for your support!!!!!!!

Question information

Language:
English Edit question
Status:
Solved
For:
SikuliX Edit question
Assignee:
No assignee Edit question
Solved by:
RaiMan
Solved:
Last query:
Last reply:
Revision history for this message
RaiMan (raimund-hocke) said :
#1

Currently I am on holiday for 2 weeks. When I am back, I will have a look at it. Thanks for finding the interesting post.

Revision history for this message
Max (max883) said :
#2

Thank!

Revision history for this message
Max (max883) said :
#3

any idea?!? :)

Revision history for this message
RaiMan (raimund-hocke) said :
#4

some patience ? ;-) see comment #1

Revision history for this message
Max (max883) said :
#5

eheheh yep sorry :P my apologies!

Revision history for this message
RaiMan (raimund-hocke) said :
#6

ok, it is a bit of a challenge ;-)

... but I have decided to make it !!!

I guess later tomorrow there will be a compact solution, that allows, to create a jar, that runs a compiled (hence obfuscated) script with just saying:
java -jar myscript.jar

everything needed to run the script is contained in the jar.

--- planned extras:
- stuff needed to be imported can be integrated (including other jar files)
- images will be integrated and loaded from the jar at runtime

To create the script jar, you will have to say something like this:
java -jar sikulixsetup... scriptjar folder-containing-script optional:folder-containing-images optional:other-stuff

Hope you can wait ;-)

Revision history for this message
Max (max883) said :
#7

of course!!! this sounds amazing!!!!!!!!!!!!!!!!!!!!!!!!!!!

Revision history for this message
Best RaiMan (raimund-hocke) said :
#8

Here you are with a basic solution:

- run a setup with the latest nightly 1.1.2 (select option 1 and 2)

- in the setup folder run
java -jar sikulixsetup-1.1.2-....jar scriptjar <path-to-your-script>

- if everything works, you get a script.jar (which you might rename as you like)

- to run your script jar:
java -jar <path-to-script-jar>

Be aware:
- with every script, that you pack this way, you get a jar that at least has 60MB
- this only works for one script currently

For now I decided to leave it experimental for now and undocumented, because it does not look like the ultimate solution ;-)

My idea is to have a runner jar, that can be used to run other jars, that only contain obfuscated/compiled scripts.

The overall challenge is to allow imports and assure access to image files contained in the scripts.

Revision history for this message
Max (max883) said :
#9

Excellent!!! I will try tonight :) Thank you sooooo much for your help!!!!!!!!!! I'll let you know the result ;)
Thanks again!

Revision history for this message
Test App (laxmisaketha) said :
#10

Hi Raiman,

With reference to question https://answers.launchpad.net/sikuli/+question/660834, you have suggested me to try the above solution

I installed Sikuli 1.2 and was able to generate a script.jar file
After this i created a run.bat file to run my script.jar

java -jar <path-to-script-jar>

Running the run.bat file does not execute my script

However when i click on script.jar i am able to run my script , I could probably live with this , But to perform certain actions on windows, i have to run as administrator , So right clicking on run.bat file and running as administrator would execute my scripts But in this case i somehow cannot run the bat file

Request your expertise on this

Thanks

Revision history for this message
Test App (laxmisaketha) said :
#11

I am sorry Raiman

Had a typo in my batch file was supposed to be java -jar (with a space)
Thank you so much , the solution worked :)

Revision history for this message
Max (max883) said :
#12

It works! Thanks again, amazing solution :)

Revision history for this message
Max (max883) said :
#13

Thanks RaiMan, that solved my question.

Revision history for this message
RaiMan (raimund-hocke) said :
#14

Fine, thanks for feedback.

I decided, to add the jar-packing for scripts into the IDE file menu as "Export to jar" (script only) and "Export to run jar" (self running including sikulixapi and Jython).

Also I will add the jar variant to the different script run options (only relevant for the script-only version).

In version 2 this will be the only option to save and run any scripts (while .sikuli and .skl can still be loaded).

Revision history for this message
RaiMan (raimund-hocke) said :
#15

Be aware:
the current solution (the one you are using) creates a jar, that only works on the same system type:
- created on Windows only runs on Windows
- created on Mac .....

The final solution will have an option to select the target system (which then will have the correct native library package).

Revision history for this message
RaiMan (raimund-hocke) said :
#16

I made some slight changes.

So with a SikuliX 1.1.2 after Nov 29th you have to read faq 2947 carefully ;-)