Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't enable Proguard on Android project containing jsch lib

I am trying to use Proguard to obfuscate my Android app which makes use of the library jsch-1.50.jar for uploading files to an SFTP server.

When I do an export from Eclipse, I get warnings "can't reference class" and nothing is produced. I have tried all manner of options to tell Proguard to ignore the jsch classes, but it's not making any difference and therefore I wonder if I am misunderstanding how this works. I am not too worried about the optimisation, but I would like the code obfuscated.

I have setup the proguard-properties as follows:

-keep class com.jcraft.jsch.jce.*
-keep class * extends com.jcraft.jsch.KeyExchange
-keep class com.jcraft.jsch.**
-keep class com.jcraft.jzlib.ZStream
-keep class com.jcraft.jsch.Compression
-keep class org.ietf.jgss.*

-libraryjars /libs/jsch-0.1.50.jar

The project-properties file contains an entry for "proguard.config=proguard-project.txt".

The output from the export with duplicates removed:-

Warning: com.jcraft.jsch.jcraft.Compression: can't find referenced class com.jcraft.jzlib.ZStream
Warning: com.jcraft.jsch.jgss.GSSContextKrb5: can't find referenced class org.ietf.jgss.Oid
Warning: com.jcraft.jsch.jgss.GSSContextKrb5: can't find referenced class org.ietf.jgss.GSSManager
Warning: com.jcraft.jsch.jgss.GSSContextKrb5: can't find referenced class org.ietf.jgss.GSSException
Warning: com.jcraft.jsch.jgss.GSSContextKrb5: can't find referenced class org.ietf.jgss.GSSContext
Warning: com.jcraft.jsch.jgss.GSSContextKrb5: can't find referenced class org.ietf.jgss.MessageProp
Warning: there were 44 unresolved references to classes or interfaces.
You may need to specify additional library jars (using '-libraryjars').
Error: Please correct the above warnings first.

Would very much appreciate any pointers.

Thanks Mike

like image 259
mikcatta Avatar asked Mar 22 '23 22:03

mikcatta


1 Answers

After a bit more investigation, I found the following...

I had forgotten to include jzlib-1.1.1.jar in the project with the corresponding

-libraryjars /libs/jzlib-1.1.1.jar

entry in the proguard-properties.txt.

Also to ignore the warning regards references to "class org.ietf.jgss", I tried the suggested method of excluding the referencing class

-libraryjars /libs/jsch-0.1.50.jar(!com.jcraft.jsch.jgss/GSSContextKrb5.class)

but that didn't help. In the end, I went with :-

-dontwarn org.ietf.jgss.**
like image 105
mikcatta Avatar answered Apr 25 '23 01:04

mikcatta