Код ошибки -7 при попытке установить выпуск APK

Я предпринял все необходимые шаги для создания APK выпуска. (Демонстрация необходимых шагов)

Мое устройство (Nexus 7 2012) настроено для установки из неизвестных источников.

Я отправил по электронной почте APK (app-release.apk) себе и попытался открыть его из GMail, поскольку это должно сработать.

EDIT: Извиняюсь, я также должен был включить, что я удалил приложение из настроек > apps > (приложение, о котором идет речь) > "удалить".

Однако приложение сразу не загружается с помощью только следующей информации о logcat:

05-30 14:44:41.689      466-497/? W/PackageManager﹕ Package edu.osu.expandablelistviewtest1 signatures do not match the previously installed version; ignoring!
05-30 14:44:41.914      466-497/? I/art﹕ Explicit concurrent mark sweep GC freed 74971(3MB) AllocSpace objects, 22(1348KB) LOS objects, 33% free, 28MB/43MB, paused 9.752ms total 220.463ms
05-30 14:44:41.927  20704-20704/? D/InstallAppProgress﹕ Installation error code: -7
05-30 14:44:43.094  20704-20704/? I/InstallAppProgress﹕ Finished installing edu.osu.expandablelistviewtest1

Я пробовал каждую строку поиска, о которой я могу думать, и не могу найти никакой информации об ошибке -7. Посмотрев код на GitHub, мы видим следующий код:

public void handleMessage(Message msg) {
  ...
  if (msg.arg1 == PackageManager.INSTALL_SUCCEEDED) {
    ...
  } else if (msg.arg1 == PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE){
    ...
   } else {
    // Generic error handling for all other error codes.
    centerTextDrawable.setLevel(1);
    centerExplanationLabel = getExplanationFromErrorCode(msg.arg1);
    centerTextLabel = R.string.install_failed;
    mLaunchButton.setVisibility(View.INVISIBLE);
  }
  ...
  private int getExplanationFromErrorCode(int errCode) {
    Log.d(TAG, "Installation error code: " + errCode);
    switch (errCode) {
    case PackageManager.INSTALL_FAILED_INVALID_APK:
      return R.string.install_failed_invalid_apk;
    case PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES:
      return R.string.install_failed_inconsistent_certificates;
    case PackageManager.INSTALL_FAILED_OLDER_SDK:
      return R.string.install_failed_older_sdk;
    case PackageManager.INSTALL_FAILED_CPU_ABI_INCOMPATIBLE:
      return R.string.install_failed_cpu_abi_incompatible;
    default:
      return -1;
    }
  }
  ...
}

... поэтому у нас нет способа узнать, что означает "-7". (Кроме того, это не один из случаев переключения.)

Я открыт для любых идей/предложений. Спасибо.

Ответ 1

Хорошо, я чувствую себя застенчивым. В конце концов, проблема заключалась в том, что в новых версиях Android деинсталляция в том виде, как я упоминал выше, только удаляет для этого конкретного пользователя.

Ответ заключается в том, чтобы перейти к настройкам > apps > (приложение, о котором идет речь), а затем выбрать "удалить для всех пользователей" из меню "..." в правом верхнем углу.

Итак, для будущих поисковиков Google:

InstallAppProgress: Код ошибки установки: -7, очевидно, означает, что вам нужно полностью удалить предыдущую версию вашего приложения, такую ​​как предыдущие версии отладки и т.д.

Ответ 2

Константы кода ошибки для PackageInstaller определены в классе PackageManager с префиксами типа INSTALL_FAILED_.

(ссылка соответствует пересмотру кода с 25 июня 2015 года, поэтому к моменту, когда вы прочтете это, код может измениться.)