Мое недавно выпущенное приложение не может быть установлено: Код ошибки: -504

Я только что выпустил свое приложение в Google Play Store, и подписанный apk был успешно опубликован. Однако (и я пробовал это на трех разных телефонах и планшетах) приложение отказывается устанавливаться при загрузке из магазина. После нажатия кнопки «Установить» приложение загрузится, статус изменится на «Установка...», а затем появится следующий диалог:

«Невозможно

Что может быть сделано?

Факты о моем приложении, которые могут помочь в устранении неполадок:

  • Приложение нацелено на API22 с minSDK 17.
  • Я не использую прогард.
  • Приложение использует multidex через библиотеку поддержки multidex.

приложение/build.gradle:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
    jcenter()
}

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "io.givenow.app"
        minSdkVersion 17
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"

        // Enabling multidex support.
        multiDexEnabled true
    }

    signingConfigs {
        debug {
            storeFile file('../debug.keystore')
        }
        release
    }

    productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
            // to pre-dex each module and produce an APK that can be tested on
            // Android Lollipop without time consuming dex merging processes.
            minSdkVersion 17
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 17
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
        }

        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

apply from: 'https://raw.github.com/trikita/gradle-android-signing/master/gradle-android-signing.gradle'


dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.guava:guava:18.0'
    compile 'org.functionaljava:functionaljava:4.4'
    compile 'io.reactivex:rxandroid:1.0.1'
    // Because RxAndroid releases are few and far between, it is recommended you also
    // explicitly depend on RxJava's latest version for bug fixes and new features.
    compile 'io.reactivex:rxjava:1.0.14'

    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:support-v13:23.1.1'
    compile 'com.google.android.gms:play-services-maps:8.3.0'
    compile 'com.google.android.gms:play-services-location:8.3.0'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:cardview-v7:23.1.1'
    compile 'com.android.support:palette-v7:23.1.1'

    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.google.maps.android:android-maps-utils:0.4'
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:0.9.9'
    compile 'com.nhaarman.listviewanimations:library:2.6.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'de.hdodenhof:circleimageview:2.0.0'
    //    compile 'jp.wasabeef:recyclerview-animators:2.0.1'
    compile 'com.bartoszlipinski:viewpropertyobjectanimator:1.1.0'
    //    compile 'com.androidmapsextensions:android-maps-extensions:2.1.0+'

    compile 'com.parse.bolts:bolts-android:1.2.1'
    compile 'com.parse:parse-android:1.10.3'
    compile 'com.parse:parseui-login-android:0.0.1'
    compile 'com.parse:parseui-widget-android:0.0.1'
    // Uncomment if using Facebook Login (optional Maven dependency)
    //    compile 'com.facebook.android:facebook-android-sdk:4.6.0'
    //    compile fileTree(dir: 'libs', include: 'Parse-*.jar')
    //    compile fileTree(dir: 'libs', include: 'ParseCrashReporting-*.jar')
    compile('de.keyboardsurfer.android.widget:crouton:1.8.4@aar') { //maybe drop the @aar later
        // exclusion is not neccessary, but generally a good idea.
        exclude group: 'com.google.android', module: 'support-v4'
    }
    //    compile project(':stripe')
    //    compile 'io.card:android-sdk:5.0.1'
    //    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    // fork of Pager Sliding Tab Strip that supports ColorStateLists for tab text color.
    // https://github.com/magicgoose/PagerSlidingTabStrip
    compile project(':PagerSlidingTabStrip-magicgoose-1c26523:library')
    //    compile project(':recyclerview-animators')
    compile project(':animators')
    compile('com.crashlytics.sdk.android:crashlytics:2.5.3@aar') {
        transitive = true;
    }
}

build.gradle верхнего уровня:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
    }
}

plugins {
    id "me.tatarka.retrolambda" version "3.2.3"
}

allprojects {
    repositories {
        mavenCentral()
    }
}

Примечание. Это очень сложно найти в Google, потому что большинство ответов касаются клиентской стороны, то есть пользователи получают эту ошибку при попытке загрузить приложения.


Обновление 1+2:

Установка подписанного apk вручную с помощью adb install приводит к Failure [INSTALL_FAILED_DEXOPT] и следующей трассировке стека logcat.

Следует отметить, что запуск отладочной версии приложения (с minSdkVersion из 21) на моем телефоне через Android Studio работает безупречно.

Это может быть связано с multidex. Когда я меняю minSdkVersion на 21, приложение устанавливается нормально. Но если я изменю его на 17, произойдет сбой. Вот расширенная версия приведенной выше трассировки стека:

11-19 15:50:58.474 19186-19186/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 2000 <<<<<<
11-19 15:50:58.477 19186-19186/? D/AndroidRuntime: CheckJNI is OFF
11-19 15:50:58.642 19186-19186/? D/AndroidRuntime: Calling main entry com.android.commands.pm.Pm
11-19 15:50:58.706 3907-3907/? D/Finsky: [1] PackageVerificationReceiver.onReceive: Verification requested, id = 37
11-19 15:50:58.713 3907-3907/? D/Finsky: [1] WorkerTask.onPreExecute: Verification Requested for id = 37, data=file:///data/local/tmp/io.givenow.app flags=114 fromVerificationActivity=false
11-19 15:50:59.860 3907-3934/? I/qtaguid: Failed write_ctrl(u 44) res=-1 errno=22
11-19 15:50:59.860 3907-3934/? I/qtaguid: Untagging socket 44 failed errno=-22
11-19 15:50:59.860 3907-3934/? W/NetworkManagementSocketTagger: untagSocket(44) failed with errno -22
11-19 15:50:59.863 3907-3907/? D/Finsky: [1] 2.onResponse: Verification id=37 response=0
11-19 15:50:59.877 3907-3907/? D/Finsky: [1] PackageVerificationReceiver.onReceive: Verification requested, id = 37
11-19 15:50:59.890 19017-19033/? D/DefContainer: Copying /data/local/tmp/io.givenow.app to base.apk
11-19 15:51:00.633 809-869/? D/PackageManager: Renaming /data/app/vmdl171337004.tmp to /data/app/io.givenow.app-1
11-19 15:51:00.660 809-869/? I/PackageManager: Running dexopt on: /data/app/io.givenow.app-1/base.apk pkg=io.givenow.app isa=arm vmSafeMode=false
11-19 15:51:00.711 19203-19203/? I/dex2oat: /system/bin/dex2oat --zip-fd=6 --zip-location=/data/app/io.givenow.app-1/base.apk --oat-fd=7 --oat-location=/data/dalvik-cache/arm/data@[email protected]@[email protected] --instruction-set=arm --instruction-set-features=div --runtime-arg -Xms64m --runtime-arg -Xmx512m --swap-fd=24
11-19 15:51:01.187 19203-19203/? I/dex2oat: Decided to run without swap.
11-19 15:51:01.560 19203-19206/? W/dex2oat: Before Android 4.1, method int android.support.v7.internal.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
11-19 15:51:06.063 19203-19207/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xd94e27a4 in tid 19207 (Compiler driver)
11-19 15:51:06.066 19203-19203/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xd94e27a4 in tid 19203 (main)
11-19 15:51:06.102 19203-19205/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xd94e27a4 in tid 19205 (Compiler driver)
11-19 15:51:06.166 351-351/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-19 15:51:06.166 351-351/? I/DEBUG: Build fingerprint: 'google/shamu/shamu:5.1.1/LMY47Z/1860966:user/release-keys'
11-19 15:51:06.166 351-351/? I/DEBUG: Revision: '33696'
11-19 15:51:06.167 351-351/? I/DEBUG: ABI: 'arm'
11-19 15:51:06.167 351-351/? I/DEBUG: pid: 19203, tid: 19207, name: Compiler driver  >>> /system/bin/dex2oat <<<
11-19 15:51:06.167 351-351/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xd94e27a4
11-19 15:51:06.168 809-1027/? W/NativeCrashListener: Couldn't find ProcessRecord for pid 19203
11-19 15:51:06.193 351-351/? I/DEBUG:     r0 b163600c  r1 13f513f4  r2 b15af000  r3 0008700c
11-19 15:51:06.193 351-351/? E/DEBUG: AM write failure (32 / Broken pipe)
11-19 15:51:06.193 351-351/? I/DEBUG:     r4 000013f4  r5 d94d87f4  r6 73406b18  r7 d94d8807
11-19 15:51:06.193 351-351/? I/DEBUG:     r8 b6f70a70  r9 d94d8804  sl b6a46df4  fp 00000000
11-19 15:51:06.194 351-351/? I/DEBUG:     ip 00000000  sp b0dffb20  lr b6d47065  pc b6d46e26  cpsr 80070030
11-19 15:51:06.194 351-351/? I/DEBUG:     #00 pc 000dbe26  /system/lib/libart.so (art::ClassLinker::ResolveMethodExceptionHandlerTypes(art::DexFile const&, art::mirror::ArtMethod*)+81)
11-19 15:51:06.194 351-351/? I/DEBUG:     #01 pc 000dc061  /system/lib/libart.so (art::ClassLinker::ResolveClassExceptionHandlerTypes(art::DexFile const&, art::Handle<art::mirror::Class>)+108)
11-19 15:51:06.194 351-351/? I/DEBUG:     #02 pc 000dc28b  /system/lib/libart.so (art::ClassLinker::VerifyClass(art::Handle<art::mirror::Class>)+518)
11-19 15:51:06.194 351-351/? I/DEBUG:     #03 pc 00145be1  /system/lib/libart-compiler.so
11-19 15:51:06.194 351-351/? I/DEBUG:     #04 pc 0013f25d  /system/lib/libart-compiler.so
11-19 15:51:06.194 351-351/? I/DEBUG:     #05 pc 002438ed  /system/lib/libart.so (art::ThreadPoolWorker::Run()+44)
11-19 15:51:06.194 351-351/? I/DEBUG:     #06 pc 002441ed  /system/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+60)
11-19 15:51:06.194 351-351/? I/DEBUG:     #07 pc 00016baf  /system/lib/libc.so (__pthread_start(void*)+30)
11-19 15:51:06.194 351-351/? I/DEBUG:     #08 pc 00014af3  /system/lib/libc.so (__start_thread+6)
11-19 15:51:06.403 809-850/? I/BootReceiver: Copying /data/tombstones/tombstone_03 to DropBox (SYSTEM_TOMBSTONE)
11-19 15:51:06.452 351-351/? E/DEBUG: unexpected waitpid response: n=19203, status=0000000b
11-19 15:51:06.452 351-351/? E/DEBUG: tid exited before attach completed: tid 19203
11-19 15:51:06.453 355-355/? E/installd: DexInv: --- END '/data/app/io.givenow.app-1/base.apk' --- status=0x000b, process failed
11-19 15:51:06.457 809-869/? W/PackageManager: Package couldn't be installed in /data/app/io.givenow.app-1
                                               com.android.server.pm.PackageManagerException: scanPackageLI
                                                   at com.android.server.pm.PackageManagerService.scanPackageDirtyLI(PackageManagerService.java:5955)
                                                   at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:5267)
                                                   at com.android.server.pm.PackageManagerService.installNewPackageLI(PackageManagerService.java:10177)
                                                   at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:10707)
                                                   at com.android.server.pm.PackageManagerService.access$2300(PackageManagerService.java:234)
                                                   at com.android.server.pm.PackageManagerService$6.run(PackageManagerService.java:8627)
                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.os.HandlerThread.run(HandlerThread.java:61)
                                                   at com.android.server.ServiceThread.run(ServiceThread.java:46)
11-19 15:51:06.572 809-869/? I/art: Explicit concurrent mark sweep GC freed 121459(5MB) AllocSpace objects, 34(4MB) LOS objects, 27% free, 41MB/57MB, paused 1.454ms total 81.174ms
11-19 15:51:06.584 19186-19186/? I/art: System.exit called, status: 1
11-19 15:51:06.584 19186-19186/? I/AndroidRuntime: VM exiting with result code 1.

Вышеизложенное дает больше подсказок. Похоже, что dex2oat дает сбой из-за SIGSEGV в драйвере компилятора. Я собираюсь продолжить гуглить; пока что это НЕ похоже на более распространенное ограничение LinearAlloc, с которым сталкиваются другие люди с неудачными установками пакетов.


Обновление 3:

Теперь я могу установить работающую сборку prodRelease, включив ProGuard со следующим файлом правил:

# Add project specific ProGuard rules here.

-dontobfuscate #if obfuscation is enabled, we get "java.lang.NoSuchFieldException: producerIndex" (wtf?)

#Retrolambda
-dontwarn java.lang.invoke.*

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

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

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

-keep class com.parse.* { *; }
-dontwarn com.parse.**

-dontwarn okio.**
-dontwarn fj.**

# Guava:
-dontwarn sun.misc.Unsafe

# Picasso
-dontwarn com.squareup.okhttp.**

Однако сборки devDebug по-прежнему не могут быть установлены.

По какой-то причине сейчас я вижу более подробную трассировку стека. Обратите внимание, что сигнал, выдаваемый dex2oat, теперь имеет значение SIGABRT, а не SIGSEGV: http://pastebin.com/raw.php?i=rg5BnYst


person Aphex    schedule 18.11.2015    source источник
comment
Вы пытались установить тот же APK, который вы загрузили вручную через adb install?   -  person CommonsWare    schedule 18.11.2015
comment
Интересно. Я только что попытался создать подписанный apk и установить его с помощью adb install. Я получаю Failure [INSTALL_FAILED_DEXOPT], и logcat показывает трассировку стека выше. Смотрите обновленный пост.   -  person Aphex    schedule 18.11.2015
comment
Какие именно вкусы вы пробуете? prodRelease выдает ошибку в магазине игр prodDebug устанавливается нормально с помощью adb?   -  person Nicolas Gramlich    schedule 19.11.2015
comment
prodRelease не устанавливается и выдает указанную выше трассировку стека. devDebug устанавливается нормально, когда dev имеет minSdkVersion 21. Я изменил dev на minSdkVersion 17, и теперь devDebug завершается с той же ошибкой.   -  person Aphex    schedule 19.11.2015
comment
У меня все заработало - это ошибка в инструментах сборки! Смотрите мой ответ.   -  person Aphex    schedule 20.11.2015


Ответы (2)


У меня это работает!

Версия инструментов сборки 23.0.2 не работает для мультииндексированных приложений.

При изменении на buildToolsVersion "23.0.1" создаются рабочие, устанавливаемые сборки как в devDebug, так и в prodRelease.

(Как упоминается в моем посте, первый не работает с proguard, второй работает, и оба варианта нацелены на minSdkVersion из 17).

На это ушло целых два дня. Я надеюсь, что это сэкономит чье-то время, по крайней мере, пока не выйдет 23.0.3!

person Aphex    schedule 19.11.2015
comment
Спасибо за напоминание! Сообщено: code.google.com/p/android/issues/detail? идентификатор = 195493 - person Aphex; 26.11.2015

Если вы обновите targetSdkVersion до 23 (в соответствии с вашими compileSdkVersion и buildToolsVersion), проблема исчезнет.

Вы также можете получить код ошибки: -504 в Play Маркете за понижение версии targetSdk с 23 до 22. Установка завершится ошибкой из-за понижения модели разрешений. Консоль разработчика Play Store не уведомит вас об этом, но установка ваших пользователей завершится ошибкой.

person goodKode    schedule 20.11.2015
comment
Интересно. Я еще не поддерживаю модель разрешений Marshmallow, поэтому я оставлю ее на уровне 22, пока не сделаю это, но это очень полезный совет. - person Aphex; 21.11.2015