2015-10-15 27 views
10

我正在開發SDK,我的環境中有SDK庫和一個使用它的測試項目。Android如何使用Proguard將我所有的課程放在一個包中

我想保護我的圖書館代碼免受我的圖書館用戶的影響,因爲我需要對其進行混淆,但僅限於此。

所以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,但它沒有效果。

幫幫我,如何把我所有的課程放在一個包裏?

回答

7

解決它:添加這些行後,它做的工作

-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(...); 
} 
相關問題