I just released my app to the Google Play Store, and the signed apk was published successfully. However, (and I've tried this on three different phones and tablets), the app refuses to install when downloaded from the store. After clicking the "Install" button, the app will download, the status will change to "Installing..." and then the following dialog appears:
What can be done?
Facts about my app that could help troubleshooting:
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;
}
}
// 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()
}
}
Note: This is very hard to google for because most answers deal with the client-side, i.e. users getting this error when trying to download apps.
Installing the signed apk manually with adb install
produces Failure [INSTALL_FAILED_DEXOPT]
and the following logcat stack trace.
It should be noted that running the debug version of the app (with a minSdkVersion
of 21) on my phone via android studio works flawlessly.
This could be related to multidex. When I change my minSdkVersion
to 21, the app installs fine. But if I change it to 17, it fails. Here's an expanded version of the above stacktrace:
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.
The above gives more clues. It looks like dex2oat is failing with a SIGSEGV in the compiler driver. I'm going to continue googling around; so far, this does NOT seem like the more common LinearAlloc
limit that other people with failing package installs are running into.
I'm now able to get a working prodRelease
build installed by enabling ProGuard, with the following rules file:
# 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
builds still cannot be installed.For some reason I'm seeing a more detailed stacktrace now. Note that the signal issued to dex2oat is now SIGABRT
rather than SIGSEGV
:
http://pastebin.com/raw.php?i=rg5BnYst
I got it working!
23.0.2
is broken for multi-dexed apps.Changing to buildToolsVersion "23.0.1"
produces working, installable builds in both devDebug
and prodRelease
.
(As my post mentions, the former does not run proguard, the latter does, and both flavors target a minSdkVersion
of 17).
This consumed two entire days. I hope this saves someone else's time, at least til 23.0.3
comes out!
If you update targetSdkVersion to 23 (in line with your compileSdkVersion and buildToolsVersion), you issue will go away.
You can get a Error code: -504 in the Play Store for downgrading your targetSdkversion from 23 to 22, too. Installation will fail because of a permission model downgrade. The Play Store dev console will not notify you of this, but your users' installation will fail.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With