views:

306

answers:

2

I am trying to process with Proguard a MS Windows desktop application (Java 6 SE using the SWT lib provided by Eclipse). And I get the following critical error:

Unexpected error while performing partial evaluation:
Class = [org/eclipse/swt/widgets/DateTime]
Method = [<init>(Lorg/eclipse/swt/widgets/Composite;I)V]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/StringBuffer] and [org/eclipse/swt/internal/win32/TCHAR])
Error: Can't find common super class of [java/lang/StringBuffer] and [org/eclipse/swt/internal/win32/TCHAR]
----------------------------

When I tried to Google the error, it came out only on two spots on the entire web, that astonished me greatly. I am newbie using Proguard and Java code optimization tools at all. Any thoughts and suggestions how to fix this, will be appreciated. Thanks in advance.

Above error is now fixed, with the using of "-dontskipnonpubliclibraryclasses"

--final update:

I still get another error now. The whole output is now the folowing:

D:\eclipse_projs\java_obfuscate\gci>gci.bat
ProGuard, version 4.4
Reading program jar [D:\eclipse_projs\java_obfuscate\gci\gci.jar]
Reading library jar [D:\jre1.6.0_07\lib\rt.jar]
Unexpected error while evaluating instruction:
  Class       = [org/eclipse/swt/widgets/Synchronizer]
  Method      = [runAsyncMessages(Z)Z]
  Instruction = [60] aload_1 v1
  Exception   = [java.lang.IllegalArgumentException] (Value is not a reference value [proguard.evaluation.value.UnknownIntegerValue])
Unexpected error while performing partial evaluation:
  Class       = [org/eclipse/swt/widgets/Synchronizer]
  Method      = [runAsyncMessages(Z)Z]
  Exception   = [java.lang.IllegalArgumentException] (Value is not a reference value [proguard.evaluation.value.UnknownIntegerValue])
 Error: Value is not a reference value [proguard.evaluation.value.UnknownIntegerValue]

D:\eclipse_projs\java_obfuscate\gci>

This is a problem that i cannot understand for certain :( any help will be much appreciated.

The options I use are the following:

-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-optimizationpasses 3
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontnote
+1  A: 

Try adding the option -dontskipnonpubliclibraryclasses to your command line.

From the Proguard Manual:

Limitations

For efficiency, ProGuard always ignores any private or package visible library classes while reading library jars. If any of them are extended by public library classes, and then extended again by input classes, ProGuard will complain it can't find them. In that case, you'll have to use the -dontskipnonpubliclibraryclasses option, and maybe even the -dontskipnonpubliclibraryclassmembers option. The graphical user interface has checkboxes for these settings.

JRL
yes, I did it, and those error has now been resolved.Unfortunately, other errors are now rising:I'm gonna add them up in my post above, as an update
PatlaDJ
yes thank you JRL, I'm trying the command line verison to get to work, coz it will be more convinient for me.
PatlaDJ
A: 

Try removing the -dontnote option. You may have duplicate definitions that you aren't receiving warnings for, or maybe you're ignoring the warnings.

Marcus Adams
LOL :DI am actually ignoring the warnings, how bad can this be ?Now I will try to add warnings in -keepclassmembers, i'll write back my progress.
PatlaDJ
no actually I have NO warnings now currently. I had Only notes, and when I put -dontnote, I still get an error, that for me is impossible to comprehend. I did paste all the output in my original question as --final update, see above.
PatlaDJ