天天看點

關于使用Eclipse打包簽名後APP出現不能正常運作

最近,忙完公司的一個版本。打包簽名過後,發現App不能夠正常運作使用,在網上查找了許多方法無果。

先貼上Log:

03-02 18:54:11.460: E/TestinAgent(3754): ****************************************
03-02 18:54:12.285: E/AndroidRuntime(3754): FATAL EXCEPTION: main
03-02 18:54:12.285: E/AndroidRuntime(3754): java.lang.NoSuchFieldError: PUBLIC_ONLY
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at java.lang.Class.getDeclaredAnnotation(Native Method)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at java.lang.Class.getAnnotation(Class.java:243)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.<clinit>(VisibilityChecker.java:178)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at org.codehaus.jackson.map.ObjectMapper.<clinit>(ObjectMapper.java:196)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.app.util.JacksonParser.readValue(JacksonParser.java:22)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.app.util.ArticleCollection.onResponse(ArticleCollection.java:60)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.app.util.ArticleCollection.onResponse(ArticleCollection.java:1)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at android.os.Handler.handleCallback(Handler.java:730)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at android.os.Looper.loop(Looper.java:137)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at android.app.ActivityThread.main(ActivityThread.java:5493)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at java.lang.reflect.Method.invokeNative(Native Method)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at java.lang.reflect.Method.invoke(Method.java:525)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
03-02 18:54:12.285: E/AndroidRuntime(3754): 	at dalvik.system.NativeStart.main(Native Method)
           

可以看到的是,出現了NoSuchFieldError錯誤。

百思不得其解,後來終于找到了一個靠譜的說法:

是因為我在代碼中解析JSON資料的時候,使用Jackson将JSON資料變成了JavaBean對象,導緻代碼在打包簽名、混淆代碼後,找不到原來對象的屬性了。

故報錯。

解決方法:

在proguard-project.txt中,加入不需要混淆的JavaBean對象和對Jackson的不需要混淆代碼的語句

-libraryjars libs/jackson-core-asl-1.9.7.jar

-libraryjars libs/jackson-mapper-asl-1.9.7.jar

-keep public class org.codehaus.**{*;}

-keepclassmembers public class org.codehaus.**{*;}

-dontwarn org.codehaus.jackson.**

-keep class org.codehaus.**

-keepnames class org.codehaus.jackson.** { *; }

重新打包簽名,問題解決。

參考資料:http://stackoverflow.com/questions/25284562/proguard-aws-s3-issue

繼續閱讀