2012-09-10 71 views
1

我期待在android apklib文件中混淆非公開方法等,以便我可以與其他人分發apklib文件,而不會妥協共享我的所有源代碼,因爲apklib包含源代碼。與運行Proguard使用Android Maven插件進行混淆的困難時間apklib

我採取的方法是通過使proguard.cfg在pom.xml中混淆庫中的項目非公開方式

這裏是我的proguard.cfg看起來像

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

這裏是我上的Maven收到錯誤安裝

[INFO] --- Android的Maven的插件:3.3.2:產生來源 (默認生成來源)@ libraryprojects-LIB1 --- [信息] ANDROID-904-002:找到aidl文件:計數= 0 [INFO] ANDROID-904-002: Found找到aidl文件:Count = 0 [INFO] C:\ GSDevelopment \ tools \ android-sdk \ platform-tools \ aapt.exe [package, -m,-J,C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ generated-sources \ r, -M,C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ AndroidManifest.xml, -S,C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ res, - 自動添加疊加,-A,C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ assets, -I,C:\ GSDevelopment \ tools \ android-sdk \ platforms \ android-14 \ android.jar] [INFO] [INFO] --- maven-resources-plugin: 2.6:資源 (默認資源)@ libraryprojects-lib1 --- [INFO]使用'UTF-8' 編碼來複制已過濾的資源。 [信息]複製1資源[INFO] 跳過不存在的資源目錄 C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ generated-sources \ extracted-dependencies \ src \ main \ resources [INFO] [ INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile)@ libraryprojects-lib1 --- [INFO]編譯2源文件 文件到 C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ classes [INFO] [INFO] --- android-maven-plugin:3.3.2:proguard (default-proguard)@ libraryprojects-lib1 --- [INFO] C:\ GSDevelopment \ tools \ java \ jdk1.6.0_33 \ jre \ bin \ java [-Xmx512M,-jar, C:\ GSDevelopment \ tools \ android-sdk \ tools \ proguard \ lib \ proguard.jar, @ proguard.cfg,-injars, 'C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ classes', -libraryjars,'C:\ GSDevelopment \ tools \ java \ jdk1.6.0_33 \ jre \ lib \ rt.jar', -libraryjars,'C:\ GSDevelopment \ tools \ java \ jdk1.6.0_33 \ jre \ lib \ jsse.jar', -libraryjars,'C:\ GSDevelopment \ tools \ java \ jdk1.6.0_33 \ jre \ lib \ jce.jar', -libraryjars,c:.m2GSD \ repository \ com \ google \ android \ android \ 4.0.1.2 \ android-4.0.1.2.jar(!org/xml/,!org/w3c/,!java/,!javax/),-libraryjars,'c:.m2GSD \ repository \ commons-logging \ commons-logging \ 1.1.1 \ commons-logging-1.1。 1.jar', -libraryjars,'c:.m2GSD \ repository \ org \ apache \ httpcomponents \ httpclient \ 4.0.1 \ httpclient- 4.0.1.jar', -libraryjars,'c:.m2GSD \ repository \ org \ apache \ httpcomponents \ httpcore \ 4.0.1 \ httpcore-4.0.1.jar', -libraryjars,'c:.m2GSD \ repository \ commons-codec \ commons-codec \ 1.3 \ commons-codec-1.3.jar', -libraryjars,'c:.m2GSD \ repository \ org \ khronos \ opengl-api \ gl1.1-android-2.1_r1 \ OpenGL的API-gl1.1-Android的2.1_r1。jar', -libraryjars,'c:.m2GSD \ repository \ xerces \ xmlParserAPIs \ 2.6.2 \ xmlParserAPIs-2.6.2.jar', -libraryjars,'c:.m2GSD \ repository \ xpp3 \ xpp3 \ 1.1。 4c \ xpp3-1.1.4c.jar',-libraryjars,'c:.m2GSD \ repository \ org \ json \ json \ 20080701 \ json-20080701.jar', -outjars,'C:\ GSDevelopment \ expworkspace \ Samples \ LibraryProjects \ libraryprojects-lib1 \ target \ proguard \ dump.txt', -printseeds', -dump,'C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ proguard \ seeds.txt', -printusage,'C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ libraryprojects-lib1 \ target \ proguard \ usage。 txt', -printmapping,'C:\ GSDevelopment \ expworkspace \ Samples \ libraryprojects \ l文庫項目-lib1 \ target \ proguard \ mapping.txt'] [INFO]注意:有185個重複的類定義。 [INFO] java.io.IOException:輸出jar爲空。您是否指定了 正確的'-keep'選項? [INFO] at proguard.shrink.Shrinker.execute(Shrinker.java:159)[INFO] at proguard.ProGuard.shrink(ProGuard.java:275)[INFO] at proguard.ProGuard.execute(ProGuard.java :101)[INFO]在 proguard.ProGuard.main(ProGuard.java:492)

我有兩個私有方法兩個Java文件。任何人都可以指出我可能會出錯嗎?提前致謝。

回答

2

不知道,如果你仍然需要一個答案,但無論如何,我會放棄它,因爲我碰到了類似的問題,偶然發現了你的問題......

關鍵的一點是,引用Proguard的手冊: 「爲了確定哪些代碼必須被保留以及哪些代碼可以被丟棄或混淆,您必須指定一個或多個代碼入口點,這些入口點通常是具有主要方法,小程序,midlets,活動等的類「。

因此,它看起來像你沒有任何公共條目到你的代碼。必須有公開入口,否則如何使用您的庫或OS如何(如Android)調用您的代碼。

您需要確定入庫點是什麼,然後需要確保正確使用「-keep」命令。例如,從圖書館的Proguard示例,這是他們如何保持公共類:

-keep public class * { 
    public protected *; 
}