I serio uważasz, że nie da się tego zrobić tak, aby użytkownik nie był świadomy do czego dostęp ma aplikacja?
Programowałeś kiedyś na Androida? Wpisując w plik AndroidManifest.xml prosisz system o sieć internet jednym poleceniem. To się wyświetla później na liście na pomarańczowo podczas instalacji.
Dalej to już aplikacja decyduje co będzie wysyłała. Jeżeli tylko jeszcze dopiszę, że chcę mieć do dyspozycji kartę SD to mogę ci całą jej zawartość wysłać do siebie, nawet całe 8GB czy 16GB.
Jednym ruchem można ukraść dane jak sobie robiłeś zdjęcia z rozebraną panienką :-)
Wystarczą dwie linijki w tym AndroidManifest.xml :
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
Każda aplikacja ma INTERNET i EXTERNAL STORAGE włączone.
Dalej to parę linijek kodu w javie i po wszystkim.
Ja pracuję nad bezpieczeństwem sieciowym ale wielu z tego korzysta żeby zbierać dane.
W swoich programach czyszczę zmienne po ich uzyciu, wpisuję albo zero albo liczby losowe, szczególnie zaalokowane tablice czyszczę aby po zwolnieniu pamieci przez aplikację inny proces nie mógł robić dump-a niezainicjowanego ramu.
Przy wychodzeniu z programu zabijam go w kodzie javy ale zanim wykonam samozabicie to jeszcze raz nadpisuję zmienne i miejsca po hasłach, wpisuję w edytowalne komponenty jakieś stringi aby ich zawartość nie pozostała w ramie.
Nie zezwalam aplikacji na wielokrotne uruchamianie się.
Robię to z myślą o tych co będą używali mojego programu.
W związku z tym trzeba mieć możliwość kilowania i odinstalowywania czego się chce.