应用更新过程 -- applications 领域 和 updates 领域 和 side-loading 领域 android 相关 的问题

App update process


简体版||繁體版
2
vote

问题

中文

对我来说尚不清楚应用程序更新时会发生什么。

是新的更新应用程序只是"安装过" 旧的一个维护旧的数据和缓存吗? 在更新应用程序时实际发生的事情?

在搜索Internet中 1 和se,我发现没有有用的信息(我没有询问如何使用googleplay更新。

ps:在评论中,Andrewt和FireCelord实际上给了我有用的指针,我觉得我正在寻找围绕PackageManager和PackageInstaller的工作中的信息。


1:参见例如。 "android更新应用程序" , Android App-Update Work如何如何? Android应用程序更新过程解释了

english

Its not yet clear to me what happens when an app gets updated.

Is the new updated app simply being "installed over" the old one maintaining data and cache from the old one? What actually happens when an app is updated?

In searching internet1, and SE, i found no useful information (I am not asking about how to update using googleplay.

PS: In the comments AndrewT and Firelord actually gave me useful pointers and I feel the informations I was looking for center around the workings of PackageManager and PackageInstaller.


1: See e.g. "how does android update apps", how does android app-update work, android app-update process explained

        
     
     

回答列表

4
 
vote

很重要的是要注意Android应用程序不会以与Windows或GNU / Linux系统相同的方式安装。该应用程序完全从APK文件运行。第一次安装应用程序包括以下步骤:

  1. 将APK下载到存储。所有应用程序的APK文件将下载到同一位置。

  2. 为新应用创建用户标识。 Android中的每个应用程序都在自己的Linux用户ID中运行。这是为了安全性,并且是权限系统的工作原理。

  3. 为新应用创建数据目录。这最初是空的。

  4. 将应用程序添加到电话的已安装应用程序数据库。该数据库包括应用程序的名称(包ID),APK文件的路径,用户ID在其他内容中。

这就是它所需要的一切。所以在那之后,很容易看到如何升级它:

  1. 下载新的apk文件。这是一个新文件,与所有其他APK文件相同的位置。

  2. 检查旧的apk可以升级到新的apk。它检查它们都是由相同的键签名,以避免数据被盗,新APK不是旧版本,以及应用程序百常数最少的其他设置。如果任何检查都失败,因此旧的APK无法升级到新的APK,则升级在此时的错误停止。

  3. 干净地停止旧版本。

  4. 检查对应用程序的更改(例如新权限)并相应更新应用程序的用户ID。更新已安装应用程序的数据库,以指向新的APK文件(以及关于新应用的其他数据)。

  5. 删除旧的apk文件。

升级过程甚至不必查看数据目录。如果新版本使用不同的格式或任何内容,则这取决于应用程序来更改其数据。 (这也意味着它由应用程序可以在没有丢失数据的情况下清洁地更新旧版本。)

该过程的工作方式是通过Google Play或其他一些应用商店升级应用程序的同样的方式,或者通过单击APK文件,或使用 adb install 。无论您使用的前端,它都会通过同一个包管理器。唯一的区别是,如果您使用App Store,它还可以保留自己的版本的记录,以帮助App Developer了解其用户群,因此它可以检查未来的更新。

 

It's important to note that Android apps don't get installed in the same way as on Windows or on GNU/Linux systems. The app runs entirely from the APK file. Installing an app for the first time includes the following steps:

  1. Download the APK to the storage. All apps' APK files get downloaded to the same location.

  2. Create a user ID for the new app. Each app in Android runs in its own Linux user ID. This is for security, and is how the permissions system works.

  3. Create a data dir for the new app. This is initially empty.

  4. Add the app to the phone's database of installed apps. This database includes the name (package ID) of the app, the path to the APK file, the user ID, amongst other things.

That's all it takes. So after that, it's pretty easy to see how to upgrade it:

  1. Download the new APK file. This is a new file in the same location as all the other APK files.

  2. Check that the old APK can be upgraded to the new APK. It checks that they were both signed by the same key, to avoid data theft, and that the new APK is not an older version, and a few other settings from the app's manifsest. If any of the checks fail so the old APK can't be upgraded to the new APK, the upgrade stops with an error at this point.

  3. Stop the old version of the app cleanly.

  4. Check for changes to the app (such as new permissions) and update the app's user ID accordingly. Update the database of installed apps to point to the new APK file (and with other data about the new app).

  5. Delete the old APK file.

The upgrade process doesn't even have to look at the data directory. It's up to the app to change its data if the new version uses a different format or whatever. (This also means that it's up to the app what old versions can be updated cleanly without losing data.)

The process works the same way whether you're upgrading the app through Google Play, or some other app store, or by clicking on the APK file, or using adb install. Whichever front-end you use, it goes through the same package manager. The only difference is that if you use an app store, it probably also keeps its own record of what versions are installed, both to help the app developer understand their user base, and so it can check for future updates.

 
 
     
     

相关问题

4  如何侧载,即在AT&T手机上安装非市场应用程序?  ( How do i sideload i e install non market apps on att phones ) 
我想尝试一些我在网上找到的一些Android测试软件,但是当我尝试在设备上安装它时,我收到一条消息,表示为了安全原因禁用安装非市场应用程序。我可以绕过/禁用这种限制吗?我正在使用AT& T迷人(三星Galaxy s)与Android 2.1。 ...

3  是否可以从两个系统图像构建OTA更新?  ( Is it possible to build an ota update from two system images ) 
我不耐烦地等待有人捕获Nexus 6的Android 6.0.1 OTA更新的下载链接,以便我可以侧行它,但我一直在想知道是否可以通过使用我目前安装在我的手机上的ROM版本和新版本的副本。这可以做到这一点,如果是的话,怎么样?我看过关于Android开发人员网站的信息,但我根本不明白。 ...

23  我可以在不使用Android Market的情况下在手机上安装应用程序吗?  ( Can i install apps on phone without using the android market ) 
我有这个华为设备,没有安装的Android市场。 这是有什么工作吗?正如如何在没有Android市场的情况下安装Android应用程序? 有没有办法安装AppBrain W / O必须通过Android Market? ...

7  如何在我的Verizon Galaxy Nexus上侧载谷歌钱包?  ( How do i sideload google wallet onto my verizon galaxy nexus ) 
verizon版本的三星galaxy nexus着名的没有谷歌钱包。这是表面上的,因为verizon与自己的移动支付系统出来,并且不希望竞争乐于竞争对手的产品。 非常适合纯谷歌Android体验。 如何在我的设备上获取Google钱包?请不要生根解决方案。如果可能的话,我可以从值得信赖的源游览应用程序。 一旦安装,...

3  我可以直接在我的AT&T手机上安装非市场应用程序(没有PC)吗?  ( Can i install non market apps on my att phone directly without a pc ) 
我已经在我的AT&amp上安装了非市场应用程序使用adb,但如果我可以直接下载APK并在本地安装它,它会很好。我听说过"App(S)安装程序" 和类似名称的大约一百个变体,但它看起来像那些刚刚用于使用工作包安装程序的设备(例如,有能力运行删除的未签名应用程序)。 我扎根了手机 - 有些方式我可以用一从例如,从方面取代...

3  是否有可能在没有生根的情况下使用AT&T电话进行Android开发?  ( Is it possible to use an att phone for android development without rooting ) 
这个问题< / a>似乎可以说是root一个&amp; t电话(如samsung captivate),以便从非官方来源安装应用程序。 我的问题有点集中在一起:如果我在自己的Android应用程序上工作,我是否能够在我的AT&amp; T电话上加载它进行测试(通过Android SDK等)而无需首先生根手机? ...

5  将.apk复制到/ {system,data} / app足以安装Android应用程序?  ( Is copying an apk into system data app sufficient to install an android app ) 
如果不是,还有什么在封面下完成? 还,安装应用程序时有什么差异 来自Android Market 侧面从web下载 使用adb安装的 sideload 使用adb推送 ...

140  为什么我无法在从未知源安装应用程序时按Install按钮?  ( Why cant i press the install button when installing applications from unknown s ) 
我正在尝试签署应用程序,如下图所示。 我允许在设置中安装从未知应用操作的应用程序,但我似乎无法按Install按钮。取消按钮正常工作,通过 adb install 正确安装应用程序。什么是问题? 编辑:对于那些有这个问题的人,使用ChainFire的 c.f. lumen 将纠正它,因为应用程序使用硬件合成,并...

4  无法使用ADB SIDeload或LG G3 D855上的其他方法安装ROM  ( Unable to install rom with adb sideload or other methods on lg g3 d855 ) 
我有一个lg g3(d855)手机,我有yanogenmod 14,我想升级到lineageos。 我启动恢复,擦除所有内容并尝试使用adb sideload加载图像,但它失败了47%,其中 cannot verify whole file signature 和 cannot load volume /misc 错...

1  是通过自定义恢复闪烁的侧面进载吗?  ( Is sideloading same as flashing via custom recovery ) 
最近,我在我的Nexus 6p上侧面装载了最新的Nougat释放。这几乎与恢复如何闪烁的情况几乎相同。这让我提出了问题 - 侧面加载ZIP文件之间的手差异是闪烁的吗? ...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有