Korzystam z powiadomień Google w mojej aplikacji i do tej pory zrobiłem poniżej w manifeście:
<!-- GCM -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- This app has permission to register and receive data message. -->
<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->
<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" />
<!-- END GCM -->
Działa idealnie, dopóki nie zaktualizowałem Nexusa 7 do Androida 5.0.
Teraz, gdy próbuję zainstalować aplikację na tym urządzeniu za pomocą Eclipse, pojawia się ten błąd:
INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.myapp.permission.C2D_MESSAGE pkg = com.myapp
Nie rozumiem co jest nie tak? Działało idealnie aż do Androida 5.0.
Wiem, że używam C2D_MESSAGE
w dwóch wierszach, permission
a uses-permission
jednak mam kopiowane tego kodu z oryginalnego przewodnika Google GCM, więc musi być dobrze.
android
google-cloud-messaging
android-notifications
android-5.0-lollipop
NullPointerException
źródło
źródło
Odpowiedzi:
Znalazłem rozwiązanie, które działa dla mnie.
Na moim urządzeniu (Nexus 7) Android 5.0. Lollipop Postępuję według tych kroków.
Po odinstalowaniu aplikacji znajdziesz
App Name
w liście aplikacji naDownloaded
karcie.YourApp
się tag „NIE ZAINSTALOWANY”OptionMenu
i wybierz „Odinstaluj dla wszystkich użytkowników”Po wykonaniu tych kroków pomyślnie zainstalowałem nową aplikację i działa ona dobrze.
źródło
Usunąć
Uruchom aplikację ... Następnie ponownie dodaj zezwolenie i uruchom aplikację.
Gotowy!.
źródło
${applicationId}
zamiast naMiałem ten sam problem z niestandardowym uprawnieniem do podpisu na Androidzie-21 i rozwiązałem go, upewniając się, że robię pełną deinstalację.
Jest to przypadek skrajny, który występuje, gdy:
Przykład wiersza poleceń
Oto transkrypcja z wiersza poleceń, która pokazuje problem i sposób jego rozwiązania. W tym momencie jest zainstalowana wersja debugująca i próbuję zainstalować wersję produkcyjną podpisaną kluczem wydania:
Przykład zaćmienia
Idąc w przeciwnym kierunku (próbując zainstalować kompilację debugowania z Eclipse, gdy kompilacja wersji jest już zainstalowana), pojawia się następujące okno dialogowe:
Jeśli po prostu odpowiesz „tak”, instalacja się powiedzie.
Przykład urządzenia
Jak wskazano w innej odpowiedzi, możesz również przejść do strony informacyjnej aplikacji w ustawieniach urządzenia, kliknąć menu przepełnienia i wybrać „Odinstaluj dla wszystkich użytkowników”, aby zapobiec temu błędowi.
źródło
Rozwiązałem to bez konieczności uciekania się do odinstalowania alternatywnego apk (co za ból, prawda?). Aby pomyślnie zainstalować zarówno wersję debugowania, jak i wydanie apka, po prostu użyj wbudowanego symbolu gradle $ {applicationId} w pliku AndroidManifest.xml, aby zmodyfikować wartości android: uprawnienia w czasie kompilacji.
Fragment pliku build.gradle:
Fragment pliku AndroidStudio.xml:
Możesz sprawdzić zmodyfikowany plik AndroidManifest.xml w apk za pomocą,
aapt l -a app-debug.apk
aby upewnić się, że symbol zastępczy został poprawnie zastosowany. Jeśli używasz różnych smaków produktów, jestem pewien, że możesz zastosować odmianę tej metody, aby dopasować ją do swoich potrzeb.źródło
applicationId
w dwóch różnychproductFlavors
i zastosuję${applicationId}
efekt będzie taki sam.Usuń z pliku manifestu wszelkie odniesienia „Hard Coded” do nazwy pakietu.
(Jest to najlepsza praktyka, nawet jeśli nie używasz
productFlavors
)Na przykład jeśli manifest zawiera:
Zmieniono na:
Następnie w pliku ocen modułu ustaw odpowiednie
applicationId
:Możesz wykonać ten samouczek, aby uzyskać więcej informacji
źródło
${applicationId}
naprawiłem problem dla mnie!spróbuj odinstalować aplikację z adb:
źródło
Failure [DELETE_FAILED_INTERNAL_ERROR]
. Co może być przyczyną?Podając ten błąd, wyraźnie poda nazwę pakietu aplikacji, z powodu której odmówiono pozwolenia. A samo odinstalowanie aplikacji nie rozwiąże problemu. Aby rozwiązać problem, musimy wykonać następujący krok:
Problem rozwiązany: D
źródło
Instalując aplikację w systemie OS 5.0, pojawia się następujący komunikat:
Nie ma zduplikowanych pakietów i możemy rozwiązać ten problem ręcznie odinstalowując starą aplikację lub używając adb:
adb uninstall com.yourpackage
źródło
Żadne z powyższych nie działało dla mnie. Moja aplikacja działała dobrze w poprzednich wersjach niż Lollipop. Ale kiedy przetestowałem to na Lollipop, pojawił się powyższy błąd. Odmówił instalacji. Nie miałem zainstalowanych wcześniejszych wersji, więc wszystkie powyższe rozwiązania są nieprawidłowe w moim przypadku. Ale dzięki temu rozwiązaniu SO działa teraz dobrze. Podobnie jak większość programistów zastosowałem wprowadzający w błąd samouczek Google i dodałem uprawnienia, kopiując i wklejając w następujący sposób:
Działa to ze starszymi wersjami <Lollipop. Teraz zmieniłem na:
źródło
Plik CommonsWare ma rację, ale moim zdaniem jest to (błędny) sposób na powiedzenie: „Aplikacja zainstalowana na urządzeniu jest podpisana innym certyfikatem niż nowy, który próbujesz zainstalować” .
Jest to prawdopodobnie nowy błąd, ponieważ w przeszłości pytał, czy odinstalować aplikację z urządzenia z powodu złego certyfikatu.
Rozwiązaniem tak bolesnym, jak to by było, byłoby odinstalowanie aplikacji ręcznie.
Również to, co zrobiliśmy dla rozwoju zespołu, dodaliśmy do naszego repozytorium plik kluczy debugowania i stopniowe wykorzystanie, aby użyć go w następujący sposób:
A teraz, gdy przekazujemy urządzenia między członkami zespołu, wszyscy używamy tego samego certyfikatu debugowania, więc nie ma problemu. :)
źródło
W systemie Android 5 sprawdź ustawienia -> aplikacje. Zamiast usuwania tylko dla aktywnego użytkownika (ponieważ Android 5 może mieć wielu użytkowników, a mój telefon miał gościa), dotknij przycisku akcesoriów w prawym górnym rogu akcji / paska narzędzi i wybierz „odinstaluj dla wszystkich użytkowników”. Wygląda na to, że w Androidzie 5 po odinstalowaniu z programu uruchamiającego odinstalowujesz aplikację tylko dla aktywnego użytkownika.
Aplikacja jest nadal na urządzeniu .. To mnie olśniło, ponieważ próbowałem zainstalować wersję, nie działało, więc pomyślałem, że tak musi być, ponieważ nadal mam zainstalowaną wersję debugowania, odinstalowałem aplikację. Ale nadal nie można go zainstalować. Pierwszą wskazówką był zapis na liście aplikacji odinstalowanej aplikacji wraz z komunikatem, że została odinstalowana (obraz).
źródło
Zobacz ten link , powiedział, że będzie działać, gdy zostaną podpisane tym samym kluczem. Klucz zwolnienia i klucz debugowania nie są takie same.
Więc zrób to:
źródło
zamień poniższe wiersze:
źródło
W moim przypadku zainstalowałem kilka aplikacji o tej samej nazwie domeny w nazwie pakietu w następujący sposób.
Musiałem odinstalować wszystkie aplikacje o podobnych nazwach pakietów i ponownie je zainstalować, aby pozbyć się problemu.
Aby znaleźć wszystkie nazwy pakietów z urządzenia, użyłem następujących.
Następnie złapałem pakiety, które pasują do nazwy mojego pakietu, którego szukam.
Następnie odinstalowałem wszystkie aplikacje mające tę domenę.
Możesz także odinstalować aplikacje za pomocą
Settings
aplikacji. Idź doSettings -> Apps -> Find the app -> Uninstall
Mam nadzieję, że to pomoże komuś, kto ma taki sam problem jak ja.
źródło
Wcześniej mówiono, że na urządzeniu znajduje się aplikacja o innym podpisie. Podczas instalacji z IDE zapyta również, czy chcesz go odinstalować?
Ale myślę, że z Androida 5.0 zmienili przyczynę odinstalowania. Nie dzieje się tak, jeśli instalujesz aplikację z tym samym podpisem
źródło
Napotkałem ten sam problem z Nexusem 5 Android Lollipop 5.0.1:
W moim przypadku nie mogłem rozwiązać tego problemu,
uninstalling
ponieważ była to aplikacjaandroid app
, ale musiałem zmienićcustom permissions
nazwę mojej aplikacji,manifest
ponieważ były one takie same jak aplikacja na Androida, której nie mogłem odinstalować ani zmienić.Mam nadzieję, że to komuś pomoże!
źródło
W moim przypadku otrzymałem następujący błąd
Kiedy próbowałem zainstalować aplikację, która ma nazwę pakietu
com.abc.Secondapp
. Tutaj chodziło o to, że aplikacja z nazwą pakietucom.abc.Firstapp
została już zainstalowana w mojej aplikacji.Rozwiązałem ten błąd, odinstalowując aplikację z nazwą pakietu,
com.abc.Firstapp
a następnie instalując aplikację z nazwą pakietucom.abc.Secondapp
Mam nadzieję, że to komuś pomoże podczas testowania.
źródło
W pliku AndroidManifest.xml zmień nazwy specjalnie zadeklarowanych uprawnień, na przykład:
do tego,
com.myapprocks ta część rozwiązuje konflikt z inną aplikacją.
źródło
W moim przypadku korzystałem z biblioteki innej firmy (tj. Dostawcy), a do biblioteki dołączona jest przykładowa aplikacja, którą już zainstalowałem na swoim urządzeniu. Tak więc ta przykładowa aplikacja była teraz w konflikcie za każdym razem, gdy próbuję zainstalować własną aplikację implementującą bibliotekę. Właśnie odinstalowałem przykładową aplikację dostawcy i działa ona później.
źródło
Odinstalowałem poprzednią wersję. To zadziałało dla mnie.
źródło
Uruchomiłem ponownie telefon po odinstalowaniu aplikacji i zadziałało
źródło
Jeśli masz inny smak aplikacji, spróbuj ją najpierw odinstalować. Pomogło mi to, gdy miałem ten sam problem.
źródło