Autore Topic: Problema con ProGuard  (Letto 894 volte)

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Problema con ProGuard
« il: 18 Marzo 2015, 15:04:38 CET »
0
Salve

stavo cercando di utilizzare ProGuard, e nonostante mi genere l'APK se provo ad installarla all'avvio ho un'errore e mi si chiude.

nella app ho queste dipendenze:

Codice (XML): [Seleziona]
dependencies {
    //Core
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/khandroid-httpclient-4.2.3.jar')
    compile files('libs/YouTubeAndroidPlayerApi.jar')
    compile files('libs/mpandroidchartlibrary-1-7-4.jar')
    compile project(':library-viewpagerindicator')
    compile(name: 'com.doomonafireball.betterpickers', ext: 'aar') {
        exclude module: 'support-v4'
    }
    compile 'com.github.gabrielemariotti.cards:cardslib-core:2.0.1'
    compile 'com.google.android.gms:play-services:6.5.87'
    compile 'com.github.gabrielemariotti.cards:cardslib-recyclerview:2.0.1'
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.android.support:recyclerview-v7:21.0.3'
    compile 'de.hdodenhof:circleimageview:1.2.1'
    compile 'com.mcxiaoke.volley:library:1.0.+'
    compile 'com.google.code.gson:gson:2.3.+'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.afollestad:material-dialogs:0.6.3.5'
    compile 'com.makeramen:roundedimageview:2.0.0'
    compile 'joda-time:joda-time:2.1'
}


e nel file di proguard ho tentato di mettere così:

Codice (XML): [Seleziona]
-injars      libs
-outjars     bin/classes-processed.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-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 class android.support.v4.** { *; }
-keep class com.android.volley.**{*;}
-keep class com.google.gson.** {*;}
-keep class org.json.** {*;}
-keep class java.util.**{*;}
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

-keep class org.joda.convert.** { *; }
-dontwarn org.joda.convert.**

-keep class com.makeramen.roundedimageview.** { *; }
-dontwarn com.makeramen.roundedimageview.**

-keep class com.afollestad.materialdialogs.** {*;}
-keep class com.viewpagerindicator.** {*;}

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-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.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

l'apk di debug pesa 6 MB mentre quella che mi genera Release con pro guard attivo mi dice 4.8..anche questo mi pare strano

Post unito: 18 Marzo 2015, 16:53:31 CET
Se vado a controllare gli errori mi dice questo:


Codice (XML): [Seleziona]
03-18 16:51:46.326  30587-30587/? E/dalvikvm﹕ Could not find class 'android.app.Notification$Action$Builder', referenced from method b.a
03-18 16:51:46.416  30587-30587/? E/dalvikvm﹕ Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method b.a
03-18 16:51:46.556  30587-30587/? E/dalvikvm﹕ Could not find class 'android.app.Notification$Action$Builder', referenced from method b.a
« Ultima modifica: 18 Marzo 2015, 16:53:31 CET da felasandroid, Reason: Merged DoublePost »

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #1 il: 19 Marzo 2015, 10:05:47 CET »
0
è normale che pesi di meno. Proguard ti rimuove anche tutti i metodi non utilizzati.
In alcuni casi non può verificare correttamente quali vengono usati ed in tal caso si usa l'opzione -keep per dirgli espressamente di non toglierli.

Nel tuo caso in particolare ti dice espressamente cosa non trova.

Aggiungi al file di proguard:
Codice: [Seleziona]
-keep class android.app.Notification { *; }
-keep class android.graphics.drawable.RippleDrawable  { *; }

Ciao.

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #2 il: 19 Marzo 2015, 10:21:56 CET »
0
è normale che pesi di meno. Proguard ti rimuove anche tutti i metodi non utilizzati.
In alcuni casi non può verificare correttamente quali vengono usati ed in tal caso si usa l'opzione -keep per dirgli espressamente di non toglierli.

Nel tuo caso in particolare ti dice espressamente cosa non trova.

Aggiungi al file di proguard:
Codice: [Seleziona]
-keep class android.app.Notification { *; }
-keep class android.graphics.drawable.RippleDrawable  { *; }

Ciao.

Grazie mille..

ad esempio ora mi dice

Codice (Java): [Seleziona]
java.lang.NullPointerException
            at it.package.balduzzi.a.a.a(Unknown Source)
            at it.package.balduzzi.a.a.getView(Unknown Source)

quindi devo mettere pure le mie classi che mi dice? però se volevo ofuscarle..

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #3 il: 19 Marzo 2015, 10:27:17 CET »
0
beh, prima di diceva "Could not find class" ora ti dice "java.lang.NullPointerException". Devi vedere da cosa è dovuto.

Deoffusca lo stacktrace e vedi in quale metodo ti dà errore.

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #4 il: 19 Marzo 2015, 15:23:00 CET »
0
beh, prima di diceva "Could not find class" ora ti dice "java.lang.NullPointerException". Devi vedere da cosa è dovuto.

Deoffusca lo stacktrace e vedi in quale metodo ti dà errore.

cioè se non ofusco nulla, ovvero metto false all'attributo minifyEnabled, tutto funziona perfettamente la app non dà errori..
dici ho messo troppe regole? o troppo poche?

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #5 il: 19 Marzo 2015, 15:30:02 CET »
0
Ti ripeto, deoffusca lo stacktrace. La riga di codice dove accade ti dirà qualcosa...

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #6 il: 19 Marzo 2015, 17:22:35 CET »
0
Ti ripeto, deoffusca lo stacktrace. La riga di codice dove accade ti dirà qualcosa...

come faccio a fare quello che dici?

Cioè io mi creo l'apk con proguard attivo, poi la installo sul mio smartphone, e il passo che dici come lo faccio a fare in android studio?

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #7 il: 19 Marzo 2015, 17:58:41 CET »
0
http://developer.android.com/tools/help/proguard.html#decoding

Se si tratta di un nome di un metodo solo, te lo puoi anche cercare a mano nel file mapping.txt

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #8 il: 19 Marzo 2015, 19:18:36 CET »
0
http://developer.android.com/tools/help/proguard.html#decoding

Se si tratta di un nome di un metodo solo, te lo puoi anche cercare a mano nel file mapping.txt

scusa se ti sto tritando i cocomeri ma ad esempio,

mi dà questo errore come detto prima:

Codice (XML): [Seleziona]
java.lang.NullPointerException
            at it.package.balduzzi.a.a.a(Unknown Source)
            at it.package.balduzzi.a.a.getView(Unknown Source)

Quindi nel mapping.txt mi cerco it.package.balduzzi.a.a.getView e però poi? scusa è la prima volta che uso il tutto

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con ProGuard
« Risposta #9 il: 19 Marzo 2015, 19:20:56 CET »
0
Se non riesci a mano usa il tool.

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Problema con ProGuard
« Risposta #10 il: 19 Marzo 2015, 20:00:58 CET »
0
Scusate la digressione calcistica, che peraltro in 3 anni mai mi sono permesso di fare su questo forum, ma al momento sto godendo per lo 0-3 della viola e potrei dare indicazioni non molto precise o corrette..  :D

Suggerisco di provare a preservare il nome del file e la linea così dovresti sapere esattamente dove crasha.

-keepattributes SourceFile, LineNumberTable

Da prendere con le molle eh  :-)