2012-10-24 17 views
6

Załóżmy, że przejąłem rozwój aplikacji na Androida, a szefowa pyta mnie, dlaczego nasza aplikacja wymaga wyświetlania określonych uprawnień użytkownikom kupującym aplikację w Android Market.Jak określić, dlaczego moja aplikacja na Androida wymaga pewnych uprawnień?

Czy są jakieś narzędzia lub triki, których mogę użyć do określenia, który kod wyzwala każde pozwolenie, więc mogę się dowiedzieć, dlaczego nasza aplikacja funkcjonalnie potrzebuje tych uprawnień? W szczególności jestem zainteresowany tymi uprawnieniami:

  • rozmowy telefoniczne - Czytaj stan telefonu i tożsamości

  • Narzędzia systemowe - pobieranie uruchomionych aplikacji - Pozwala aplikacji na pobieranie informacji o zadaniach obecnie i ostatnio uruchomionych, maj pozwalają szkodliwym aplikacjom odkrywać prywatne informacje o innych aplikacjach.

Aplikacja jest aplikacją do śledzenia GPS i nie jest jasne, dlaczego taka zgoda może być potrzebna.

Przydałaby się również informacja, dlaczego to uprawnienie może być potrzebne, nawet jeśli nie możesz mi powiedzieć, jak bezpośrednio przeanalizować kod, aby się o tym dowiedzieć.

Odpowiedz

0

Odpowiedź dla twojego szefa brzmi: "ponieważ niektóre funkcje/wywołania/metody API, których używamy w naszej aplikacji, wymagają pewnej autoryzacji, ze względów bezpieczeństwa i tak działa system Android". Jeśli chodzi o wymienione uprawnienia - musisz sprawdzić kod, aby sprawdzić, czy te uprawnienia są rzeczywiście wymagane. Read phone status and identity może oznaczać, że Twoja aplikacja próbuje uzyskać IMEI lub coś podobnego, aby jednoznacznie zidentyfikować urządzenie. Retrieve running applications - nie widzę powodu, dla którego aplikacja do śledzenia GPS by to utrzymała. Ale może używasz trzeciej strony lib/kod, który używa tego.

+0

Nie sądzę, że mówienie swojego szefa, że ​​Android aplikacje potrzebne uprawnienia * do rzeczy * naprawdę odpowiada na pytanie. Dla użytkownika końcowego zawsze ważne jest, aby wiedzieć, która funkcja wymaga uprawnień, zwłaszcza jeśli są one nieoczywiste, a szef może chcieć wiedzieć, dlaczego te uprawnienia są wymagane, aby mieć dodane do opisu aplikacji. –

+0

Obawiam się, że nie możesz odpowiedzieć w bardziej szczegółowy sposób niż nie widziałem kodu. –

+2

Chodziło mi tylko o to, że odrzucenie pytania szefa jako "Tak działa system Android" może nie być zgodne z oczekiwaniami. Sądzę, że Andrew szuka sposobu, aby dowiedzieć się, gdzie jest kod, który używa tych uprawnień (do którego adres odnosi się do odpowiedzi). –

2

Usuń uprawnienie i zobacz, gdzie nie działa aplikacja. Odpowiedź będzie na wyjściu logcat.

To nie jest idealnym rozwiązaniem, choć, ponieważ nie może wiedzieć, co trzeba zrobić w aplikacji do uruchomienia tej zgody.

Podejrzewam, że "Odczytaj stan telefonu i tożsamość" oznacza, że ​​aplikacja używa urządzenia IMEI lub podobnych informacji identyfikujących, aby jednoznacznie zidentyfikować urządzenie, aby upewnić się, że aplikacja jest uruchamiana tylko na zarejestrowanym urządzeniu. Lub może być użyty jako plik cookie do śledzenia właściciela. Poszukaj tego kodu. I usuń go, ponieważ jest to zły sposób, aby to zrobić. Jeśli chcesz zidentyfikować określone urządzenie z Androidem, użyj ANDROID_ID z klasy Settings.Secure. http://developer.android.com/reference/android/provider/Settings.Secure.html

chodzi o „pobieranie uruchomionych aplikacji”, uważam, że jedna podejrzana. Bardzo powszechnym sposobem implementacji śledzenia GPS jest uruchomienie oddzielnej usługi we własnym procesie. W ten sposób, jeśli aplikacja ulegnie awarii, usługa będzie kontynuowana i może zostać ponownie dołączona. W tym przypadku możliwe jest, że aplikacja korzysta z „pobieranie uruchomionych aplikacji”, aby zidentyfikować i zabić procesu obsługi. Ale jeśli tak, to jest to niezręczny sposób na zrobienie tego.

14

Oto w jaki sposób śledzić je w dół.

Krok 1 - Znajdź oczywistych uprawnień zadeklarowanych w AndroidManifest.xml

Zasadniczo wszystko wewnątrz <uses-permission /> np tagi:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

Krok 2 - Szukaj developer.android.com dla klas, które korzystają z tych uprawnień

Weźmy przypadek READ_PHONE_STATE, celem jest, aby dowiedzieć się, jakie pakiety wymagają tego uprawnienia. Proste wyszukiwanie w portalu dev „READ_PHONE_STATE” rozpoczyna się z naszej wyszukiwarki, szukamy klas tutaj w top 5 wyników wyszukiwania widzę następujących klas:

  • TelephonyManager
  • PhoneStateListener

Kliknij na zajęciach i uzyskać ich nazwy pakietów:

  • android.telephony.TelephonyManager
  • android.telephony.PhoneStateListener

Krok 3 zajęcia w Waszym projekcie, które importują te pakiety

Prosty grep zrobi lub Ctrl + H w Eclipse, szukaj Plik -> Zawierające tekst

Krok 4 komentarz na import i zobaczyć, co łamie

prawdopodobnymi kandydatami do dlaczego zezwolenie jest wymagane. Potwierdź daną metodę, patrząc na portal deweloperski, aby sprawdzić, czy uprawnienie rzeczywiście jest wymagane przez tę metodę.

W końcu powinieneś być w stanie powiedzieć swojemu szefowi, READ_PHONE_STATE jest wymagany, ponieważ nazywamy funkcję XYZ, która daje nam UVW.

+0

Tak, wróciłem, aby to powiedzieć. To jest poprawna odpowiedź, IMHO. –

1

Dzięki najnowszym narzędziom do kompilacji można uruchomić kontrolę lint, która podświetli wszystkie wywołania metody Android SDK wymagające uprawnień.

Zobacz ogłoszenie tutaj http://android-developers.blogspot.com/2015/07/get-your-hands-on-android-studio-13.html i dokumentacja tutaj https://developer.android.com/tools/debugging/annotations.html#permissions.

ta opiera się na Androidzie adnotacji i po pewnym czasie przyjęcie bibliotek 3rd party można zintegrować adnotacje uprawnień również

enter image description here

Powiązane problemy