Products » mBooster » Technical Support » mBooster documentation » Ch8-FAQ
When operating in standalone mode mBooster requires:
When operating as a remote server, mBooster Remote Access Server and mBooster require:
The core functions of an obfuscator are
At the core of mBooster is an optimizing compiler. It is designed to support complex optimizations that you would expect in an optimizing compiler for a non-java platform, such as GCC. mBooster therefore is capable of performing a much greater range of optimizations that goes way beyond renaming. The optimizing compiler is complemented by a custom-built preverifier, designed to minimize the size of stackmap.
The mBooster optimization suite also includes mBoosterZip, mBoosterPng and mBoosterM3G. mBoosterZip is a ZIP/JAR deflater delivering the highest compression ratio and the smallest JAR file. mBoosterPng delivers maximum PNG recompression and is complementary to all standard PNG optimizers. mBoosterM3G delivers maximum M3G file recompression.
Tests on more than 100 commercial off-the-shelf Nokia series 40 and Nokia series 60 games have reported a median classfile size reduction of around 15% and median jar size reduction of around 12% for Nokia Series 60 games. As expected there are significant variations between the amount of size reduction achieved on individual games. On all tested games we are able to significantly reduce the size, in some cases more than 25% of the jar size.
The exact amount of size reduction is reflective of the characteristics of each mobile game. Games programmed in certain programming styles are more optimizable. Heavily manually optimized games are less optimizable.
Please also see the FAQ entry: How can we maximize size reduction?
Generally no. However certain programming idioms and constructs are very costly without mBooster; experienced J2ME programmers would avoid these constructs and employ workaround solutions instead. An example is to manually consolidate the classes into a smaller number of classes. mBooster includes a number of advanced optimizations making these manual work-arounds obsolete. Please see Optimizations. for details.
Please also see the FAQ entry: How can we maximize size reduction
mBooster supports the use of reflection in J2ME midlets. mBooster cannot precisely detect reflection and so relies on configuration from the user to indicate what classes are reflected via the REFLECTEDCLASSES property. mBooster now will warn the user when reflection is detected and will report an error if reflection is not configured completely.
mBooster is agnostic with respect to the system libraries. mBooster works equally well with DoJa applications, CLDC 1.0/1.1 applications and MIDP 1.0/2.0 applications.
mBooster is agnostic with respect to the system libraries. mBooster works with any vendor specific/handset specific libraries.
The LIB.CLASSPATH property must be defined to include these system libraries.
mBooster works with any third party libraries. mBooster does not require the source code of the third party libraries. Through whole program optimizations, mBooster will deliver size and performance advantages by analyzing and optimizing the interactions between the third party libraries and your proprietary classes.
The APP.CLASSPATH property must be defined to include these third party libraries.
mBooster is highly configurable. The default settings will provide reasonable size reduction, however you could consider the following modifications for even higher size reduction:
mBooster is designed to provide maximum size reduction. Some mBooster optimizations are very computation intensive. Typically day-to-day builds may not require maximum size reduction but could benefit from a faster mBooster run-time. The following setting would help reduce mBooster run time:
mBooster contains partial result caching. The intermediate results are cached to speed up subsequent mBooster runs on the same application (or variants). Note: mBooster Evaluation Version disables this feature.
On a computer with 784MB memory (at least 512MB free memory) and an AMD XP2500, when mBooster result caching is enabled it takes on average 1.5 - 4 minutes to optimize a Nokia series 60 commercial game on the above recommended property settings on subsequent runs. If mBooster is taking significantly longer, it is likely due to inadequate available memory. Please refer to this FAQ entry for a suggested work-around.
mBooster is constrained to not consume more than 512MB of memory due to a need to avoid excessive paging of the hard disk, and this is fine for optimizing most applications. On systems with 1GB or more RAM, large applications can be optimized more quickly by raising this limit with a special windows environment variable. Please see this section: Controlling memory use.
mBooster requires 512MB of free memory. If your computer does not have adequate physical memory, mBooster can cause constant memory paging, and result in a greatly deteriorated mBooster run time.
You may be able to run mBooster on low memory systems by setting a limit to how much memory mBooster is able to use. Please see this section: Controlling memory use
The most common cause of this problem is the use of reflection capabilities within the application. If your application does use reflection, you must specify the set of reflected classes through REFLECTEDCLASSES properties.
Please also see the next FAQ entry.
The most common cause is that the optimized version has run out of heap memory. We recommend that you check for out of memory errors using an emulator. If the optimized application had indeed run out of heap memory, it is likely a result of Resource Packing optimization and/or Class Merging optimization
Resource Packing is a powerful optimization, but must be used with care with heap memory constrained applications. Please refer to this section on how to avoid this issue.
Class merging must also be used with care with heap memory constrained applications. Please refer to this section on how to control heap memory usage with respect to class merging.
Please also see the previous FAQ entry.
Java specifications specify that class names are case-sensitive. mBooster internally complies with the Java specifications and respects the case-sensitivity of all resource files and classfiles.
However the file system in Microsoft Windows is case-insensitive. If mBooster is instructed to invoke an external program such as 7-Zip or an external preverifier, it must save the intermediate results onto the file system. Due to the case insensitivity of the file system, if there are multiple files with the same name but in different cases, they would conflict and the subsequent behavior is undefined. If your application have multiple files that would conflict in a case-insensitive environment, please configure mBooster in the following way to avoid calling external applications:
Great! We would love to fix the problem. If it is possible please send the jar file to us mbooster-support@innaworks.com together with the property file and information on the operating environment. We appreciate your assistance to help us track down the problem.
Please see Optimizations.
We would love to hear any feedback especially on how we can improve mBooster to work better for you. Please contact our R&D team on mbooster-support@innaworks.com. We look forward to a conversation to understand your requirements better.