2013-06-11 3 views
7

Ich versuche meine Anwendung mit Proguard 4.9 zum ersten Mal zu exportieren. Aber während des Exports bekomme ich seltsame Fehler in der Konsole. Hier ist sie -Proguard Parse Ausnahmefehler. Wie man es löst

[2013-06-11 14:59:42 - Project1] Proguard returned with error code 1. See console 
[2013-06-11 14:59:42 - Project1] proguard.ParseException: Expecting type and name instead of just '***' before '(' in line 193 of file 'D:\Project Works\Android\Project1\bin\proguard.txt', 
[2013-06-11 14:59:42 - Project1] included from argument number 4 
[2013-06-11 14:59:42 - Project1] at proguard.ConfigurationParser.parseMemberSpecificationArguments(ConfigurationParser.java:889) 
[2013-06-11 14:59:42 - Project1] at proguard.ConfigurationParser.parseClassSpecificationArguments(ConfigurationParser.java:729) 
[2013-06-11 14:59:42 - Project1] at proguard.ConfigurationParser.parseKeepClassSpecificationArguments(ConfigurationParser.java:516) 
[2013-06-11 14:59:42 - Project1] at proguard.ConfigurationParser.parse(ConfigurationParser.java:165) 
[2013-06-11 14:59:42 - Project1] at proguard.ProGuard.main(ProGuard.java:476) 

Hier ist der bin \ proguard.txt Datei der Linie 192 & 193, wo der Fehler

# onClick res/layout/tmenu.xml #generated:77 
-keepclassmembers class * { *** (...); } 

In project.properties I

target=android-7 
proguard.config=proguard.cfg 
bin mit kommt

Und ich bin Android SDK und Eclipse Plugins sind auf den neuesten Stand gebracht. Irgendeine Idee, wie man es repariert ???

EDIT Hier ist die proguard.cfg in meinem Projekt

-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 

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

Antwort

3

Fehler bei ist

-keepclassmembers class * { *** (...); } 

Ersetzen mit

-keepclassmembers class mypackage.** { *; } 

Und wenn Sie diese Konfiguration für Setter/Getter eingestellt haben, müssen Sie als

-keep class mybeans.** { 
    void set*(***); 
    void set*(int, ***); 

    boolean is*(); 
    boolean is*(int); 

    *** get*(); 
    *** get*(int); 
} 

ändern, wo: Die ‚***‘ Wildcard passt zu jedem Typ (primitiv oder nicht-primitive, Array oder nicht-Array). Die Methoden mit den Argumenten 'int' stimmen mit Eigenschaften überein, bei denen es sich um Listen handelt.

+0

Es ist in bin Ordner, wie zu ändern? –

+0

Ich sage über den tatsächlichen Dateiwechsel. Nicht in der Datei, die in bin ist. –

+0

Sie meinen proguard.cfg? –

16

In meinem Fall war ich erhalte diese Fehler wegen eines leeren onClick-Attributs in einer Layout-Datei. So entfernte ich onClick="", und der Fehler war verschwunden

+3

WTF ... Wie hast du das überhaupt gefunden? Vielen Dank! – Vinnie

+1

Genau das. Die Ausnahme ist so verständlich. – kientux

+0

Tipp: Überprüfen Sie die erzeugte Protokolldatei, es gibt Ihnen eine Zeilennummer, die Ihnen sagen wird, welche XML-Datei dieses Problem hat. – sham

7

In meinem Fall war der Fehler auf ein leeres onClick-Attribut auf einer Schaltfläche in einer Layoutdatei. So entfernte ich onClick="", und der Fehler war weg.

auf die die richtige Layout-Datei zu finden, dass auf die entsprechende Datei dieser Fehler gehen verursacht und finden, die Layout-Datei dieses Problem verursacht. Die Datei ist zu Recht auf der oder einer Zeile oberhalb der Zeile in der Fehlermeldung angezeigt wie

In line 193 of file 'D:\Project Works\Android\Project1\bin\proguard.txt' or in line 114 of file 'C:..app\build\intermediates\proguard-rules\debug\aapt_rules.txt' . 

durch die Layout-Datei gehen und die onClick="" in jeder Ansicht finden. Entfernen Sie es.
Hoffentlich wird das funktionieren.

+0

sogar ich habe dieses Problem konfrontiert. –

+0

Yeap .... war dort ... das getan! – linakis

+0

Oh Gott! Das hat es tatsächlich gelöst. – Uday