2013-10-03 9 views
8

Ho eseguito lo strumento proguard sulla mia app per offuscare. So che quando si verifica l'offuscamento, proguard riduce le dimensioni e ottimizza l'app come meglio crede. Quindi, dopo aver offuscato l'applicazione si apre correttamente e poi quando provo ad accedere si blocca. Il meglio che ho potuto ottenere è stato questo registro perché avevo collegato il dispositivo.L'app per Android si blocca dopo l'offuscamento proguard

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) 

Avevo pensato che questo sarebbe causa Proguard aveva rimosso alcune classi o metodi che ritenute inutili, e quindi causare l'incidente. Quello che ho fatto è stato mi sono imbattuto Proguard anche questa volta compreso

-dontobfuscate 

così ho voluto lo strumento per ridurre e ottimizzare ma non offuscare così ho potuto quindi ottenere una lettura corretta di ciò che mancava. Tuttavia, quando ho generato l'apk con lo strumento questa volta è andato alla perfezione. Il problema è che non è stato offuscato.

Quindi non so cosa fare ora.

Qualcuno ha qualche idea?

* EDIT *

Ecco il mio file di configurazione

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

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

Ecco il mio progetto riquadro Esplora


Android-support-v7-appcompat/ ConverserSdk/ facebook/ google-play-services_lib/ biblioteca/ principali/ MainWs/ SlidingMenu


Quindi il mio principale dipende da ciascuno di gli altri pacchetti.

+0

Avete metodi setter getter nel metodo doInBackground? – GrIsHu

+0

@GrIsHu Non ho metodi getter o setter all'interno di doInBackground(), ma c'è un controllo degli errori in questo metodo, se c'è un errore, chiamo metodi che hanno metodi setter ... potrebbe essere un fattore? –

+0

Hai del codice (suppongo: qualche libreria JSON object mapper) che si basa sulla riflessione per accedere alle annotazioni e alle interruzioni dell'offuscatore quando si usa l'accesso alla riflessione. È necessario aggiungere '-keepattributes * Annotation *, EnclosingMethod -keep class reflection.using.package.name. ** {*; } ' – laalto

risposta

4

È necessario salvare alcune classi dall'essere offuscata. Un tipico file di configurazione proguard per un progetto Android è il seguente. Questo collegamento dovrebbe essere utile: 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

Grazie per la tua risposta, ci sono già stato e ho seguito quel sito. –

0

soluzione di lavoro rapido

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