我们有Android应用1.0,并在/ system / app中为特殊ROM制作。
现在我们已经发布了该应用程序的升级版本1.1,安装后,该版本在Android设置的应用程序列表中更改为1.1。但是,当我重新启动系统时,错过了更新的版本,回到了1.0。
如何解决这个问题?关于它的任何详细介绍?
感谢。
答案 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