更新 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 文件 - 还有命令 mmp
和 mmmp
来构建模块并将其推送到连接的设备。此外 adb sync
可用于同步整个图像,因此如果您更新模块,更改的文件将被推送到设备。
您也可以通过常规的 `adb push' 放置更改的文件并重启设备。
我不知道系统应用程序是否可以通过 adb install
更新,可能是的,但我认为您需要在清单文件中增加内部版本号。
我认为您无法使用 adb install -r
卸载系统应用程序,因为应用程序无法从 system
分区中删除,只能从 data
中删除。我不知道为什么你在那种情况下得到 INSTALL_FAILED_INVALID_APK,可能是因为应用程序管理器确实无法卸载基本系统 apk。
另一种方法是:
- 使用
adb push
将新apk复制到设备的sdcard
- 挂载/系统读写:
mount -o rw,remount,rw /system
- 从 /sdcard 复制你的新 .apk 到 /system/app
中的旧 .apk
- 删除旧 .apk 的 .odex 文件
- 重启设备
对于开发,您可以使用一个简单的脚本来执行此步骤。
找到了一种轻松 '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
假设我们已经下载、构建并刷新了 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 文件 - 还有命令 mmp
和 mmmp
来构建模块并将其推送到连接的设备。此外 adb sync
可用于同步整个图像,因此如果您更新模块,更改的文件将被推送到设备。
您也可以通过常规的 `adb push' 放置更改的文件并重启设备。
我不知道系统应用程序是否可以通过 adb install
更新,可能是的,但我认为您需要在清单文件中增加内部版本号。
我认为您无法使用 adb install -r
卸载系统应用程序,因为应用程序无法从 system
分区中删除,只能从 data
中删除。我不知道为什么你在那种情况下得到 INSTALL_FAILED_INVALID_APK,可能是因为应用程序管理器确实无法卸载基本系统 apk。
另一种方法是:
- 使用
adb push
将新apk复制到设备的sdcard
- 挂载/系统读写:
mount -o rw,remount,rw /system
- 从 /sdcard 复制你的新 .apk 到 /system/app 中的旧 .apk
- 删除旧 .apk 的 .odex 文件
- 重启设备
对于开发,您可以使用一个简单的脚本来执行此步骤。
找到了一种轻松 '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