Proguard: How to keep everything except specific condition?
Asked Answered
M

1

8

I'm using Proguard to obfuscate my code, and I need to keep every third party libraries like:

-keep class com.layer.**
-dontwarn com.layer.**
-keep class com.twitter.**
-keep class android.support.**
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
...

And whenever I add a new third party library, I need to check its package name and add it to my proguard config file, or the app may crashes.

Can't I write the rule just like this? I don't care about codes that's not mine.

-keep class !(my.package.name.**)
-dontwarn !(my.package.name.**)

Thanks!

Montagna answered 10/9, 2016 at 2:22 Comment(0)
I
18

To keep everything except classes in your own package you can use the rule that you already pointed out (excluding the brackets):

-keep class !my.package.name.** { *; }

This will implicitly keep everything else. You still can add additionally -keep rules for your classes if needed.

The rule for the -dontwarn should work in a similar way:

-dontwarn !my.package.name.**,**

You can also add similar -dontnote rules if needed.

Illogicality answered 10/9, 2016 at 13:20 Comment(5)
I tried this but it third party library warnings are still popping up. I only have -keep, -dontwarn, -verbose, and -keepattributes SourceFile,LineNumberTable,Annotation.Bumbling
Then you can try using -dontwarn !my.package.name.**,**Illogicality
Thanks, the , ** was necessary for -dontwarn line.Bumbling
Does it still work for you? I can't get it running: Proguard (R8) negate operator not working to keep anything except certain packagesCadastre
I had to use below syntax to keep class and methods intact -keep class !my.package.name.**,** { *; }Pestilence

© 2022 - 2024 — McMap. All rights reserved.