Menu

#527 URGENT:Optimization conflict with Amazon SDK(IAP)

v4.11
open-later
None
5
2014-08-20
2014-05-20
No

Hi,

The problem with Optimization option and Amazon SDK.
When compile Amazon IAP with proguard,
proguard showing below error if have ANY optimization option.
And also the funny thing is that the Amazon officially request/telling
that 'turn off optimization option' prevent below error. really insane...

So,
would you please check that the problem with the Amazon SDK urgently?
Access : https://developer.amazon.com/public/resources/development-tools/sdk
to get the SDK
and find and compile the sample 'Apps-SDK_20140504\Android\InAppPurchasing\samples\SampleIAPSubscriptionsApp'(this should be enough to check)

and put proguard option as
'\Apps-SDK_20140504\Android\InAppPurchasing\samples\Obfuscation' sample. which is official
and additionally add
'-dontoptimize' as Amazon prefer from
'https://developer.amazon.com/public/apis/earn/in-app-purchasing/docs/code-obfuscation'

I hope that fix this ASAP.
Thank you every time.

P.S:below error occured when use two lines of options as
'-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/,!class/merging/,!class/unboxing/enum
-optimizationpasses 5'

if change this two line to '-dontoptimize',
no more error occured.(must remove ANY optimization flags at once)


Unexpected error while performing partial evaluation:
Class = [com/amazon/inapp/purchasing/KiwiResponseHandler$PurchaseResponseHandlerRunnable]
Method = [run()V]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes) and [java/lang/String] (with 4 known super classes))
java.lang.IllegalArgumentException: Can't find common super class of [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes) and [java/lang/String] (with 4 known super classes)
at proguard.evaluation.value.TypedReferenceValue.generalize(TypedReferenceValue.java:341)
at proguard.evaluation.value.TypedReferenceValue.generalize(TypedReferenceValue.java:201)
at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:298)
at proguard.evaluation.Variables.generalize(Variables.java:136)
at proguard.evaluation.TracedVariables.generalize(TracedVariables.java:118)
at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:682)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:602)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:560)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181)
at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79)
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91)
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71)
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504)
at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
at proguard.classfile.visitor.ClassAccessFilter.visitProgramClass(ClassAccessFilter.java:67)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:124)
at proguard.optimize.Optimizer.execute(Optimizer.java:435)
at proguard.ProGuard.optimize(ProGuard.java:306)
at proguard.ProGuard.execute(ProGuard.java:115)
at proguard.ProGuard.main(ProGuard.java:483)
Proguard returned with error code 1. See console
Unexpected error while performing partial evaluation:
Class = [com/amazon/inapp/purchasing/KiwiResponseHandler$PurchaseResponseHandlerRunnable]
Method = [run()V]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes) and [java/lang/String] (with 4 known super classes))
java.lang.IllegalArgumentException: Can't find common super class of [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes) and [java/lang/String] (with 4 known super classes)
at proguard.evaluation.value.TypedReferenceValue.generalize(TypedReferenceValue.java:341)
at proguard.evaluation.value.TypedReferenceValue.generalize(TypedReferenceValue.java:201)
at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:298)
at proguard.evaluation.Variables.generalize(Variables.java:136)
at proguard.evaluation.TracedVariables.generalize(TracedVariables.java:118)
at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:682)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:602)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:560)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181)
at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79)
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91)
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71)
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504)
at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
at proguard.classfile.visitor.ClassAccessFilter.visitProgramClass(ClassAccessFilter.java:67)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:124)
at proguard.optimize.Optimizer.execute(Optimizer.java:435)
at proguard.ProGuard.optimize(ProGuard.java:306)
at proguard.ProGuard.execute(ProGuard.java:115)
at proguard.ProGuard.main(ProGuard.java:483)

Discussion

  • user091023097709

    Don't forget to add the jar into build path that 'in-app-purchasing-1.0.3.jar'

     
  • user091023097709

    And also consider that once the flag '-dontoptimize' used
    then ignore the option -optimization !xxx/aaaaa....' if possible.

     
  • user091023097709

    the error started occur from '-optimizationpasses 2'
    -optimizationpasses 1 seem that okay so far from my tests.

     

    Last edit: user091023097709 2014-05-20
  • user091023097709

    Use MUST put below flags for safe compiling.

    ---------------------------------------------------------

    -libraryjars xxxxxxxxxxxxxx\Apps-SDK_20140504\Android\DeviceMessaging\lib\amazon-device-messaging-1.0.1.jar
    -dontwarn com.amazon.
    -keep class com.amazon.
    {;}
    -keepattributes
    Annotation*
    -keep public class * extends com.amazon.device.messaging.ADMMessageReceiver
    -keep public class * extends com.amazon.device.messaging.ADMMessageHandlerBase

    -keepclassmembers public class * extends com.amazon.device.messaging.ADMMessageReceiver {
    *;
    }

    -keepclassmembers public class * extends com.amazon.device.messaging.ADMMessageHandlerBase {
    *;
    }

    ---------------------------------------------------------

     

    Last edit: user091023097709 2014-05-20
  • Eric Lafortune

    Eric Lafortune - 2014-06-05

    Amazon's IAP library jar provides the classes

    com.amazon.inapp.purchasing.KiwiPurchaseResponseCommandTask
    

    and

    com.amazon.inapp.purchasing.KiwiBaseCommandTask
    

    but not their super class

    com.amazon.android.framework.task.command.AbstractCommandTask
    

    ProGuard can't analyze such an incomplete class hierarchy. It conservatively stops processing with an exception. You can work around the problem by creating stubs for the missing classes. This requires some effort.

    Note that the Amazon store injects the super class and other missing classes when an app is uploaded, thus making sure everything works at runtime.

     
  • Eric Lafortune

    Eric Lafortune - 2014-06-05
    • status: open --> open-later
    • assigned_to: Eric Lafortune
     
  • Morten Slott Hansen

    I can confirm that -optimizationpasses 1 solves the problem and is a better solution than the proposed one in the docs where they say turn off optimization. This is a really bad idea as most people use this to remove logging statements - which then wont get removed.
    Is there a way to trick proguard to ignore the com.amazon.android.framework.task.command.AbstractCommandTask
    and thus have higher number of passes ?

     

Log in to post a comment.