2015-10-15 9 views
10

私はSDKを開発しています。私の環境にはSDKライブラリとそれを使用するテストプロジェクトがあります。Android Proguardを使用してすべてのクラスを1つのパッケージに配置する方法

ライブラリのユーザーからライブラリのコードを保護したいと思っていますが、私はそれを難読化する必要がありますが、それだけです。

-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 

クラスは難読化されますが、そのパッケージは変更されません。

は、だから私のライブラリモジュールでのAndroid Studioで、proguard-rules.proファイルに私は次のスクリプトを追加しました。私はEric Lafortune(Proguardの著者)にallowaccessmodificationを追加する提案を残しましたが、それは助けになりませんでした。私もflattenpackagehierarchyを試してみましたが、何の効果もありませんでした。

私のクラスをすべて1つのパッケージに入れる方法を教えてください。

答えて

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(...); 
} 
関連する問題