Amazon java.lang.VerifyError Android

Я пытался отправить 2 отдельных приложения в магазин приложений Amazon, но они продолжают отклоняться. Вот трассировка стека для первого:

11-05 11:14:36.488 E/AndroidRuntime(28128): FATAL EXCEPTION: AsyncTask #1
11-05 11:14:36.488 E/AndroidRuntime(28128): java.lang.RuntimeException: An error occured while executing doInBackground()
11-05 11:14:36.488 E/AndroidRuntime(28128): at android.os.AsyncTask$3.done(AsyncTask.java:200)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.lang.Thread.run(Thread.java:1096)
11-05 11:14:36.488 E/AndroidRuntime(28128): Caused by: java.lang.VerifyError: com.companionfree.WLThemeViewer.AmazonClientManager
11-05 11:14:36.488 E/AndroidRuntime(28128): at com.companionfree.WLThemeViewer.UpdateDBs.doInBackground(UpdateDBs.java)
11-05 11:14:36.488 E/AndroidRuntime(28128): at com.companionfree.WLThemeViewer.UpdateDBs.doInBackground(UpdateDBs.java)
11-05 11:14:36.488 E/AndroidRuntime(28128): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-05 11:14:36.488 E/AndroidRuntime(28128): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-05 11:14:36.488 E/AndroidRuntime(28128): ... 4 more

И соответствующий логарифм для второго

10-12 15:41:48.929 D/dalvikvm( 2451): GC_FOR_MALLOC freed 8099 objects / 524416 bytes in 34ms
10-12 15:41:49.327 I/RPC     ( 1563): rx thread timeout (1 clients):
10-12 15:41:49.828 I/RPC     ( 1563): rx thread timeout (1 clients):
10-12 15:41:50.089 I/ActivityManager( 1563): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.companionfree.pushup/.MainScreen }
10-12 15:41:50.099 D/SurfaceFlinger( 1563): Layer::setBuffers(this=0xeafa50), pid=1563, w=1, h=1
10-12 15:41:50.099 D/SurfaceFlinger( 1563): Layer::setBuffers(this=0xeafa50), pid=1563, w=1, h=1
10-12 15:41:50.139 D/SurfaceFlinger( 1563): Layer::requestBuffer(this=0xeafa50), index=0, pid=1563, w=480, h=800 success
10-12 15:41:50.189 I/ActivityManager( 1563): Start proc com.companionfree.pushup for activity com.companionfree.pushup/.MainScreen: pid=2644 uid=10129 gids={1015, 3003}
10-12 15:41:50.319 I/RPC     ( 1563): rx thread timeout (1 clients):
10-12 15:41:50.359 W/dalvikvm( 2644): VFY: Lcom/companionfree/pushup/WorkoutDbAdapter; is not instance of Landroid/app/Activity;
10-12 15:41:50.369 W/dalvikvm( 2644): VFY: bad arg 0 (into Landroid/app/Activity;)
10-12 15:41:50.369 W/dalvikvm( 2644): VFY:  rejecting call to Lcom/amazon/android/Kiwi;.onActivityResult (Landroid/app/Activity;IILandroid/content/Intent;)Z
10-12 15:41:50.369 W/dalvikvm( 2644): VFY:  rejecting opcode 0x71 at 0x0000
10-12 15:41:50.369 W/dalvikvm( 2644): VFY:  rejected Lcom/companionfree/pushup/WorkoutDbAdapter;.onActivityResult (IILandroid/content/Intent;)V
10-12 15:41:50.369 W/dalvikvm( 2644): Verifier rejected class Lcom/companionfree/pushup/WorkoutDbAdapter;
10-12 15:41:50.369 D/AndroidRuntime( 2644): Shutting down VM
10-12 15:41:50.369 W/dalvikvm( 2644): threadid=1: thread exiting with uncaught exception (group=0x40025a70)
10-12 15:41:50.369 E/AndroidRuntime( 2644): FATAL EXCEPTION: main
10-12 15:41:50.369 E/AndroidRuntime( 2644): java.lang.VerifyError: com.companionfree.pushup.WorkoutDbAdapter
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at com.companionfree.pushup.MainScreen.onCreateMainScreen(MainScreen.java)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at com.companionfree.pushup.MainScreen.onCreate(MainScreen.java)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2802)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.ActivityThread.access$2300(ActivityThread.java:136)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.os.Looper.loop(Looper.java:143)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at android.app.ActivityThread.main(ActivityThread.java:5073)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at java.lang.reflect.Method.invoke(Method.java:521)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10-12 15:41:50.369 E/AndroidRuntime( 2644):     at dalvik.system.NativeStart.main(Native Method)
10-12 15:41:50.379 W/ActivityManager( 1563):   Force finishing activity com.companionfree.pushup/.MainScreen
10-12 15:41:50.399 D/SurfaceFlinger( 1563): Layer::setBuffers(this=0xeff6b8), pid=1563, w=1, h=1
10-12 15:41:50.399 D/SurfaceFlinger( 1563): Layer::setBuffers(this=0xeff6b8), pid=1563, w=1, h=1
10-12 15:41:50.419 D/SurfaceFlinger( 1563): Layer::requestBuffer(this=0xeff6b8), index=0, pid=1563, w=480, h=337 success
10-12 15:41:50.469 D/dalvikvm( 2451): GC_FOR_MALLOC freed 7889 objects / 521072 bytes in 105ms
10-12 15:41:50.819 I/RPC     ( 1563): rx thread timeout (1 clients):

Я вижу одну и ту же ошибку проверки на обоих, но я не могу понять это. Единственная общая библиотека, используемая между двумя приложениями, — это FlurryAgent.jar для аналитики.

Для верхнего приложения, которое у меня есть. Для нижнего приложения, которое у меня есть в манифестах. Единственная информация, которую мне удалось узнать, касается библиотек (GSON) и необходимости использования dx, но я использую Eclipse, так что это не помогает.

Чтобы усложнить это, ошибка НЕ ​​возникает на Android Market. Тем не менее, тестировщики в Amazon говорят, что FC 5/5 раз на каждом из их устройств (я пробовал использовать эмулятор для их тестовых устройств, и они работали нормально). Я знаю, что они используют код-оболочку вокруг моего приложения, и я думаю, что это должно каким-то образом мешать.

У кого-нибудь есть опыт в этом?


person easycheese    schedule 12.11.2011    source источник


Ответы (4)


У меня была похожая проблема - я решил ее, удалив класс активности из AndroidManifest.xml.

Amazon внедряет собственный код в события жизненного цикла действий ваших приложений. Зная это и глядя на предоставленный вами журнал:

10-12 15:41:50.359 W/dalvikvm( 2644): VFY: Lcom/companionfree/pushup/WorkoutDbAdapter; is not instance of Landroid/app/Activity;

Похоже, что код Amazon пытался инструментировать класс (WorkoutDbAdapter), который НЕ является действием (не расширяет действие), и в конечном итоге был отклонен верификатором JVM.

С моим приложением это произошло, поскольку класс был указан в списке Activity на AndroidManifest.xml. Удаление этого списка из AndroidManifest.xml решило проблему, и приложение было допущено к продаже.

Sarp написал, что переименование пакета вашего класса решило проблему, возможно, сделав это, вы сделали свой список в AndroidManifest.xml более неактуальным. Тем самым обходя проблему.

person Gili Nachum    schedule 10.03.2012

Я бы сказал, что это проблема Amazon. По-видимому, они внедряют некоторый код DRM в ваш apk: внедрение кода в APK

Другие люди видят похожие ошибки: проблема с приложением Android (Amazon)

person Peter Knego    schedule 12.11.2011
comment
Да, я нашел их. Думаю, я просто свяжусь с Amazon и посмотрю, что они скажут. Это действительно расстраивает. Ужасный опыт работы с их магазином приложений. - person easycheese; 12.11.2011

В моем случае класс, вызвавший ошибку VerifyError, находился в пакете с именем util. Вероятно, он конфликтовал с внедренным пакетом Amazon, потому что переименование его в utils решило проблему.

Поскольку наше приложение использовало Facebook SDK, ему была предоставлена ​​опция "Нет, я подпишу свой двоичный файл" при загрузке нового двоичного файла. Когда вы загружаете неподписанный APK таким образом, Amazon позволит вам загрузить обработанный двоичный файл (включая внедренный код) в качестве шага 2, чтобы вы могли его подписать. Я смог загрузить копию моего APK, которая вылетает, и протестировать свои изменения, не проходя процесс утверждения таким образом.

person Sarp Centel    schedule 27.02.2012
comment
Как вы собираетесь это делать? - person easycheese; 02.06.2012

Я только что решил свою проблему и может помочь вам

Я просто обновляю AS до 2.0 и ADT, и, наконец, проблема с проверкой выходит, будьте осторожны с конструктором, например:

class abc {
  abc(int x) {
    ....
  }
  abc(byte x) {
    ....
  }
}
person Will    schedule 04.12.2015