Android adb
имеет «частичную установку приложения» :
$ adb install
Android Debug Bridge version 1.0.32
...
adb install [-lrtsd] <file>
adb install-multiple [-lrtsdp] <file...>
- push this package file to the device and install it
(-l: forward lock application)
(-r: replace existing application)
(-t: allow test packages)
(-s: install application on sdcard)
(-d: allow version code downgrade)
(-p: partial application install)
Уведомление -p
" частичная установка приложения" .
Что такое частичная установка приложения?
Я предполагаю, что -p: частичная установка приложения предназначена для установки пакетов, которые являются обновлением существующего пакета, но не являются автономными сами по себе, подобно тому, как Play Store обновляет приложение, используя дельта - обновления или интеллектуальные обновления.
-p
требует, чтобы базовый пакет существовал и его имя передавалось рядом с ним, иначе он выдаст ошибку
Error: java.lang.IllegalArgumentException: Missing inherit package name
Если APK, который вы передаете, не является добавочным обновлением существующего пакета ( PACKAGE
), вы получите
Failed to finalize session
Failure [INSTALL_FAILED_INVALID_APK: Missing existing base package for PACKAGE]
У меня нет добавочного обновления, поэтому я не могу проверить свое собственное утверждение, и у меня нет других веских доказательств всего утверждения, кроме этих двух:
Комментарий в теме Issue:1134353002
Сплиты не являются обычными .apks, и их можно установить только через «adb install-multiple».
И этот фрагмент кода упоминается в исходном коде PackageInstallerSession.java .
еще {// Partial installs must be consistent with existing install
окончательное приложение ApplicationInfo = mPm.getApplicationInfo (mPackageName, 0, userId); если (приложение == ноль) { выбросить новое исключение PackageManagerException(INSTALL_FAILED_INVALID_APK
, "Missing existing base package for
" +mPackageName
); }
Альберт