Ręczna instalacja zaktualizowanego pliku APK kończy się niepowodzeniem i wyświetlany jest komunikat „Podpisy nie pasują do poprzednio zainstalowanej wersji”

81

Stworzyłem głupią aplikację, by podzielić się nią z kilkoma znajomymi. Nie ma potrzeby umieszczania go w sklepie z aplikacjami.

Zbudowałem pierwszy apk(podpisany), załadowałem go na serwer WWW i wszystko działało dobrze.

Pojawił się mały problem, naprawiłem go, przebudowałem, podpisałem tym samym magazynem kluczy i ponownie załadowałem. Wygląda na to, że nie mogę zainstalować z nowego apk. Debugger mówi mi:

signatures do not match the previously installed version

Dlatego odinstalowałem starą wersję, otwierając szufladę aplikacji i przeciągając ją na przycisk „Odinstaluj”. Po otwarciu „Ustawienia -> Aplikacje” nigdzie go nie widzę. Nie widzę żadnych śladów aplikacji na moim urządzeniu.

Mimo to nadal otrzymuję powyższy komunikat o błędzie.

Czy jest możliwe, że jakieś informacje nadal pozostają gdzieś na urządzeniu? Czy jest jakiś sposób, żebym mógł to zweryfikować?

exhuma
źródło
1
powiązany stackoverflow.com/questions/8137962/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

169

Tak Jest to możliwe, jeśli w jakiś sposób Twoja stara aplikacja nie zostanie usunięta w 100% lub jej dane nie zostaną usunięte.

Próbować:

adb uninstall "com.yourapp.yourapp"

Jeśli nie wiesz dokładnie, co wstawić jako zamiennik dla „com.yourapp.yourapp”, po prostu otwierasz Android Studio, uruchamiasz aplikację, gdy jest połączona z urządzeniem, a następnie przeglądasz okno debugowania.

To mówi:

 Waiting for device.
 Target device: samsung-sm_t531-xxxxxxxxx
 Uploading file
 local path: C:\Users\myapp\app\build\outputs\apk\myapp.apk
 remote path: /data/local/tmp/com.myapp.myapp
 Installing com.myapp.myapp
 DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.myapp.myapp"
 pkg: /data/local/tmp/com.myapp.myapp
 Success

com.myapp.myapp w tym przypadku to nazwa pakietu, którego należy użyć do odinstalowania.

Ehsan
źródło
1
To był rzeczywiście problem. Raz wdrożyłem go na telefonie bezpośrednio z Android Studio. Wygląda na to, że ta wersja nie została poprawnie usunięta. Ostatnie pytanie: czy można to zrobić w Android Studio? Lub uruchom adb bezpośrednio z tego miejsca?
exhuma
Tak, po prostu spróbuj się nauczyć, jak wykonywać polecenia powłoki z aplikacji na Androida. Ten wątek jest dobrym punktem wyjścia: stackoverflow.com/questions/20932102/…
Ehsan
nie nie nie. Nie uruchamiam poleceń z mojej aplikacji;) Zastanawiałem się, czy mogę uruchomić adbbezpośrednio z "Android Studio".
exhuma
2
Jest to dobre, gdy jesteś programistą. Ale w przypadku każdego użytkownika końcowego, jeśli wystąpi ten sam problem, musisz postępować zgodnie: Problem polegał na tym, że w nowszych wersjach Androida odinstalowywanie w pewien sposób odinstalowuje tylko dla tego konkretnego użytkownika. Odpowiedzią jest przejście do ustawień> aplikacje> Przejdź do konkretnej aplikacji, a następnie wybierz „Odinstaluj dla wszystkich użytkowników” z pozycji menu „...” w prawym górnym rogu.
AnkitRox
Zdarzyło mi się to, ponieważ zmieniłem nazwę pakietu. odinstalowanie
załatwiło sprawę
23

Miałem ten sam problem i adb uninstallrozwiązanie nie działało dla mnie.

Co zadziałało

  • Na swoim urządzeniu przejdź do Ustawienia-> Aplikacje
  • Wybierz swoją aplikację, a następnie w menu wybierz „Odinstaluj dla wszystkich użytkowników”

Nawet gdybym wcześniej odinstalował aplikację, nadal była na liście.

Julien
źródło
Tak, może się to również zdarzyć, jeśli masz wiele kont użytkowników na swoim urządzeniu, a aplikacja jest zainstalowana na więcej niż jednym. Jeśli odinstalujesz go dla jednego użytkownika, zostanie on „odłączony” tylko od tego konta. Ale pozostaje na dysku. Zostanie całkowicie usunięty dopiero po odinstalowaniu go przez każdego użytkownika.
exhuma
1
„Odinstaluj dla wszystkich użytkowników” działał idealnie. Usunięto wszystkich innych użytkowników)))
Inoy
widzę tylko „odinstaluj”, a nie „odinstaluj dla wszystkich użytkowników” za pomocą emulatora piksela 3 29
Julie Pixie
6

Dla mnie, jeśli aplikacja ma być dystrybuowana, adbrozwiązanie nie jest możliwe: nie możesz poprosić znajomego o zainstalowanie zestawu SDK dla systemu Android na swoim komputerze!

Aby to zrobić, należy edytować AndroidManifest.xmli zwiększyć android:versionCodeatrybut w <manifest>tagu (który jest elementem głównym).

Spowoduje to zaktualizowanie zainstalowanej aplikacji

Greg Berger
źródło
1
Problem był w rzeczywistości spowodowany tym, że zainstalowałem aplikację na urządzeniu za pośrednictwem Android Studio podczas tworzenia. Przebudowanie nowego pakietu APK i jego dystrybucja było w porządku dla wszystkich oprócz mnie. Więc rozwiązanie adb było OK.
exhuma
4

Jeśli widzisz to podczas przeprowadzania testów połączonych, pamiętaj o dołączeniu .test podczas odinstalowywania przez adb, ponieważ odinstalowanie przez aplikację -> ustawienia nie usuwają pakietu testowego

adb uninstall your.broken.package.test

jeśli po prostu odinstalujesz przez

adb uninstall your.broken.package

Twój pakiet testowy nadal tam będzie. To było tylko coś, co zauważyłem podczas korzystania z wiersza poleceń gradle, nie napotkałem tego problemu w Android Studio

Joe Maher
źródło
3

Odinstaluj starą aplikację z telefonu lub emulatora i spróbuj ponownie uruchomić.

irfan AYDIN
źródło
To nie jest odpowiedź. SO stwierdził, że już tego próbował, a problem nadal istnieje.
BenRoob
1

Otrzymałem ten błąd podczas próby zainstalowania wersji podczas podpisywania jej certyfikatu.

naprawione za pomocą zadania: app Gradle uninstallRelease, a następnie ponownie zainstalujRelease

EF5
źródło
0

Dla użytkowników Unity, którzy przychodzą na to pytanie, najlepszą odpowiedzią jest rzeczywiście ta powyżej autorstwa @Ehsan

adb uninstall "com.yourapp.yourapp"

Zainstalowałem już poprzednią wersję na moim urządzeniu z Androidem, a następnie wybrałem Development Buildw Unity> Ustawienia kompilacji, co spowodowało, że APK używał innego podpisu. Jeśli instalujesz przez GUI Androida, w rzeczywistości nie usuwa wszystkiego, więc musisz użyć ADB.

ow3n
źródło