I am getting ArrayIndexOutOfBoundException while obfuscating android app. here is the stack trace:
[2013-03-26 12:18:28 - PGInAppAAM] Proguard returned with error code 1. See console
[2013-03-26 12:18:28 - PGInAppAAM] java.io.IOException: Can't read [/Users/ken/Documents/workspace/PGInAppAAM/libs/BillingClient_v2.0.jar] (Can't process class [com/quixotic/aambilling/internal/Base64.class] (65280))
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.InputReader.readInput(InputReader.java:230)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.InputReader.readInput(InputReader.java:200)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.InputReader.readInput(InputReader.java:178)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.InputReader.execute(InputReader.java:78)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.ProGuard.readInput(ProGuard.java:197)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.ProGuard.execute(ProGuard.java:79)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.ProGuard.main(ProGuard.java:484)
[2013-03-26 12:18:28 - PGInAppAAM] Caused by: java.io.IOException: Can't process class [com/quixotic/aambilling/internal/Base64.class] (65280)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.ClassReader.read(ClassReader.java:112)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.JarReader.read(JarReader.java:65)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.InputReader.readInput(InputReader.java:226)
[2013-03-26 12:18:28 - PGInAppAAM] ... 6 more
[2013-03-26 12:18:28 - PGInAppAAM] Caused by: java.lang.ArrayIndexOutOfBoundsException: 65280
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.classfile.ProgramClass.getString(ProgramClass.java:116)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.classfile.io.ProgramClassReader.createAttribute(ProgramClassReader.java:828)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:199)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2013-03-26 12:18:28 - PGInAppAAM] at proguard.io.ClassReader.read(ClassReader.java:91)
[2013-03-26 12:18:28 - PGInAppAAM] ... 11 more
Here is the proguard.cfg :
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/,!class/merging/
-keepattributes SourceFile,LineNumberTable
-keepattributes Signature,Annotation
-dontwarn org.xmlpull.v1.**
-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 *;
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class *.R$ {
public static <fields>;
}
-keepclasseswithmembernames class * {
native <methods>;
}
-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*(...);
}
-keep class org.acra.ACRA {
*;
}
-keep class org.acra.ReportingInteractionMode {
*;
}
-keepclassmembers class org.acra.ReportField {
public static <fields>;
}
-keep public class org.acra.ErrorReporter{
public void addCustomData(java.lang.String,java.lang.String);
}
-keep public class org.acra.ErrorReporter{
public org.acra.ErrorReporter$ReportsSenderWorker handleSilentException(java.lang.Throwable);
}
Thanks for the report. Is it possible that the mentioned class file is corrupt? Can you view it with javap:
If that works fine, is it possible to attach or mail me the class file com/quixotic/aambilling/internal/Base64.class or the entire jar?
jar is attached
Last edit: Muhammad Saqib 2013-03-26
thanks for your help. I think you are right. I am getting the following error with javap
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readFully(DataInputStream.java:152)
at sun.tools.javap.AttrData.read(AttrData.java:36)
at sun.tools.javap.MethodData.read(MethodData.java:89)
at sun.tools.javap.ClassData.readMethods(ClassData.java:206)
at sun.tools.javap.ClassData.read(ClassData.java:99)
at sun.tools.javap.ClassData.<init>(ClassData.java:52)
at sun.tools.javap.JavapPrinter.<init>(JavapPrinter.java:30)
at sun.tools.javap.Main.displayResults(Main.java:201)
at sun.tools.javap.Main.perform(Main.java:61)
at sun.tools.javap.Main.entry(Main.java:49)
at sun.tools.javap.Main.main(Main.java:34)
but it does decompile successfully with JD-GUI
Last edit: Muhammad Saqib 2013-03-26
The class file is corrupt; there's not much I can do about it. You should check with its creators if there is a correct version.