2013-10-03 10 views
8

Mam uruchomione narzędzie proguard na mojej aplikacji do zaciemniania. Wiem, że gdy pojawia się zaciemnienie, program postępuje i optymalizuje aplikację zgodnie z jej przeznaczeniem. Po zaciemnieniu aplikacja otwiera się poprawnie, a kiedy próbuję się zalogować, ulega awarii. Najlepsze, co mogłem uzyskać, to ten dziennik, ponieważ miałem podłączone urządzenie.Aplikacja na Androida ulega zawieszeniu po ukrytym programowaniu

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) 

myślałem, że będzie to z powodu PROGUARD usunął niektórych klas lub metod to uznane za zbędne, a zatem spowodować katastrofę. Co zrobiłem było Pobiegłem ProGuard ponownie tym razem

-dontobfuscate 

więc chciałem narzędzie do optymalizacji i kurczyć, ale nie zaciemniać więc może wtedy uzyskać odpowiednią lekturę, co brakowało. Jednak kiedy wygenerowałem apk przy użyciu narzędzia tym razem wokół niego działało idealnie. Problem polegający na tym, że nie został zaciemniony.

Więc nie wiem co teraz zrobić.

Czy ktoś ma jakieś pomysły?

* EDIT *

Oto mój plik konfiguracyjny

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

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

Oto moja szyba badacz projektu


android-support-V7-AppCompat/ ConverserSdk/ facebook/ google play-services_lib/ library/ Główne/ MainWs/ SlidingMenu


Więc moim głównym zależy od każdego z inne pakiety.

+0

Czy masz getter metod ustawiających w swojej metodzie doInBackground? – GrIsHu

+0

@GrIsHu Nie mam metody getter lub setter w ramach doInBackground() jednak istnieje błąd sprawdzania w ramach tej metody, jeśli występuje błąd, wywołuję metody, które mają metody ustawiacza .. może to być czynnikiem? –

+0

Masz pewien kod (zgadnij: pewna biblioteka programów odwzorowujących obiekty JSON), który opiera się na odbiciu, aby uzyskać dostęp do adnotacji, a obfuscator łamie się, gdy używany jest dostęp do odbicia. Musisz dodać '-keepattributes * Adnotacja *, EnclosingMethod -keep class reflection.using.package.name. ** {*; } ' – laalto

Odpowiedz

4

Musisz ocalić niektóre klasy przed zaciemnianiem. Typowy plik konfiguracyjny proguard dla projektu Android jest jak poniżej. Ten link powinien być przydatny: 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

Dziękuję za odpowiedź, już tam byłem i poszedłem za tą stroną. –

0

Szybkie roztwór roboczy

-keep class com.fasterxml.jackson.annotation.** {*;} 
-keep class com.fasterxml.jackson.core.** {*;} 
-keep class com.fasterxml.jackson.databind.** {*;} 
Powiązane problemy