2013-04-26 161 views
2

我们已经安装了Android应用程序1.0,并将其制作在专用ROM的/ system/app中。如何升级/系统/应用程序中的应用程序?

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

如何解决此问题?有关它的任何详细介绍?

谢谢。

回答

-2

也许你有你的应用程序安装到/ data/app中不是/ system/app中

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

+0

如何移动它?我用adb install来安装它 – brucenan 2013-04-26 08:37:23

1

,因为应用程序是在系统/应用程序,所以,你应该使用推送命令

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 
+0

其实我用adb push来安装它 – brucenan 2013-04-26 08:36:50

+0

该应用程序有自动更新功能,所以我不能先删除它。我们使用pm -r xx.apk替换安装所有下载的新应用程序版本。 – brucenan 2013-04-26 08:41:44

+0

我不知道pm命令是什么。但我可以确保adb install -r只能暂时替换应用程序。你必须使用adb shell rm和adb push来更新系统/应用程序中的应用程序 – buptcoder 2013-04-26 08:46:55

2

您可以使用此:
亚行外壳

安装-o remount,rw/system
cat ApplicationName.apk> /system/app/ApplicationName.apk
chmod 644 ApplicationName.apk
重新启动

据我所知pm安装只更新用户应用程序。 如果您正在从Eclipse或从其他IDE部署应用程序(就我所知,与下载安装相同),该应用程序将位于data/app下。

的应用程序现在的位置是/data/app/com.package.name-1.apk

的部署,你可以做
亚行外壳

安装邻重新装载,RW /系统后
猫/data/app/com.package.name-1.apk> /system/app/ApplicationName.apk
搭配chmod 644 /system/app/ApplicationName.apk
重新启动,以使更改生效

Cat通常与复制或cp相同,但是当您从/ data/app /原始com.package.name-1中捕获时。APK消失(我猜机器人自动处理这个不知何故)

您可以通过执行LS -al当在/数据/应用程序/文件夹

0

增加versionCode更新您的应用程序之前进行测试。

实际上,最新版本的应用安装在/ data/app中,当设备重新启动时,设备将检查旧应用(v1.0)是否应该更新。然而,根据scanPackageLI()的框架/基/服务/ JAVA/COM /安卓/服务器/ PackageManagerService.java

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

+0

+1我不知道为什么这个答案是downvoted,但它是带领提问者走向正确的方向。如果安装在/ system/app中的应用程序已更新,则它将具有ApplicationInfo.FLAG_UPDATED_SYSTEM_APP,但是如果您有两个apks,一个在/ system/app中,另一个在/ data/app中,并且它们具有相同的版本代码,或者in/data/app版本号较低,Android会自动删除/ data/app中的apk – Ben 2016-06-05 22:04:04