Android 如何使用 Proguard 将我所有的 类 放在一个包中

Android how to place all my classes in one package using Proguard

我正在开发 SDK,我的环境有 SDK 库和一个使用它的测试项目。

我想保护我的库代码不受库用户的影响,因此我需要对其进行混淆处理,但仅此而已。

所以在我的库模块的 Android Studio 中,在 proguard-rules.pro 文件中我添加了下一个脚本:

-dontpreverify
-optimizations !code/simplification/arithmetic

-keep class !com.example.**{ *; }
-keep public class com.example.sdk.Example{*;}
-keep public class com.example.sdk.IExampleCallback{*;}
-keep public class com.example.sdk.ui.ExampleActivity

-dontwarn android.util.Log

-repackageclasses 'com.example.security'
-allowaccessmodification

类 被混淆了,但他们的包没有改变。我休假 Eric Lafortune(Proguard 的作者)建议添加 allowaccessmodification,但它没有帮助。我也尝试使用flattenpackagehierarchy,但没有效果。

帮帮我,如何把我所有的类放在一个包裹里?

已解决:添加这些行后它完成了工作

-useuniqueclassmembernames
-keeppackagenames doNotKeepAThing

这是我的完整脚本

-optimizationpasses 30
-mergeinterfacesaggressively
-dontpreverify
-optimizations !code/simplification/arithmetic

-repackageclasses 'com.example'
-allowaccessmodification
-useuniqueclassmembernames
-keeppackagenames doNotKeepAThing

-keep class !com.example.**{ *; }
-keep public class com.sdk.example{
    *;
}
-keep public class com.sdk.IExampleCallback{
    *;
}
-keepclasseswithmembernames public class com.sdk.ui.activity.ExampleActivity{
    public <methods>;
    protected <methods>;
}
-keepclasseswithmembernames public class com.example.sdk.ExampleReciever{
    public <methods>;
}

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}