如何升级/ system / app中的应用程序?

时间:2013-04-26 08:29:08

标签: android

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

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

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

感谢。

4 个答案:

答案 0 :(得分:2)

你可以用这个:
adb shell

mount -o remount,rw / system
cat ApplicationName.apk> /system/app/ApplicationName.apk
chmod 644 ApplicationName.apk
重启

据我所知pm安装只更新用户应用程序。 如果您从Eclipse或其他IDE部署应用程序(据我所知,与安装时相同)应用程序将在数据/应用程序下运行。

现在,应用位置为/data/app/com.package.name-1.apk

部署后你可以做到 adb shell

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 /原始com.package.name-1.apk中消失时(我猜android会以某种方式自动处理)

您可以在/ data / app / folder

下执行ls -al来测试

答案 1 :(得分: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

如果找到它,您可以删除它以确保您没有相同的应用程序:

adb shell rm /data/app/your-1.apk

答案 2 :(得分:1)

在更新应用之前增加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:使用命令行替换旧应用程序可以满足您的需求,但我真的不认为它是好的。

答案 3 :(得分:-2)

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

尝试将此应用移至/ system / app