2016-01-14 1 views
12

Я ввел команду ниже в CMD, и команда вернула ошибку под командой.Неисправность [INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE]

Команда:

phonegap run android --verbose --stacktrace 

Ошибка:

ERROR: Failed to launch application on device:

ERROR: Failed to install apk to device: pkg: /data/local/tmp/MainActivity-debug.apk

Failure [INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE]

+0

Его очень полезный запрос. Я искал th является . –

ответ

30

Проблема в том, что вы пытаетесь установить версию своего APK, которая МЕНЬШЕ, чем то, что уже на вашем устройстве.

Удаление обязательно устранит эту проблему.

ADB обеспечивает большую гибкость adb install -r -d <apk path>, но я не уверен, что Phonegap имеет эту функциональность.

adb install [-lrtsdg] <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) 
    (-g: grant all runtime permissions) 

Update:

Оказывается, что не было правильное сообщение об ошибке для понижения версии приложения. Infact, это нечто совершенно отдельное. Я found this link что точно объясняет ситуацию:

tl;dr You can't fool the new Android 6 permissions model by first publishing an APK with targetSdk 23 which will grant all permissions runtime and then publishing a new version with targetSdk 22 or less. You'll get an INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE error.

I was working on an app with targetSdk 23 (Android 6 Marshmallow) when it hit me that it possibly could be a security issue with the new Android permission model. Android 6 devices approves all permission on install time and then the user has to approve them whenever the app asks for the permission. What if the user installed the app - auto granting all permissions - and then it didn't ask for using them, and then afterwards the app was updated with the same permissions, but with a lower targetSdk?

I spent a couple minutes creating an app that targeted SDK level 23 and added a fine location permission (ACCESS_FINE_LOCATION). Then I installed and ran the app. The app didn't ask for permission to access the location manager. Then I set the SDK level to 22 and tried to install the app. Luckily it wasn't able to install. I got an error saying Failure [INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE].

+0

Где находится ** - r **? Я не могу найти его в [андроидной отладочной документации моста developer.android.com] (http://developer.android.com/tools/help/adb.html). Не могли бы вы также сказать, что вы имеете в виду с «версией». Это немного расплывчато. – SPottuit

+0

Я обновил свой вопрос, чтобы отразить значение параметра. По версии я имею в виду вашу версию приложения. Если у вас установлено приложение версии 3 и попытка установить приложение версии 2. Он не позволит его без флага деградации hte. – Knossos

+0

Я проверил вашу теорию. Я изменил версию приложения с 2 на 1, и у меня возникла другая ошибка: '[INSTALL_FAILED_VERSION_DOWNGRADE]', поэтому я смущен. Эта ошибка означает то же самое, что и у меня раньше: '[INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE]'? Мне любопытно, какая разница между этими ошибками. – SPottuit

7

Решение:

мне удалось избавиться от ошибки при удалении мое приложение с устройства.

Причина:

Что, вероятно, причиной ошибки является то, что я обновил свой Android SDK с SDK Manager.

0

Я получил эту ошибку в VS2015 с помощью TACO и отладки для Android с использованием определенного профиля эмулятора:. VS Emulator 10,1" Зефир (6.0.0) XHDPI Tablet Проект Я был работа была установлена ​​как приложение в этом конкретном профиле, потому что я использовал его для отладки. Я решил проблему, удалив и переустановив этот конкретный профиль: Tools -> Visual Studio Emulator for Android -> Удалить профиль. содержащее мое приложение, и ошибка исчезла.Это эмулятор VS эквивалент удаления приложения с удаленного устройства, я думаю.