TX5/8 Marshmallow Google Play won't update install_failed_package_changed
So I've been struggling with the dreaded constant "Unfortunately, Google Play store has stopped" message on two IPTV boxes, a TX5pro and TX8 both running Marshmallow. The first time it happened, I came to the conclusion that the Google Play Store added a feature which requires an update that fails to install. Prior to this I had no idea that it could NOT self-update, so the problem existed from day one.
The Google Play Store has both a system and update component which exist in different locations. The system one resides at /system/priv-app/Phonesky/Phonesky.apk while the update apk should be located at /data/app/com.android.vending-[#]. In my case the latter does not exist.
Oddly Google Play Services has the same framework of system app at /system/priv-app/Prebuilt-gms-core.apk but it does have an update entry at /data/app/com.google.android.gms-[#]. It's important to note that the Google Play Store app is the only one I've encountered problems with installing or updating.
I've compared directory and file permissions/owners/attributes, from a known working rooted tablet on Marshmallow, and found nothing out of the ordinary.
Using a root terminal emulator with Unknown Sources enabled, if I use the command "pm install Phonesky.apk" the error message is "install_failed_package_changed".
I can use these commands in the terminal to manually update the Play Store:
Code:
su
mount -o remount,rw /system
cp /sdcard/Download/Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
chmod 644 /system/priv-app/Phonesky/Phonesky.apk
mount -o remount,ro /system
reboot
A more thorough version which clears the dalvik:
Code:
su
mount -o remount,rw /system
rm /data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex
rm /data/dalvik-cache/profiles/com.android.vending
rm /system/priv-app/Phonesky/Phonesky.apk
mount -o remount,ro /system
reboot
(after reboot)
su
mount -o remount,rw /system
cp /sdcard/Download/Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
chmod 644 /system/priv-app/Phonesky/Phonesky.apk
mount -o remount,ro /system
reboot
While both manual update methods work there is a crucial problem that becomes apparent when one compares the contents of the folders /system/priv-app/Phonesky/Phonesky.apk and /data/app/com.android.vending-[#]. The former contains just Phonesky.apk while that latter has the same as base.apk but it also extracts some of the libraries and other data. I suspect that the libraries are linked so that the ones in the update folder take precedence over those installed in system locations.
With the recent addition of Google's malware detection system "Play Protect", I think updating Phonesky.apk without extracting those libraries and giving them precedence is the cause of the "Unfortunately, Google Play store has stopped" message.
I decided to install an opengapps package using the RTAndroid Linux script
https://github.com/RTAndroid/android_vendor_brcm_rpi3_scripts and that's resolved my "Unfortunately, Google Play store has stopped" message for now. The Play Store still won't self update and these appear to be the relevant log events.
Code:
09-08 06:16:30.951 D/DownloadManager( 4671): [1277] Finished with status SUCCESS
09-08 06:16:31.008 I/Finsky ( 7340): [1] com.google.android.finsky.download.DownloadBroadcastReceiver.a(12): Intent received at DownloadBroadcastReceiver
09-08 06:16:31.011 I/Finsky ( 7340): [1] com.google.android.finsky.download.n.a(116): com.android.vending: onProgress 18815483/18815483 Status: 200.
09-08 06:16:31.016 I/Finsky ( 7340): [1] com.google.android.finsky.download.e.a(49): com.android.vending from 2 to 3.
09-08 06:16:31.017 I/Finsky ( 7340): [1] com.google.android.finsky.download.n.e(144): com.android.vending: onComplete
09-08 06:16:31.017 I/Finsky ( 7340): [1] com.google.android.finsky.download.n.i(89): Download com.android.vending removed from DownloadQueue
09-08 06:16:31.018 I/installd( 3807): free_cache(0) avail 25029062656
09-08 06:16:31.020 I/Finsky ( 7340): [1] com.google.android.finsky.cc.a.f.onPostExecute(6): Self-update ready to be installed, waiting for market to close.
09-08 06:16:41.194 I/installd( 3807): free_cache(18815483) avail 25029054464
09-08 06:16:43.410 W/PackageManager( 6154): installPackageLI
09-08 06:16:43.431 I/art ( 6154): Starting a blocking GC Explicit
09-08 06:16:43.533 I/art ( 6154): Explicit concurrent mark sweep GC freed 152350(6MB) AllocSpace objects, 1(244KB) LOS objects, 33% free, 15MB/23MB, paused 1.684ms total 101.885ms
09-08 06:16:43.533 E/installd( 3807): Couldn't opendir /data/app/vmdl1199500518.tmp: No such file or directory
09-08 06:16:43.546 W/Finsky ( 7340): [1] com.google.android.finsky.cc.a.n.onReceive(14): Unable to abandon session 1199500518: java.lang.SecurityException: Caller has no access to session 1199500518
09-08 06:16:43.546 E/Finsky ( 7340): [1] com.google.android.finsky.cc.a.n.onReceive(27): Error -504 while installing com.android.vending: INSTALL_FAILED_PACKAGE_CHANGED: installPackageLI
09-08 06:18:02.318 I/Finsky ( 7340): [769] com.google.android.finsky.flushlogs.FlushLogsReceiver$FlushLogsService.onHandleIntent(10): Flushing event logs for []
09-08 06:18:02.319 I/PlayCommon( 7340): [722] com.google.android.play.a.g.e(244): Preparing logs for uploading
09-08 06:18:02.319 W/art ( 6359): Long monitor contention event with owner method=int libcore.io.Posix.readBytes(java.io.FileDescriptor, java.lang.Object, int, int) from Posix.java:4294967294 waiters=0 for 3.158s
09-08 06:18:02.328 I/PlayCommon( 7340): [770] com.google.android.play.a.g.e(244): Preparing logs for uploading
09-08 06:18:02.329 I/PlayCommon( 7340): [770] com.google.android.play.a.g.e(248): No file ready to send
09-08 06:18:02.339 D/su ( 7455): sending code
09-08 06:18:02.354 D/su ( 7457): child exited
09-08 06:18:02.354 D/su ( 7458): client exited 0
As a final note and warning, using the RTAndroid update script requires editing the bash script to identify the proper TIMESTAMP="20170907" VERSION="6.0" and VARIANT="pico" which can be derived from the list:
https://github.com/opengapps/arm/releases/
The final part of the script fails and causes a constant "unfortunately setup wizard has stopped" after reboot which is fixed by enabling all "App Permissions" for the system app "Setup Wizard" (Contacts, Phone).