2013-10-03 6 views
8

Ich habe Proguard Tool auf meiner App zu verschleiern. Ich weiß, dass Proguard bei der Verschleierung schrumpft und die App so optimiert, wie sie es für richtig hält. Nach dem Verschleiern wird die App also korrekt geöffnet und wenn ich mich anmelde, stürzt sie ab. Das Beste, was ich bekommen konnte, war dieses Protokoll, da ich das Gerät angeschlossen hatte.Android App stürzt nach Progress-Verschleierung

10-03 11:12:47.384: E/AndroidRuntime(15058): FATAL EXCEPTION: AsyncTask #1 
10-03 11:12:47.384: E/AndroidRuntime(15058): java.lang.RuntimeException: An error  occured while executing doInBackground() 
10-03 11:12:47.384: E/AndroidRuntime(15058): at  android.os.AsyncTask$3.done(AsyncTask.java:299) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at  java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.lang.Thread.run(Thread.java:856) 
10-03 11:12:47.384: E/AndroidRuntime(15058): Caused by: java.lang.ExceptionInInitializerError 
10-03 11:12:47.384: E/AndroidRuntime(15058): at com.winwin.a.d.c.doInBackground(Unknown Source) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at com.winwin.a.d.c.doInBackground(Unknown Source) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
10-03 11:12:47.384: E/AndroidRuntime(15058): ... 4 more 
10-03 11:12:47.384: E/AndroidRuntime(15058): Caused by: java.lang.ExceptionInInitializerError 
10-03 11:12:47.384: E/AndroidRuntime(15058): at com.winwin.a.c.d.<clinit>(Unknown Source) 
10-03 11:12:47.384: E/AndroidRuntime(15058): ... 8 more 
10-03 11:12:47.384: E/AndroidRuntime(15058): Caused by: java.lang.ExceptionInInitializerError 
10-03 11:12:47.384: E/AndroidRuntime(15058): at com.b.a.c.ad.<clinit>(Unknown Source) 
10-03 11:12:47.384: E/AndroidRuntime(15058): ... 9 more 
10-03 11:12:47.384: E/AndroidRuntime(15058): Caused by: java.lang.NoSuchFieldError: ANY 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.lang.Class.getDeclaredAnnotation(Native Method) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at java.lang.Class.getAnnotation(Class.java:260) 
10-03 11:12:47.384: E/AndroidRuntime(15058): at com.b.a.c.f.ag.<clinit>(Unknown Source) 

Ich hatte gedacht, dass dies sein würde, weil proguard einige Klassen oder Methoden entfernt hatte es nicht für nötig gehalten und damit den Absturz verursachen. Was ich tat, war ich lief proguard diesmal wieder mit

-dontobfuscate 

so wollte ich das Werkzeug schrumpfen und zu optimieren, aber nicht verschleiern, so konnte ich dann einen richtigen Lese bekommen, was fehlte. Jedoch, als ich die APK mit dem Werkzeug dieses Mal herum erzeugte, lief es tadellos. Das Problem ist, dass es nicht verschleiert wurde.

Also ich weiß nicht, was ich jetzt tun soll.

Hat jemand irgendwelche Ideen?

* EDIT *

Hier ist meine Config-Datei

To enable ProGuard in your project, edit project.properties 
to define the proguard.config property as described in that file. 

Add project specific ProGuard rules here. 
By default, the flags in this file are appended to flags specified 
in ${sdk.dir}/tools/proguard/proguard-android.txt 
You can edit the include path and order by changing the ProGuard 
include property in project.properties. 

For more details, see 
http://developer.android.com/guide/developing/tools/proguard.html 

Add any project specific keep options here: 

-libraryjars libs/crashlytics.jar 

-keep class com.facebook.** { 
*; 
} 


-keepattributes Signature 

-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 
-keep public class com.android.vending.licensing.ILicensingService 

keep all classes that might be used in XML layouts 
-keep public class * extends android.view.View 
-keep public class * extends android.app.Fragment 
-keep public class * extends android.support.v4.Fragment 

-keepattributes *Annotation*, EnclosingMethod 

-keep class com.winwin.** { *; } 
-keepnames class org.codehaus.jackson.** { *; } 


-dontoptimize 
-dontshrink 

keep all public and protected methods that could be used by java reflection 
-keepclassmembernames class * { 
public protected <methods>; 
} 

-keepclasseswithmembernames class * { 
native <methods>; 
} 

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

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


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

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

-dontwarn **CompatHoneycomb 
-dontwarn org.htmlcleaner.* 

-dontwarn com.fasterxml.jackson.databind.ext.** 

If your project uses WebView with JS, uncomment the following 
and specify the fully qualified class name to the JavaScript interface 
class: 
-keepclassmembers class fqcn.of.javascript.interface.for.webview { 
public *; 
} 

======================= ===

Hier ist mein Projekt-Explorer-Fenster


android-support-v7-appcompat/ ConverserSdk/ facebook/ google-Play-services_lib/ Bibliothek/ Haupt/ MainWs/ SlidingMenu


So ist mein Haupt abhängig von jedem die anderen Pakete.

+0

Haben Sie Getter Setter-Methoden in Ihrem doInBackground Methode haben? – GrIsHu

+0

@GrIsHu Ich habe keine Getter oder Setter-Methoden innerhalb der doInBackground(), aber es gibt Fehlerprüfung innerhalb dieser Methode, wenn es einen Fehler gibt, rufe ich Methoden, die Setter-Methoden haben .. könnte dies ein Faktor sein? –

+0

Sie haben Code (rate: einige JSON-Objekt-Mapper-Bibliothek), die auf Reflektion zugreifen, um auf Anmerkungen zuzugreifen, und der Obfuscator bricht, wenn der Reflektionszugriff verwendet wird. Sie müssen '-keepattributes * Annotation *, EncosingMethod -keep class reflection.using.package.name. ** {*; } ' – laalto

Antwort

4

Sie müssen einige Klassen vor dem Verschleiern bewahren. Eine typische Proguard-Konfigurationsdatei für ein Android-Projekt ist wie folgt. Dieser Link sollte nützlich sein: Proguard for Android

-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 
-keep public class com.android.vending.licensing.ILicensingService 
-keep public class * implements java.io.Serializable 
-keep public class * extends android.support.v4.app.Fragment 
-keep public class * extends android.support.v4.app.ListFragment 



-keep public class org.spongycastle.** { 
    <fields>; 
    <methods>; 
} 

-keep public class org.apache.** { 
    <fields>; 
    <methods>; 
} 

-ignorewarnings 

-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 *; 
} 

-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 
+0

Danke für Ihre Antwort, ich war schon dort und folgte dieser Seite. –

0

Schnellarbeitslösung

-keep class com.fasterxml.jackson.annotation.** {*;} 
-keep class com.fasterxml.jackson.core.** {*;} 
-keep class com.fasterxml.jackson.databind.** {*;}