常见问题
我在设备上安装了版本为Y的应用X。出于某种原因,我不想将其更新为任何较新的版本(Y + z)。不过,Google Play商店应用始终会列出X的更新,这使我无法进行简单的“全部更新”。我的问题只用一个句子:

如何从“可用更新”列表中永久隐藏X的更新?


特定示例
首先,我知道有其他选择,例如AppBrain Market应用程序,可以很好地处理此问题(跳过此更新,跳过所有以后的更新)。我更喜欢一个“通用解决方案”,它不依赖于第三方的市场应用程序。
其次,我知道Titanium Backup包括一个“市场医生”,可用于断开应用程序与Google Play的连接。1但是,在我的特定情况下,这种方法只工作了几个小时:我断开了GTalk的连接,因为我不希望它被环聊取代。更新通知消失了几个小时,然后又回来了。不知道是什么恢复了“链接”。
为了确保:我不是在讨论“自动更新”功能,例如如何启用仅几个应用程序的Play商店自动更新?。我当时很希望Google Play商店是否不为冻结的应用提供更新?但是不需要“冻结”有问题的应用(我仍然想使用该应用,但安装的版本不是
第四:不,在这里卸载有问题的应用程序是没有选择的,尽管它会完全隐藏任何将来的更新:)也不会“冻结”,因为该应用程序会定期使用。
第五:我的GTalk示例有一个相关问题:gApps zip中包含的应用是否可以通过Google Play更新?但是,我要相反:不更新。

很有可能是以某种特定方式处理了“ Google Apps”(以及其他预装的应用程序),并以某种方式自行恢复了它们的“市场链接”。对于这种情况,我的问题包括:如何防止这种情况发生?

更新
XDA上有一个线程在讨论同样的问题。直到最近,“用户安装的应用程序”的变通办法是卸载它们,然后横向加载.apk,但即使这样也无法正常工作。好吧,用其他密钥重新签名.apk可能适用于用户应用程序。但是两者都不会对预装的应用程序失败(无法侧加载它们以覆盖;不同的签名将完全拒绝安装)。
此外,某些“ joel.bou ..”对此提出了问题。尽管被遮住了,但不难猜测:那就是乔尔·布尔夸德。如果真的是他,那就真的是个问题(对于那些不知道的人:Joël是Titanium Backup的开发人员)。让我从问题中引用:

作记录:在Android Market时代,可以使用系统工具(例如Titanium Backup)“附加”或“分离”应用程序(在已植根的设备上)。但是如今(使用Google Play商店应用)这几乎变得不可能了,因为完整的应用列表似乎是从Google的服务器同步的,并且用户对此没有控制权。

这解释了为什么分离Titanium Backup之类的应用程序不再是永久性的。而且我恐怕已经问过不可能的事情了。但是我过去对其他问题也有同样的想法,令人惊讶的是这里找到了解决方案。所以我还没有放弃这一希望!

1:eldarerathis在这篇文章中解释了什么(感谢Firelord对此进行了挖掘!)

评论

感谢您提出这个话题。现在,您对我对去年在此线程中证明的应用程序的看法有所转变:问题39180-永久指示向市场申请的应用程序应拒绝升级

是的,这是相关的。但是geffchang在回答中指出的是我已经尝试失败的内容:使用Titanium Backup从Playstore分离应用程序。显然,这不适用于预安装的Google应用。

@Firelord能否在一个答案中总结一下(最好是带有SQL语句的提示)?不知道是否要实现它(将在随后看到),但是我看到它可以工作:预先知道受影响的应用程序(包括它们的程序包名称),因此“静态” SQL脚本可以创建一次(一个用于每个数据库)。然后,使用Tasker每天执行脚本(对这些数据库使用sqlite *二进制文件)(可选:将其链接到init.d启动脚本)。绝对值得至少+1。感谢您的提示-并提前给出答案:)

@Izzy上面的评论,您现在知道如何处理。 :)而且,eldarerathis♦在这里解释了TiBa中“从市场分离”的实际作用(编辑localappstate.db)。您可能想在问题中包含该答案的链接。

@Firelord确实。这基本上就是您所建议的-就您而言,它不需要TiBu。考虑哪个:TiBu有一个调度程序。您还可以过滤应用。应该可以为应用程序定义一个过滤器以使其“静音”,并通过该调度程序每天两次“分离”它们-作为替代解决方案。如果时间允许,也许我会玩所有……...

#1 楼

注意:


OP已经知道细节,但是我在考虑其他读者的基础上进行了详细说明。
我假设该设备已植根,并且我的解决方案已在所有运行Play Store v5.6.8的Android 4.2、4.4和5.0上进行了测试。 (对不起!无法在Kitkat上对其进行测试,但是没有理由认为它不会起作用。)



Craig的解决方案实际上是相当不错的,如果可以使用Tasker以某种方式(自定义窗口小部件)执行该操作,那么事情将会非常顺利。

Anan的答案也可以通过使用Tasker中的pm disable <PKG>来完成,但是只要Play商店正在更新列表,一个人就无法使用该喜爱的应用,某些用户不希望这样做。 。

而且我从未尝试过Changelog Droid,所以无法发表评论。

但是我还有另一种方法来完成工作,在GUI中不是那么干净,但是好。我们开始:

Play商店的数据库在/data/data/com.android.vending/databases/下。有三个数据库值得考虑。 library.dblocalappstate.dbpackage_verification.db



library.db-它有一个名为ownership的表,该表将列出您曾经从Play商店安装的应用以及所有Google Play存储与它们关联的帐户。请注意,这些应用程序也包括您很久以前从Play商店安装并稍后卸载的那些应用程序。

localappstate.db-该表名为appstate,该表将列出您当前当前安装在您的应用程序中的所有用户应用程序设备。在Play商店中安装的应用程序也会显示该应用程序的标题,但侧面加载的应用程序将不会显示。

安卓它有一个名为package_verification.db的表,其中包含要验证的应用程序列表。

verification_cache-此处不相关,但它有一个名为suggestions.db的表,其中包含您使用Play进行的所有搜索(关键字)的列表商店搜索栏。

请注意,我没有任何依据可以证明我的主张,这只是我的个人经历。鼓励您不同意(有证据),以便进一步提高此答案的质量。


现在,回到问题所在。在我的Lollipop上,我能够从更新列表中删除37个应用程序,只剩下一个我使用“全部更新”来进一步测试该解决方案的应用程序。

所需步骤:


强制关闭Play商店以避免任何数据损坏,因为我们需要编辑其数据库。

suggestions删除应用的所有权:我使用过library.db(如果没有,请使用SQLite安装程序安装Root)。我使用了一个非常简单的查询,该查询通过使用值标识行来从数据库中删除记录(行)。要了解sqlite3的进一步用法,请使用此资源。

删除所有权的一般命令为:

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


用软件包名称替换sqlite3您的应用程序。例如。对于Chrome浏览器,软件包名称为<PKG_name>

您可以使用App Browser或OS Monitor查找应用程序的软件包名称,也可以直接参考以下问题:查看应用程序的完整软件包名称?


删除应用程序的软件包名称来自com.android.chromelocalappstate.db的更多详细信息:请注意,以上两个步骤在我的设备中完成了这项工作。由于我不希望该应用程序由于任何原因出现在更新列表中,因此我已从上述所有数据库中清除了所有详细信息。

package_verification.db删除信息的常规命令将是:

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


对于localappstate.db来说,它应该是:

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




核心被覆盖。现在,对于执行:


您可以创建脚本
使用package_verification.dbadb shell数据库,并使用SQLite软件(例如DB Browser for SQLite)
您可以使用SQLite Editor或aSQLite Manager之类的应用程序手动删除应用程序记录
使用任何终端应用程序,例如Android的Terminal Emulator-它允许使用小部件,您可以将其用作命令或脚本的快捷方式。请参阅我的答案以了解如何制作此类快捷方式
使用Tasker根据时间,应用程序或任何适合您的配置文件创建配置文件
将脚本插入启动中,尽管我没有尝试因此,请询问OP


该应用虽然不会显示在已安装的应用或更新列表中,但肯定会显示在Play商店“我的应用”下的“全部”中。我没有太多使用该存储,因此不再对它的其他设置进行测试。

另外,您可能会注意到,如果您之前在Play商店设置下未选中“可用的应用程序更新”,并且在执行了上述命令后对其进行了检查,它将触发同步和您的更改,显而易见,将会丢失。

此外,请注意Google会将所有信息保存在其服务器上。因此,迟早要更新数据库。在我的Lollipop设备中,我等待了大约24小时,但没有看到数据库中的任何更改,但是看到了YMMV。


对于非根目录设备

这是一个理论并且我不会声称它会起作用,但是您可以尝试:


强制关闭并获取Play商店的adb pull
提取备份并将所需的更改添加到数据库中。

将更改后的文件打包到一个新的备份文件中,然后将其还原到设备中。

如果您不知道要在PC上解压缩和打包ADB备份,请使用看一下Android Backup Extractor(ABE)(它需要Java Runtime Environment,并且具有adb backup的用法),它将把README.txt文件解压缩到.ab中,然后您可以使用Ark,7zip,WinRAR等存档程序将其提取。 />
您可以使用DBite for SQLite对可能在提取的内容.tar中找到的数据库进行更改。

另外,您可能会看到与Android备份相关的帖子,例如this,this和Adebar-这些都是Izzy建议的。

查看应用程序是否已从更新列表中删除。
如果您在步骤4中成功,则以无线方式运行ADB以在Android设备本身上执行步骤1-4(以某种方式),而不是使用PC -如果成功,这在Tasker中可能会非常有用。
如果您一直成功到第4步或第5步,那么您也可能会回答:如何从Play中摆脱应用程序商店更新清单? :)


编辑:

好吧,我不是唯一这样认为的人:



Android:不再想要更新Skype -非常接近,添加了脚本部分,但没有任何理由

(需要Root)供以后参考,如何在不等待的情况下更新Ingress推出。 -不够好,因为apps/com.android.vending/db/是罪魁祸首
获取应用程序的程序包名称

[WIP]没有通话声音,阻止自动更新播放服务


评论


非常彻底的回答,Firelord –如果可以的话,我会多次投票!如果时间允许,我一定会对此进行测试,然后再添加我的经验/其他提示。 //对于非root用户的设备,我将停留在步骤3。有关如何完成此操作的任何其他信息/链接?我们在这里有很长的帖子,但是看起来很复杂。对于#2,有这篇文章,以及Adebar中的ab2tar;)

– Izzy♦
2015年7月9日在16:41

@Izzy谢谢!您提到的帖子链接指向ABE(Android备份提取器)。它可以很容易地打包和拆包。您需要的只是Java Runtime Environment。 //而且我可以走得更远,因为我不喜欢留下乱七八糟的东西,但是对于任何应用程序还原,我的adb还原都会突然在设备上退出,因此我无法真正检验自己的理论。 :/

–Firelord♦
15年7月9日在17:31

糟糕,这很糟糕。您仍然可能希望在答案中的步骤2 + 3上集成到ABE的链接。当然,一旦您的设备问题解决了,我们都会很高兴看到您如何“修复松动的一端” :)

– Izzy♦
15年7月10日在10:55

@Izzy完成!好吧,我的两个设备都突然恢复退出,而第三个设备(是Micromax设备,请记住Yureka:D)决定根本不检测USB连接。似乎我们将不得不等待很多时间才能看到那些松散的端头得到解决。 :)

–Firelord♦
15年7月10日在11:14

大!我首先使用了钛合金的Scheduler,并且与Market分离,但我每天至少要运行4次,但有时还是显示Update(在我看来是极端的越野车Swype 3.0.x)。现在,我编写了一个Tasker任务,该任务每小时由Task概要文件运行一次。非常感谢:)一件事:我不得不使用Titanium sqlite3(/data/data/com.keramidas.TitaniumBackup/files/sqlite3),因为如果路径丢失会抛出此PIE错误。

–法郎
17 Mar 10 '17 at 9:27

#2 楼

我也遇到了几个应用程序的问题,特别是手电筒闪光灯应用程序,该应用程序的最新版本在Lollipop中无法很好地发挥作用,而在以前的版本中却可以。

我的解决方案过去是使用Change Droid,但如上所述,如果您打开游戏商店,它可能会返回。

当前我使用的解决方案是从Titanium运行计划的任务将应用程序与市场分离。我目前每天运行4次。它在计划的时间在后台运行,因此,当我检查Play商店中的更新时,它不在那里。

我将不得不对其进行研究,但可能/应该有一种方法在Play商店开放时执行任务...不确定。

----编辑----
有人要求提供有关TB设置的更多详细信息...

首先,您必须创建过滤器,仅选择要分离的应用程序。您可以在菜单下访问它。您将“元素”或应用添加到过滤器中,因此仅所选应用受到影响。确保没有在所有选定的内容都未应用过滤器的情况下运行分离:)



接下来,您必须在将过滤器应用于日程安排。



您可以看到,这仅是一个计划的事件毫秒,在凌晨4点。

完成后,您的计划任务将看起来像这样



您将不得不复制它并根据您希望它发生多少次来更改时间。

我将我的时间定在凌晨4点,中午8点和下午4点。似乎对我有用。

希望这使它更加清楚。如果您能解决结核病问题,那么我相信您可以解决这些问题。

克雷格

评论


我花了几天时间使用此解决方案,但完成后总会在信息栏中收到来自Titanium的消息。有点烦人,而且4个任务(在我的调度程序中)还不够,有时更新还是可以看到的。所以现在我更喜欢Firelord的命令行解决方案,它可以完全由Tasker在后台完成,并且可以正常工作:)

–法郎
17 Mar 10 '17 at 19:37

#3 楼

使用以下解决方案:


您不必依赖第三方的市场应用程序。
可以将其配置为绕过Google Play的更新通知。
您可以随时恢复应用程序“更新阻止”(允许您为将来的版本更新应用程序)。
它不会卸载或冻结您使用的应用程序。
它也可以与Gapps一起使用。

有一个名为Changelog Droid的免费应用程序(以前是免费的应用程序,现在免费提供全部功能)。通过它,您可以管理其他应用的更新(作为Google Play的中介)。

优点是您可以将应用发送到黑名单,而无需暂时或“永久”显示更新(直到您改变主意)。您还可以跟踪已卸载或从未安装但想要观察的应用程序的更新。我会在此响应的同时提供一些屏幕截图(以颜色标识不同的屏幕导航),以帮助您了解其工作原理。









唯一的缺点是,当您直接或通过此应用程序打开Play商店时,将显示所有应用程序(包括您不想更新的应用程序,因为应用过滤器的是Changelog Droid,而不是Google Play本身,



但是在Changelog Droid中,您可以使用按钮访问Google Play上的每个应用,然后分别进行升级。

抱歉:Changelog Droid当前没有一步更新所有允许的应用程序的选项,但也许开发人员最终可以实现它。

注意:我仍然没有针对您描述的场景进行测试(我已经更新/替换了Talk / Hangouts),但可以在您的情况下使用。请记住不要打开Goog​​le Play的“我的应用”视图,这样就不会触发应用的自动更新。

评论


非常感谢,弗朗西斯科!这让我想起了几年前的AppBrain Market App(因为他们自己的安装程序已关闭,所以最近没有尝试过)。那时,当他们的“快速Web安装程序”仍然有效时,您甚至可以触发过滤列表上的“全部更新” ...顺便说一句:访问“我的应用程序”不会为我触发任何更新,因为我已经变成了自动-完全关闭。猜猜我会在时间允许的情况下尝试您的解决方案;)

– Izzy♦
2013年12月22日0:30在

#4 楼

在主应用程序设置或应用程序管理器中禁用该应用程序,然后打开Play商店,该应用程序不应列出。全部更新,并在全部更新完成后重新启用应用程序。我有一个同样的问题,一个txt消息应用程序,如果我更新它,我会收到难看的广告。.这是我在
周围所做的工作

评论


尽管这可能行得通,但远非如此方便(涉及太多步骤,尤其是在涉及多个应用程序的情况下)。

– Izzy♦
15年2月13日在22:12

可以使用塔斯克自动化

– Endolith
2015年11月9日在20:05

#5 楼

我知道这是一个旧线程。而且我了解到Ti Backup曾经用于从Play商店分离应用程序。但是我也明白,这不再起作用了。对于那些感兴趣的人,我创建了一个应用程序,可以很好地完成此任务。它被称为“在Play商店中隐藏更新”,价格约为1美元。其中有一段视频展示了该应用程序的工作情况。它确实需要root用户。

评论


大卫,感谢您的努力!但是我不喜欢它的副作用在具有应用内购买商品或“我的应用”列表的应用上。同时,我习惯于总是看到我不关心的7个更新-尽管我希望Google在其应用程序中添加一个类似于AppBrain的选项:跳过给定应用程序的一个(或全部)更新。顺便说一句:感谢您的开放性(公开您的应用程序)。我可以自由添加链接-但也要提到价格。

– Izzy♦
2015年9月8日19:46



#6 楼

我为root用户找到的解决方案是,只需使用ZipSigner重新签名apk(在备份后在/data/app/或您的TitaniumBackup文件夹中找到),然后重新安装。

评论


这并非总是一种选择(某些使用“共享资源”的应用程序的签名问题),但是对于某些人来说,可以解决。

– Izzy♦
15年12月30日在17:07

你能详细说明吗?好奇。

– Drazen Bjelovuk
2015年12月30日在17:12



参见例如支持软件包签名伪造。这主要涉及预安装的应用程序以及来自同一供应商(通常是Google)的应用程序。由于我不再使用Google Playstore应用,因此不再遇到此问题所涉及的问题。

– Izzy♦
15/12/30在19:05

有趣。猜猜这一切都取决于应用程序之间签名检查的普遍性。幸运的是,到目前为止,这对我来说不是问题。

– Drazen Bjelovuk
16年1月4日,下午2:50

诚然,这种情况下的麻烦很少见,但不能完全忽略;)

– Izzy♦
16年1月4日在6:00

#7 楼

我尝试使用应用程序“权限管理器”(我认为必须扎根)。我禁用了对我不想更新的应用不重要的权限(例如,在ES File Explorer中禁用了振动权限,在Quickpic中禁用了唤醒锁)。权限管理器重新编译该应用程序,卸载原始应用程序,然后重新安装新编译的应用程序。完成此操作后,我打开了Play商店,更新提醒不见了。

评论


这意味着要处理原始的.apk文件(是的,有几种此类应用程序可用:对于自己安装的应用程序,您可能不需要root用户,但需要在系统应用程序上运行)。我认为这是一种解决方法,但这不是我要采用的方法。不管怎么说,还是要谢谢你!

– Izzy♦
15年5月26日在22:13

#8 楼

另一位候选人刚刚出现在地平线上。我尚未对其进行测试,但听起来非常有前途:StorePrefs。



要求:


根设备
/>已安装Xposed



承诺:


阻止快速更新
忽略一些更新(当有可用更新时在Playstore的“我的应用程序”中,只要长按此更新即可忽略它)



作为Xposed模块,它应该能够解决我们其他解决方案的缺陷到目前为止:


如果Play服务决定重新链接未链接的应用,则该模块应该可以采取措施。因此,不需要任何特殊的手工操作,不需要Tasker设置
无需手动摆弄SQLite数据库或adb shell

不需要辅助的“更新检查器”(一个ChangelogDroid)
无需操作的.apk文件中的文件
仅对某些用户而言是问题:在无根设备和无Xposed的设备上不起作用


不再使用Playstore应用,我无法验证-因此欢迎那些可以提供反馈的人:)

#9 楼

像Titanium Backup一样,您也可以使用3C Toolbox取消与Google Play商店的应用链接。到目前为止,这似乎是永久的。需要根。

评论


我无法再对此进行验证(摆脱了所有Google Apps),但可能与其他验证有关:“到现在为止”涵盖什么时间范围?也许3C Toolbox会持续关注并更新该设置?

– Izzy♦
16年4月21日在13:27

不确定> 5.0是否允许此更改生效。 Google Play会自动重新连接应用程序。不幸的是,唯一关闭的是手动禁用自动更新并备份所需的版本。

–谜
16-4-21在16:45