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

Ily*_*man 15 android proguard android-proguard

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

我想保护我的库代码免受我的库用户的影响,因为我需要对其进行模糊处理,只是它.

所以在我的库Module中的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
Run Code Online (Sandbox Code Playgroud)

这些类被混淆,但它们的包不会改变.我让Eric Lafortune(Proguard的作者)建议添加allowaccessmodification,但它没有帮助.我也尝试使用flattenpackagehierarchy,但它没有效果.

帮助我,如何将我的所有课程放在一个包中?

Ily*_*man 12

解决了它:添加这些线后,它完成了工作

-useuniqueclassmembernames
-keeppackagenames doNotKeepAThing
Run Code Online (Sandbox Code Playgroud)

这是我的完整脚本

-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(...);
}
Run Code Online (Sandbox Code Playgroud)

  • 30 次优化?我觉得5个就够了 (3认同)
  • 来自 proguard 手册的@Inkognito:_如果优化通过后没有发现任何改进,则优化结束_ (2认同)