General question

I have an app X installed on my device in version Y. I don't want to update it to any newer version (Y+z) for some reason. Still, the Google Play Store app always lists updates for X, which keeps me from a simple "update all". My question, put to a single sentence:

How to hide updates for X permanently from the "available updates" list?


Specific examples

First, I know there are alternatives as e.g. the AppBrain Market App, which can handle this quite well (skip this update, skip all future updates). I prefer a "generic solution", which does not depend on a 3rd party's market app.

Second, I know that Titanium Backup includes a "Market doctor", which can be used to disconnect an app from Google Play.1 However, in my specific case that only worked for a few hours: I disconnected GTalk, as I don't want it replaced by Hangouts. The update notification disappeared for a few hours, then it was back. No idea what restored the "link".

Third, just to make sure: I'm not talking about the "auto update" feature as discussed e.g. in How to enable Play Store auto-update for just a few apps?. I was rather hoping for something close to Does the google play store not provide updates for frozen apps?, but without the need to "freeze" the app in question (which I still want to use, but in the version installed, not in a "future version" available).

Fourth: No, uninstalling the app in question is no option here, though it would perfectly hide any future updates from being displayed :) Nor is "freezing", as the app is used regularly.

Fifth: There is a related question for my GTalk example: Do apps included in the gApps zip get updated via Google Play? However, I want the opposite: No update.


It might very well be that "Google Apps" (and other pre-installed apps) are handled in some specific way, and restore their "market links" themselves somehow. For this case, my question includes: How to prevent that from happening?


Update

There's a thread at XDA discussing the very same issue. Until recently, a work-around for "user installed apps" was to uninstall them and then sideload the .apk – but even that stopped working. Well, re-signing the .apk with a different key might work for user-apps. But both would fail for pre-installed apps (can't sideload them to override; different signature would refuse that install completely).

Moreover, there's an issue filed on this by some "joel.bou..". Not hard to guess, though blanked out: that would be Joël Bourquard. If it's really him, then that's really an issue (for those who don't know: Joël is the dev behind Titanium Backup). Let me quote from the issue:

For the record: in the Android Market days it was possible to "Attach" or "Detach" apps (on rooted devices) with a system tool such as Titanium Backup. But nowadays (with the Google Play Store app) this has become nearly impossible to do, because the complete app list seems to sync from Google's servers and the user has no control over that.

Which explains why detaching with apps like Titanium Backup is no longer permanent. And I'm afraid I've asked the impossible. But I thought the same in the past with other questions, and surprisingly got solutions here. So I do not yet give up hope on this one!


1: what that does is explained by eldarerathis in this post (thanks to Firelord for digging that up!)

  • 2
    Thanks for bringing this topic back up. You are now converted to my opinion of apps evidenced in this thread we had last year: Question 39180 -permanently-indicate-to-market-an-application-should-refuse-upgrades – wbogacz Nov 30 '13 at 17:23
  • 1
    Yes, that is related. But what geffchang stated in his answer to it is what I already tried unsuccessfully: Detaching the app from Playstore using Titanium Backup. Obviously, this does not work permanently with pre-installed Google apps. – Izzy Nov 30 '13 at 18:57
  • @Firelord Could you sum that up in an answer (preferably with hints to the SQL statements)? Not sure whether I'd implement it (will see then), but I see that this could work: Affected apps are known in advance (incl. their package-names), so "static" SQL scripts can be created once (one for each DB). Then, use e.g. Tasker to have the scripts executed (with the sqlite* binary against those databases) daily (optionally: link it to the init.d startup scripts). Definitely worth a +1 at least. Thanks for the hint – and in advance for the answer :) – Izzy Jul 9 '15 at 10:11
  • @Izzy That comment above, you know what to do with it now. :) And, eldarerathis ♦ has explained here what does that "Detach from market" in TiBa actually does (editing localappstate.db). You might wanna include the link of that answer to your question. – Firelord Jul 11 '15 at 21:37
  • @Firelord Indeed. That's basically what you've suggested – just in your case, it doesn't need TiBu. Thinking about which: TiBu has a scheduler. And you can filter apps. Should be possible to define a filter for apps to "silence", and have them "detached" twice a day via that scheduler – as alternative solution. When time permits, maybe I'll play with all that … – Izzy Jul 11 '15 at 21:47

Notes:

  • OP already know the details, but I've elaborated things considering other readers in mind.
  • I've assumed that the device is rooted, and my solution is tested on Android 4.2, 4.4 and 5.0, all running Play Store v5.6.8. (Sorry! couldn't test it on Kitkat but no reason to believe that it wouldn't work.)

The solution by Craig is actually quite good, and if it somehow can be executed (the custom widget) with Tasker, then things would go very smoothly.

The answer by Anan can also do the job by using pm disable <PKG> in Tasker, but one can't use that favorite app as long as the Play Store is updating the list, which some users wouldn't prefer.

And I've never tried Changelog Droid, so can't comment.

But I've another way to get the things done, not so clean in GUI but good. Here we go:

Play Store has its databases under /data/data/com.android.vending/databases/. There are three databases worth considering viz. library.db, localappstate.db, package_verification.db.

  • library.db -- it has a table named ownership which would list the apps that you've ever installed from Play Store with all the Google Play Store accounts associated to them. Note that ever includes those apps too which you once installed from Play Store long time ago and uninstalled later.
  • localappstate.db -- this has a table named appstate which would list all the user apps now currently installed in your device. Those installed from Play Store would show title of the app too, but sideloaded ones won't.
  • package_verification.db -- this database would show up if you've enabled "Verify Apps" under "Settings" of Android. It has a table named verification_cache having list of apps for verification.
  • suggestions.db -- not relevant here but it has a table named suggestions having a list of all the searches (keywords) you've made using Play Store search bar.

Note that I've no source to back my claim, it's all personal experience here. You're encouraged to disagree (with evidence), so that quality of this answer can be further enhanced.


Now, back to the question. On my Lollipop, I was able to remove 37 apps from the update list and left only one app for which I used "Update all" to further test the solution. It worked perfectly!

The required steps:

  1. Force close the Play Store to avoid any data corruption since we need to edit its database.

  2. Remove the ownership of your app from library.db: I've used sqlite3 (use SQLite installer for Root if you don't have it). I've used a very simple query which would delete a record(row) from the database by identifying the row using a value. To know further usage of sqlite3 use this resource.

    The general command to remove the ownership would be:

    sqlite3 /data/data/com.android.vending/databases/library.db "DELETE from ownership where doc_id='<PKG_NAME>'"
    

    Replace <PKG_name> with package name of your app. E.g. for Chrome browser the package name is com.android.chrome.

    You can find your app's package name using App Browser, or OS Monitor, or simply refer to the question: View app's full package name?

  3. Remove app's further details from localappstate.db and package_verification.db: Note that the above two steps did the job in my devices. Since I don't want the app to show up by any reason in the update list, I've purged all the details from all the aforesaid databases.

    The general command to remove the information from localappstate.db would be:

    sqlite3 /data/data/com.android.vending/databases/localappstate.db "DELETE from appstate where package_name='<PKG_NAME>'"
    

    And, for package_verification.db, it would be:

    sqlite3 /data/data/com.android.vending/databases/package_verification.db "DELETE from verification_cache where package_name='PKG_NAME'"
    

The core is covered. Now, as for the execution:

  • You can make a script
  • Use adb shell, or adb pull the databases, and do editing on PC using an SQLite software (like DB Browser for SQLite)
  • You can use apps like SQLite Editor or aSQLite Manager to manually delete the app records
  • Use any terminal app, like Terminal Emulator for Android -- it allows widgets which you can use as a shortcut for a command or a script. See my answer to know how to make such shortcut
  • Use Tasker to create profiles based on time, application, or any profile that would suit you
  • Plug your script into start-up, though I've not tried it, so ask OP

The app though won't show in the installed apps or update list, but it will definitely show up in "All" under "My apps" in Play Store. I don't use this store much, so I didn't test other settings of it further anymore.

Additionally, you may note that if you've had earlier unchecked "App updates available" under Play Store settings, and you check it after executing the said commands, it will trigger a sync and your changes, as obvious, would be lost.

Also, be aware that Google holds all the info on their servers. So sooner or later, the databases are going to be updated. In my Lollipop device, I waited for around 24 hours and saw no changes in the databases, but YMMV.


For non-rooted devices

It's a theory and I won't claim that it would work but you can try:

  1. Force close and take adb backup of Play Store.
  2. Extract backup and make required changes into the databases.
  3. Pack the changed files into a new backup file and restore them into the device.

    If you're unaware of unpacking and packing an ADB backup on PC, then take a look at Android Backup Extractor (ABE) (it needs Java Runtime Environment, and has README.txt for usage) which would unpack the .ab file into a .tar which you can then extract using an archiver like Ark, 7zip, WinRAR, and more.

    You can use DB Browser for SQLite to make changes into the databases found inside the extracted content (probably) apps/com.android.vending/db/.

    Also, you may take a look at Android backup related posts such as this, this and Adebar -- all suggested by Izzy.

  4. See if the app is gone from the update list.

  5. If you succeed in step 4, then run ADB wirelessly to execute steps 1-4 on the Android device itself (somehow) rather than using a PC -- this could be very helpful in Tasker if you succeed.
  6. Well, if you succeed all the way down to step 4 or 5 then you perhaps can also answer: How Do I Get Rid of Apps from Play Store Update List? :)

Edit:

Well, I'm not the only one who figured it out this way:

  1. Android: Stop Wanting to Update Skype -- very close with script part added, but with no reasoning of course
  2. (Requires Root) For future reference how to update Ingress without waiting on the rollout. -- not good enough because library.db is the main culprit
  3. Getting the package name for an app
  4. [WIP] No Call Sound, block Auto-Update Play Services
  • Very thorough answer, Firelord – I'd upvote that multiple times if I could! I will definitely test this as soon as time permits, and maybe add my experience / additional hints then. // As for non-rooted devices, I'd be stuck with step 3. Any further information/link on how to accomplish that? We've got a lengthy post on it here, but it looks complicated. For #2, there's this post, and of couse ab2tar in Adebar ;) – Izzy Jul 9 '15 at 16:41
  • @Izzy Thanks! The links to the posts you mentioned has referred to ABE (Android Backup Extractor). It can pack and unpack very easily. All you need is Java Runtime Environment. // And I could have gone further because I don't like leaving loose ends, but my adb restore abruptly quits on my devices for any app restore, so I cannot really test my own theory. :/ – Firelord Jul 9 '15 at 17:31
  • Ouch, that's bad. You still might wish to integrate a link to ABE on step 2+3 in your answer. And of course, once that issue with your devices is solved, we'll all be happy seeing how you "fix that loose end" :) – Izzy Jul 10 '15 at 10:55
  • @Izzy Done! Well, two of my devices suffer from that abrupt restore quit, and the third one (well, a Micromax device, remember Yureka :D) decided not to detect USB connection at all. Seems like we'll have to wait quite a lot to see those loose ends getting fixed. :) – Firelord Jul 10 '15 at 11:14
  • 1
    Great! I first used the Scheduler in Titanium with Detach from Market which I had to run at least 4 Times a day, but still sometimes the Update (in my case extreme buggy Swype 3.0.x) showed. Now I wrote a Tasker Task which I run by a Task profile each hour. Thanks a lot :) One thing: I had to use the Titanium sqlite3 (/data/data/com.keramidas.TitaniumBackup/files/sqlite3) because of this PIE error thrown if the path misses. – franc Mar 10 '17 at 9:27

This is an issue for me with a couple of apps as well, specifically a torch flash light app, where the newest version doesn't play well with Lollipop, but the previous version does.

My solution to this in the past was to use Change Droid, but as has been stated above, if you open the play store it can return.

Currently the solution I use is to run a scheduled task from Titanium Back up to detach the app from the market. I currently run this 4 times a day. It runs in the background at the scheduled time and so, when I check the Play Store for updates, it is not there.

I will have to look into it, but there may/should be a way to run the task when the play store is open...not sure.

----Edit---- Some have asked for more detail on the TB setting...

First you have to create a filter only select those apps that you want to detach. You access this under the menu. You add the "Elements" or apps to the filter, so only the selected apps are affected. Make sure you don't run the detach with everything selected an no filter applied :)

Screenshot Screenshot

Next, you have to make the schedule with the filter applied to the schedule.

Screenshot Screenshot

As you can see this is just for one scheduled event m-s, at 4am

When it's complete your scheduled task will look something like this

Screenshot

You will have to replicate this and change the time depending on how many times you want it to happen.

I have mine set for 4am 8am Noon and 4pm. Seems to work for me.

Hope this makes it a little more clear. If you tool around TB, I am sure with these screenies, that you can work it out.

Craig

  • I used this solution for some days but always I get a Message from Titanium in the info bar after done. A bit annoying and also 4 tasks (in my scheduler) was not enough, still sometimes the Update was again visible. So for now I prefer the command line solution of Firelord which can be done by Tasker totally in the background and works fine :) – franc Mar 10 '17 at 19:37

With the following solution:

  1. You don't depend on a 3rd party's market app.
  2. It can be configured to bypass update notifications by Google Play.
  3. You can revert app "update block" whenever you want (allowing you to update apps for future versions)
  4. It doesn't uninstall or freeze the apps you use.
  5. It works with Gapps too.

There is a free app called Changelog Droid (formerly this was a freemium app, now it has full functionality for free). Through it you can manage updates of your other apps, being an intermediary with Google Play.

The advantage is that you can send apps to a blacklist, omitting to show updates temporarily or "permanently" (until you change your mind). You can also follow updates for applications you have uninstalled or you've never installed but want to observe. I accompany this response with some screenshots (identifying with colors the different screen navigation) for you to realize how it works.

How to blacklist an app Blacklisted apps Whitelisted apps

How to "Un-blacklist" an app Options menu Preferences

How to bypass Google Play notifications Enable notification access for Changelog Droid Show system apps (Gapps)

Select Gapps to show

The only downside is that when you open Play Store, either directly or from this app, all apps will be shown (including those that you didn't want to update, as the one applying the filter is Changelog Droid and not Google Play itself, this was expected)

Google Play still shows all the apps

But in Changelog Droid you can access each app on Google Play with a button and then upgrade it individually.

Sorry: there is currently no option to update all allowed applications in one single step from Changelog Droid, but perhaps the developer could implement it eventually.

Note: I still haven't tested for the scenario you describe (I already have updated/replaced Talk/Hangouts), but it could work in your case. Just remember to do not open My Apps view of Google Play so it won't trigger automatic update of apps.

  • 1
    Thanks a lot, Francisco! That very much reminds me of AppBrain Market App as it was years ago (didn't try it recently, since their own installer was turned off). Back then, when their "fast webinstaller" still worked, you could even trigger the "update all" on the filtered list... Btw: visiting "My Apps" wouldn't trigger any updates for me, as I've turned auto-update off completely. Guess I'll give your solution a try, as soon as time permits ;) – Izzy Dec 22 '13 at 0:30

Disable the app in main app settings, or app manager, and open play store and the app shouldn't be listed. Update all and simply re-enable the app when update all is complete. I have the same problem, a txt message app that if I update, I get ugly ads.. This is my work around

  • 1
    While this might work, it's far from being convenient (involves too many steps, especially if there are multiple apps involved). – Izzy Feb 13 '15 at 22:12
  • Could be automated with Tasker – endolith Nov 9 '15 at 20:05

I know this is an old thread. And I understand that Ti Backup used to work for detaching an app from Play Store. But I also understand that this works no longer. For those who are interested, I have created an app that does a pretty good job of this. It is called Hide Updates In Play Store, and available for ~USD 1. There is a video showing the app at work. It does require root.

  • 2
    Thanks for your efforts, David! But I don't like the side-effects it has e.g. on apps with in-app-purchased things, or the my-apps list. Meanwhile I got used to always see 7 updates I don't care for – though I'd wish Google would add an option like AppBrain has in its app: to skip one (or all) updates for a given app. And BTW: Thanks for openness (disclosure that it's your app). I took the freedom to add the link – but also mention the price. – Izzy Sep 8 '15 at 19:46

Solution I've found for root users is to simply re-sign the apk (found in /data/app/ or your TitaniumBackup folder after backup) with ZipSigner and reinstall.

  • That isn't always an option (signature issues with some apps using "shared resources"), but might be a work around for some, yes. – Izzy Dec 30 '15 at 17:07
  • Can you elaborate? Curious. – Drazen Bjelovuk Dec 30 '15 at 17:12
  • See e.g. Support package signature faking. This mostly involves pre-installed apps and apps from the same vendor, usually Google. As I no longer use the Google Playstore app, I'm no longer having the issue this question is about. – Izzy Dec 30 '15 at 19:05
  • Interesting. Guess it all depends on the prevalence of signature checking among apps. Fortunately has so far not been a problem for me. – Drazen Bjelovuk Jan 4 '16 at 2:50
  • Admittedly, trouble in this context is rare – but cannot be completely ignored ;) – Izzy Jan 4 '16 at 6:00

I tried using the app "Permission Manager" (have to be rooted I think). I disable a permission that is not important for the app I don't want to updaten (ex. disabled vibrate permission in ES File Explorer and wakelock in Quickpic). Permission Manager recompiles the app, uninstalls the original, and reinstalls the newly compiled app. After I did this, I opened Play Store and the update reminder was gone.

  • That would mean manipulating the original .apk files (and yes, there are several such apps available: for apps you've installed yourself you probably won't need root, but to work on system apps you would). I'd count that a work-around, but it's not an approach I'd take. Thanks anyway! – Izzy May 26 '15 at 22:13

Another candidate just appeared at the horizon. I've not yet tested it, but it sounds very promising: StorePrefs.

  • Requirements:
    • rooted device
    • Xposed installed
  • Promises:
    • Blocking rapid update
    • Ignoring some updates (When you have update available in My Applications in Playstore just long click on this update to ignore it)

Being an Xposed module, it should be able to work around the flaws of the other solutions we've had up to now:

  • If the Play Services decided to re-link an unlinked app, the module should be able to take action. So no special hand-work required, no Tasker setup
  • no manual fiddling with the SQLite databases or adb shell
  • no secondary "update checker" (a la ChangelogDroid) required
  • no manipulation of .apk files
  • only problem for some users: doesn't work on non-rooted devices and those w/o Xposed

As I have de-googlified my devices and no longer use the Playstore app, I cannot verify – so feedback from those who can is welcome :)

Like titanium backup you also can unlink the app from google play store with 3C Toolbox. This seems to be, until now, permanent. Root required.

  • 1
    I cannot verify this anymore (got rid of all the Google Apps), but as it might be relevant to others: what time frame does "until now" cover? Maybe 3C Toolbox continually watches and renews that setting? – Izzy Apr 21 '16 at 13:27
  • Not sure if anything > 5.0 allows this change to stick. Google Play automatically reconnects the apps. Only thing close, sadly, is to manually disable auto-updates and make a backup of the version you want. – Enigma Apr 21 '16 at 16:45

protected by Community Sep 5 '16 at 12:59

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.