2

我们有 Android 应用程序 1.0 并在 /system/app 中制作特殊 ROM。

现在我们已经发布了该应用的升级版本1.1,安装后,在Android设置的应用列表中版本更改为1.1。但是当我重新启动系统时,更新的版本丢失了,回到 1.0。

如何解决这个问题?有没有关于它的详细介绍?

谢谢。

4

4 回答 4

2

你可以使用这个:
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 来测试它

于 2013-12-20T07:03:42.087 回答
2

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:使用命令行用新应用替换旧应用可以满足您的需求,但我真的不认为这很好。

于 2014-09-18T11:16:13.327 回答
1

因为应用程序在 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
于 2013-04-26T08:35:24.763 回答
-2

也许您已将应用程序安装到 /data/app 而不是 /system/app

尝试将此应用移动到 /system/app

于 2013-04-26T08:35:18.533 回答