更新 AOSP 内置系统应用

Update AOSP built-in system app

假设我们已经下载、构建并刷新了 AOSP 源代码。现在对系统应用程序进行了更改(例如更改了 packages/apps/Nfc 包中的常量)。

下一步是构建它,有两种方法可以实现:

cd packages/apps/Nfc; mm

mmm Nfc

这将创建 out/target/product//system/app/NfcNci/NfcNci.apk 文件

更新系统应用程序的正确方法是什么?

我尝试使用 adb install NfcNci.apk 但没有成功:

~/android/aosp-7.1.2-3.10-v2/out/target/product/kugo/system/app/NfcNci$ adb install NfcNci.apk
Failed to install NfcNci.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install com.android.nfcnci without first uninstalling.]
~/android/aosp-7.1.2-3.10-v2/out/target/product/kugo/system/app/NfcNci$ adb install -r NfcNci.apk
Failed to install NfcNci.apk: Failure [INSTALL_FAILED_INVALID_APK: Package couldn't be installed in /data/app/com.android.nfcnci-1: Package /data/app/com.android.nfcnci-1/base.apk code is missing]

检查 build/envsetup.sh 文件 - 还有命令 mmpmmmp 来构建模块并将其推送到连接的设备。此外 adb sync 可用于同步整个图像,因此如果您更新模块,更改的文件将被推送到设备。

您也可以通过常规的 `adb push' 放置更改的文件并重启设备。

我不知道系统应用程序是否可以通过 adb install 更新,可能是的,但我认为您需要在清单文件中增加内部版本号。

我认为您无法使用 adb install -r 卸载系统应用程序,因为应用程序无法从 system 分区中删除,只能从 data 中删除。我不知道为什么你在那种情况下得到 INSTALL_FAILED_INVALID_APK,可能是因为应用程序管理器确实无法卸载基本系统 apk。

另一种方法是:

  1. 使用adb push
  2. 将新apk复制到设备的sdcard
  3. 挂载/系统读写:mount -o rw,remount,rw /system
  4. 从 /sdcard 复制你的新 .apk 到 /system/app
  5. 中的旧 .apk
  6. 删除旧 .apk 的 .odex 文件
  7. 重启设备

对于开发,您可以使用一个简单的脚本来执行此步骤。

找到了一种轻松 're-install' 应用本身的方法(让我们以“设置”应用为例):

mmm packages/apps/Settings  # Build the module
adb root ; adb remount  # Restart adbd as root and mount /system as writable
adb push out/target/product/<device_name>/system/priv-app/Settings /system/priv-app  # Push the built files to the device

然后强制关闭并重新启动应用程序(通过从 Recents 滑动它)。无需重启设备即可进行更改

注意:根据应用程序,路径可能位于 system/app 而不是 /system/priv-app