Android, как разместить все мои классы в одном пакете с помощью Proguard

Я разрабатываю SDK, моя среда получила SDK-библиотеку и проект тестирования, которые ее используют.

Я хочу защитить свой библиотечный код от пользователей моей библиотеки и там, где мне нужно запутать его, но просто он.

Итак, в Android Studio в моей библиотеке Module в файле proguard-rules.pro я добавил следующий script:

-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

Классы становятся запутанными, но их пакет не изменяется. Я подвел Эрика Лафортунэна (автора Proguard) предложение добавить allowaccessmodification, но это не помогло. Я также пытаюсь использовать flattenpackagehierarchy, но это не повлияло.

Помогите мне, как разместить все мои классы в одном пакете?

Ответ 1

Решил: добавив эти строки, он выполнил задание

-useuniqueclassmembernames
-keeppackagenames doNotKeepAThing

Это мой полный script

-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(...);
}