我们有 Android 应用程序 1.0 并在 /system/app 中制作特殊 ROM。
现在我们已经发布了该应用的升级版本1.1,安装后,在Android设置的应用列表中版本更改为1.1。但是当我重新启动系统时,更新的版本丢失了,回到 1.0。
如何解决这个问题?有没有关于它的详细介绍?
谢谢。
我们有 Android 应用程序 1.0 并在 /system/app 中制作特殊 ROM。
现在我们已经发布了该应用的升级版本1.1,安装后,在Android设置的应用列表中版本更改为1.1。但是当我重新启动系统时,更新的版本丢失了,回到 1.0。
如何解决这个问题?有没有关于它的详细介绍?
谢谢。
你可以使用这个:
adb shell
su
mount -o remount, rw /system
cat ApplicationName.apk > /system/app/ApplicationName.apk
chmod 644 ApplicationName.apk
reboot
据我所知, pm install 只更新用户应用程序。如果您从 Eclipse 或其他 IDE 部署应用程序(据我所知,这与执行 pm install 相同),则应用程序位于 data/app 下。
现在的应用程序位置是 /data/app/com.package.name-1.apk
部署后您可以执行
adb shell
su
mount -o remount, rw /system
cat /data/app/com.package.name-1.apk > /system/app/ApplicationName.apk
chmod 644 /system/app/ApplicationName。 apk
重启,以使更改生效
cat 通常与 copy 或 cp 相同,但是当您从 /data/app/ cat 时,原始的 com.package.name-1.apk 会消失(我猜 android 会以某种方式自动处理此问题)
您可以通过在 /data/app/ 文件夹下执行 ls -al 来测试它
versionCode
在更新应用程序之前增加。
实际上,您的应用程序的最新版本安装在 /data/app 中,当设备重新启动时,设备会检查旧应用程序(v1.0)是否应该更新。但是,根据 frameworks/base/services/java/com/android/server/PackageManagerService.java 中的 scanPackageLI()
if (ps != null && !ps.codePath.equals(scanFile)) {
// The path has changed from what was last scanned... check the
// version of the new path against what we have stored to determine
// what to do.
if (pkg.mVersionCode < ps.versionCode) {
// The system package has been updated and the code path does not match
// Ignore entry. Skip it.
......
} else {
......
}
......
}
你可以发现如果versionCode相同,旧的应用程序不会更新。因此,当您想要更新旧应用程序时,您需要在您的应用程序中增加 versionCode。
PS:使用命令行用新应用替换旧应用可以满足您的需求,但我真的不认为这很好。
因为应用程序在 System/app 所以,你应该使用 push 命令
adb root
adb remount
adb shell rm /system/app/your.apk
adb push your.apk /system/app
更新它。
也许你需要先删除它。
通常,如果您将应用程序推送到系统/应用程序,然后将其安装到数据/应用程序中,则应用程序系统/应用程序仅在您重新启动设备后才能运行。以防万一,您可以在重启设备后检查数据/应用程序中是否有该应用程序。
adb shell ls /data/app
如果你找到了,你可以删除它,以确保你没有相同的应用程序:</p>
adb shell rm /data/app/your-1.apk
也许您已将应用程序安装到 /data/app 而不是 /system/app
尝试将此应用移动到 /system/app