doc:appunti:android:start
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
doc:appunti:android:start [2017/11/19 08:04] – [Pacchetti apk] niccolo | doc:appunti:android:start [2020/01/29 16:02] – niccolo | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== Android |
- | ===== Android memory ===== | + | |
- | + | * **[[cli_app_backup]]** | |
- | | + | * **[[bluetooth_keboard]]** |
- | * **Internal Storage** (//Archivio interno// in italiano). Mounted as read/write under ''/ | + | |
- | * **Phone Storage** (//Memoria telefono// in italiano), it is where user media (pics, music etc) are stored. When you connect your phone to your computer, this storage is accessible and you can copy files between them. | + | |
- | * **SD Card** (if any) | + | |
- | + | ||
- | Links: | + | |
- | + | ||
- | | + | |
- | | + | |
- | + | ||
- | ====== Opzioni sviluppatore e Debug USB ====== | + | |
- | + | ||
- | L'ADB ([[wp> | + | |
- | + | ||
- | * Impostazioni => Info sul telefono => Numero build (fare tap 7 volte) | + | |
- | | + | |
- | + | ||
- | In inglese: | + | |
- | + | ||
- | | + | |
- | * Settings => Developer Options => USB debugging (enable) | + | |
- | + | ||
- | Con versioni di Android più vecchie provare qualcosa del genere: | + | |
- | + | ||
- | * Impostazioni => Applicazioni => Sviluppo => Debug USB | + | |
- | * Settings => Applications => Development => USB Debugging | + | |
- | * Settings => Developer Options => USB Debugging | + | |
- | + | ||
- | ====== Rimozione programmi di sistema ====== | + | |
- | + | ||
- | Con il passare del tempo Google obbliga l' | + | |
- | + | ||
- | Per fortuna con il telefono sbloccato (ottenuti cioè i permessi di root) è possibile rimuovere anche queste componenti. Ovviamente si deve stare attenti a cosa si disinstalla, | + | |
- | + | ||
- | Il risultato è stato molto soddisfacente: | + | |
- | + | ||
- | Segue l' | + | |
- | + | ||
- | * Archiviazione contenuti protetti con DRM | + | |
- | | + | |
- | | + | |
- | * < | + | |
- | * Google Talk | + | |
- | * Google Play Books | + | |
- | * Google Play Edicola | + | |
- | * Google Play Movies | + | |
- | * Google Play Music | + | |
- | * Google+ | + | |
- | * Hangouts | + | |
- | * Movie Studio | + | |
- | * MusicFX | + | |
- | * TalkBack | + | |
- | + | ||
- | Maps e Calendar ogni tanto si lamentano se si toglie Google Play Services (compare un avviso nella barra dei messaggi), ma il funzionamento di entrambi non sembra compromesso. | + | |
- | + | ||
- | Ovviamente sul mio telefonino non uso contenuti protetti da DRM, non ci guardo i film, né acquisto libri e riviste tramite i servizi Google. | + | |
- | + | ||
- | ====== Android filesystem ====== | + | |
- | + | ||
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ^ / | + | |
- | ===== Suonerie personalizzate ===== | + | |
- | + | ||
- | Con [[http:// | + | |
- | + | ||
- | In generale le suonerie hanno un' | + | |
- | + | ||
- | Dal menu //File//, //Export// salvare in formato ogg. Il nome del file conviene averlo alla Unix way: tutto minuscolo con gli underscore invece degli spazi. Eventualmente specificare il //Track Title// con maiuscole, spazi, ecc. | + | |
- | + | ||
- | Nella SDCard creare le directory | + | |
- | + | ||
- | La scansione dei nuovi file avviene al riavvio del telefono. Per impostare i suoni accedere a // | + | |
- | + | ||
- | Pare che vengano scansionate anche le directory **Alarms**, **Notifications** e **Ringtones** contenute nella radice della sdcard interna (''/ | + | |
- | ===== Permessi read/write ===== | + | |
- | + | ||
- | In generale il filesystem **''/ | + | |
- | + | ||
- | < | + | |
- | su -mm | + | |
- | mount -o remount,rw /system | + | |
- | mount -o remount,ro /system | + | |
- | </ | + | |
- | + | ||
- | L' | + | |
- | + | ||
- | ===== Emulazione terminale ===== | + | |
- | + | ||
- | Un buon programma per l' | + | |
- | + | ||
- | ===== Password WiFi ===== | + | |
- | + | ||
- | Le password delle reti WiFi, sebbene memorizzate nel telefono e pure comunicate a Google, non sono visibili dall' | + | |
- | + | ||
- | ===== Memoria esterna (Phone Storage, SD card, ecc.) ===== | + | |
- | + | ||
- | Gran parte dello spazio utilizzabile dall' | + | |
- | + | ||
- | Quando si connette il telefono al PC tramite cavetto USB e si attiva l' | + | |
- | + | ||
- | < | + | |
- | sd 5:0:0:0: [sdc] Attached SCSI removable disk | + | |
- | sd 5:0:0:1: [sdd] Attached SCSI removable disk | + | |
- | sd 5:0:0:1: [sdd] 61407232 512-byte logical blocks: (31.4 GB/29.2 GiB) | + | |
- | sdd: sdd1 | + | |
- | sd 5:0:0:0: [sdc] 8116224 512-byte logical blocks: (4.15 GB/3.87 GiB) | + | |
- | sdc: | + | |
- | </ | + | |
- | + | ||
- | Come si vede la scheda SD è partizionata, | + | |
- | + | ||
- | In generale sul telefono le partizioni sono montate dal sistema operativo Android in **''/ | + | |
- | + | ||
- | ===== Permission denied su SD card con Android 4.4 ===== | + | |
- | + | ||
- | A partire da Android 4.4 KitKat questi storage non sono trattati nella stessa maniera: la memoria del telefono è considerata lo **storage esterno primario**, mentre la SD card è considerata lo **storage esterno secondario**, | + | |
- | + | ||
- | * A partire da **Android 4.4 KitKat** lo storage esterno **primario** e **secondario** non sono gestiti allo stesso modo. | + | |
- | * A partire da KitKat i permessi READ_EXTERNAL_STORAGE/ | + | |
- | * L' | + | |
- | + | ||
- | In genere un' | + | |
- | + | ||
- | Pare che in Android 5.0 la gestione della SD card sia migliorata, vedere l' | + | |
- | + | ||
- | Se il device è rooted, è possibile impostare gli stessi permessi di lettura/ | + | |
- | + | ||
- | <code xml> | + | |
- | < | + | |
- | <group gid=" | + | |
- | <group gid=" | + | |
- | <group gid=" | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | Riferimenti web: | + | |
- | + | ||
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[https:// | + | |
- | + | ||
- | ====== Accesso allo storage del telefono da PC ====== | + | |
- | + | ||
- | Le vecchie versioni di Android (< 4.4) esponevano il contenuto del filesystem (non tutto, solo lo storage utente) tramite il protocollo **USB Mass Storage**. Questo protocollo è supportato nativamente da quasi tutti i sistemi operativi, GNU/Linux compreso, e non richiede l' | + | |
- | + | ||
- | Per ovviare al problema sui nuovi Android viene usato il protocollo **MTP** (Media Transfer Protocol), che con GNU/Linux richiede in generale l' | + | |
- | + | ||
- | Il pacchetto Debian necessario è **[[https:// | + | |
- | + | ||
- | Per montare il primo dispositivo che risulta collegato (attenzione: | + | |
- | + | ||
- | < | + | |
- | mkdir media/ | + | |
- | jmtpfs media/ | + | |
- | ls -F media/ | + | |
- | Card/ Phone/ | + | |
- | </ | + | |
- | + | ||
- | Per lo smontaggio si usa **'' | + | |
- | + | ||
- | Oltre a questa implementazione FUSE esiste anche il pacchetto **mtp-tools** che contiene diversi esempi di programmi user-space. Sono considerati solo //esempi// perché ancora poco maturi per un uso quotidiano. Dovrebbero servire ad accedere ai vari contenuti dei dispositivi MTP (player multimediali, | + | |
- | ====== Pacchetti apk ====== | + | |
- | + | ||
- | Per la gestione da riga di comando dei pacchetti apk esiste il tool **'' | + | |
- | + | ||
- | Esiste un tool per scompattare/ | + | |
- | + | ||
- | - Scaricare l' | + | |
- | - Verificare di avere '' | + | |
- | - Creare un batch **'' | + | |
- | + | ||
- | Per estrarre il contenuto di un archivio: | + | |
- | + | ||
- | < | + | |
- | apktool d Superuser.apk | + | |
- | I: Using Apktool 2.0.0-RC2 on Superuser.apk | + | |
- | I: Loading resource table... | + | |
- | I: Loading resource table... | + | |
- | I: Decoding AndroidManifest.xml with resources... | + | |
- | I: Loading resource table from file: / | + | |
- | I: Regular manifest package... | + | |
- | I: Decoding file-resources... | + | |
- | I: Decoding values */* XMLs... | + | |
- | I: Baksmaling classes.dex... | + | |
- | Cleaning up unclosed ZipFile for archive / | + | |
- | I: Copying assets and libs... | + | |
- | I: Copying unknown files... | + | |
- | I: Copying original files... | + | |
- | </ | + | |
- | + | ||
- | Icone e immagini sono contenute nelle directory **'' | + | |
- | + | ||
- | < | + | |
- | <string name=" | + | |
- | </ | + | |
- | + | ||
- | Per la gestione dei pacchetti da riga di comando esiste **'' | + | |
- | + | ||
- | * [[http:// | + | |
- | * [[http:// | + | |
- | + | ||
- | + | ||
- | Ad esempio: | + | |
- | + | ||
- | < | + | |
- | pm install / | + | |
- | </ | + | |
- | + | ||
- | Alcuni errori riscontrati durante l' | + | |
- | + | ||
- | ^ INSTALL_FAILED_INVALID_URI | + | |
- | ^ INSTALL_FAILED_OLDER_SDK | + | |
- | ^ | Un programma cerca di installarsi con i privilegi di un altro già installato, ma non è stato firmato con la stessa chiave. | + | |
- | + | ||
- | Per rimuovere una app si usa il comando: | + | |
- | + | ||
- | < | + | |
- | pm uninstall com.android.service | + | |
- | </ | + | |
- | + | ||
- | L' | + | |
- | + | ||
- | < | + | |
- | Failure [DELETE_FAILED_INTERNAL_ERROR] | + | |
- | </ | + | |
- | + | ||
- | L' | + | |
- | + | ||
- | < | + | |
- | pm uninstall -k --user 0 com.android.service | + | |
- | </ | + | |
- | + | ||
- | In realtà questo **non disistnalla la app**, ma la rende **non disponibile** per l' | + | |
- | ====== Android Studio e i Platform Tools ====== | + | |
- | + | ||
- | **[[https:// | + | |
- | + | ||
- | Dopo aver scaricato l' | + | |
- | + | ||
- | Per avviare l' | + | |
- | + | ||
- | L' | + | |
- | + | ||
- | Ecco ad esempio come ottenere una shell interattiva su un terminale Android collegato tramite USB, sul telefono si deve aver attivato l' | + | |
- | + | ||
- | < | + | |
- | su -c " | + | |
- | # Esegue una shell interattiva sul terminale collegato via USB: | + | |
- | $HOME/ | + | |
- | </ | + | |
- | ====== Backup con adb ====== | + | |
- | + | ||
- | Col telefono collegato via USB e l' | + | |
- | + | ||
- | < | + | |
- | ./ | + | |
- | </ | + | |
- | + | ||
- | Nel backup vengono compresi: | + | |
- | + | ||
- | * Backup apk packages and expansions (obb), stored into the archive path **''/ | + | |
- | * Backup shared SD card contents | + | |
- | * Backup all installed applications, | + | |
- | + | ||
- | sul telefono compare una richiesta di conferma ed una eventuale password. Per effettuare il backup di **6 Gb** ci sono volute **quasi due ore**. | + | |
- | + | ||
- | FIXME Come si fa il restore, eventualmente selettivo? | + | |
- | + | ||
- | Da questo utilissimo post [[http:// | + | |
- | + | ||
- | Ci sono varie soluzioni per esplorare il contenuto dell' | + | |
- | + | ||
- | < | + | |
- | backupdecrypt.pl nexus-s_2014-10-23.ab nexus-s_2014-10-23.tar | + | |
- | </ | + | |
- | + | ||
- | ====== Fastboot mode ====== | + | |
- | + | ||
- | La modalita fastboot in genere non esiste sui telefonini Samsung, operazioni come il flash di nuove immagini si possono fare mettendo il telefono nella modalità Odin e usando il software Heimdall. | + | |
- | + | ||
- | Con questo comando impartito dal PC si riavvia il telefono nel programma bootloader (fastboot menu). Sul PC servono i Platform Tools dell' | + | |
- | + | ||
- | < | + | |
- | adb reboot bootloader | + | |
- | </ | + | |
- | + | ||
- | Quanto il telefono è in **modalità fastboot**, il comando adb dal PC non serve, bisogna utilizzare piuttosto il comando **'' | + | |
- | + | ||
- | < | + | |
- | ./ | + | |
- | 38353D90950E00EC | + | |
- | </ | + | |
- | + | ||
- | Queste sono alcune delle operazioni che si possono fare in modalità fastboot (eseguire sul PC il comando '' | + | |
- | + | ||
- | * **update**: reflash device from update.zip | + | |
- | * **flashall**: | + | |
- | * **flash**: scrivere un file su una partizione della flash memory. | + | |
- | * **oem unlock**: sblocco del bootloader (ATTENZIONE! Esegue un reset di fabbrica e cancella tutti i dati!). Con questa operazione sarà possibile installare (flashare) un' | + | |
- | + | ||
- | ====== System Recovery Menu ====== | + | |
- | + | ||
- | Per entrare nel menu Recovery di solito si preme una combinazione speciale di tasti durante l' | + | |
- | + | ||
- | < | + | |
- | adb reboot recovery | + | |
- | </ | + | |
- | + | ||
- | Queste alcune azioni che è possibile fare dalla System Recovery: | + | |
- | + | ||
- | * Installare un aggiornamento del sistema operativo (richiede un file firmato digitalmente). | + | |
- | * Cancellare i dati e fare un factory reset. | + | |
- | * Fare il backup o restore dei dati utente. | + | |
- | + | ||
- | In generale il System Recovery Menu fornito di fabbrica non consente alcne operazioni più potenti e pericolose, ad esempio l' | + | |
- | + | ||
- | ====== Sblocco completo di un terminale Android ====== | + | |
- | + | ||
- | In generale con un **terminale che ha il boot loader sbloccabile** (es. un terminale Google della famiglia [[..: | + | |
- | + | ||
- | - Dal modo fastboot, **sblocco del boot loader** (cancella tutti i dati ed esegue un factory reset!). | + | |
- | - Dal modo fastboot, installazione di una **Recovery personalizzata** non firmata digitalmente (es. ClockworkMod). | + | |
- | - Dalla recovery personalizzata, | + | |
- | + | ||
- | Con un terminale **non sbloccabile** la procedura varia a seconda del modello, in generale segue questi passi: | + | |
- | + | ||
- | - Trovare un modo per **ottenere i privilegi di root**. In alcuni casi ci si basa su delle vulnerabilità del sistema operativo originale e quindi è sufficiente installare una app apposita (es. [[http:// | + | |
- | - Installazione di una app per la **gesione delle ROM**, ad esempio [[http:// | + | |
- | - Si utilizza il ROM Manager per installare una **Recovery personalizzata** o intere ROM alternative (l' | + | |
- | + | ||
- | ====== Directory / | + | |
- | + | ||
- | Sembra diffusa la prassi di utilizzare la directory **''/ | + | |
- | + | ||
- | Vedere ad esempio l' | + | |
- | + | ||
- | ====== Partizioni ====== | + | |
- | + | ||
- | Questo è il tipico schema di partizioni usato da un dispositivo Android. Vedi l' | + | |
- | + | ||
- | === /boot === | + | |
- | + | ||
- | This is the partition that enables the phone to boot, as the name suggests. It includes the kernel and the ramdisk. Without this partition, the device will simply not be able to boot. Wiping this partition from recovery should only be done if absolutely required and once done, the device must NOT be rebooted before installing a new one, which can be done by installing a ROM that includes a /boot partition. | + | |
- | + | ||
- | === /system === | + | |
- | + | ||
- | This partition basically contains the entire operating system, other than the kernel and the ramdisk. This includes the Android user interface as well as all the system applications that come pre-installed on the device. Wiping this partition will remove Android from the device without rendering it unbootable, and you will still be able to put the phone into recovery or bootloader mode to install a new ROM. | + | |
- | + | ||
- | === /recovery === | + | |
- | + | ||
- | The recovery partition can be considered as an alternative boot partition that lets you boot the device into a recovery console for performing advanced recovery and maintenance operations on it. | + | |
- | + | ||
- | === /data === | + | |
- | + | ||
- | Also called userdata, the data partition contains the user’s data – this is where your contacts, messages, settings and apps that you have installed go. Wiping this partition essentially performs a factory reset on your device, restoring it to the way it was when you first booted it, or the way it was after the last official or custom ROM installation. When you perform a wipe data/ | + | |
- | + | ||
- | === /cache === | + | |
- | + | ||
- | This is the partition where Android stores frequently accessed data and app components. Wiping the cache doesn’t effect your personal data but simply gets rid of the existing data there, which gets automatically rebuilt as you continue using the device. | + | |
- | + | ||
- | === /misc === | + | |
- | + | ||
- | This partition contains miscellaneous system settings in form of on/off switches. These settings may include CID (Carrier or Region ID), USB configuration and certain hardware settings etc. This is an important partition and if it is corrupt or missing, several of the device’s features will will not function normally. | + | |
- | + | ||
- | === /sdcard === | + | |
- | + | ||
- | This is not a partition on the internal memory of the device but rather the SD card. In terms of usage, this is your storage space to use as you see fit, to store your media, documents, ROMs etc. on it. Wiping it is perfectly safe as long as you backup all the data you require from it, to your computer first. Though several user-installed apps save their data and settings on the SD card and wiping this partition will make you lose all that data. | + | |
- | + | ||
- | On devices with both an internal and an external SD card – devices like the Samsung Galaxy S and several tablets – the /sdcard partition is always used to refer to the internal SD card. For the external SD card – if present – an alternative partition is used, which differs from device to device. In case of Samsung Galaxy S series devices, it is /sdcard/sd while in many other devices, it is /sdcard2. Unlike /sdcard, no system or app data whatsoever is stored automatically on this external SD card and everything present on it has been added there by the user. You can safely wipe it after backing up any data from it that you need to save. | + | |
- | + | ||
- | ====== Ping problem ====== | + | |
- | + | ||
- | I got this problem on **Android 4.4.2** (Kinkelon G9000, kernel 3.4.67, build G9000_20140815), | + | |
- | + | ||
- | < | + | |
- | ping www.google.com | + | |
- | This version of ping should NOT run with privileges. Aborting | + | |
- | </ | + | |
- | + | ||
- | It seems that the ping executable is installed with wrong permission. The fix needs root permission and remounting ''/ | + | |
- | + | ||
- | < | + | |
- | # ls -l / | + | |
- | -rwxr-sr-x root | + | |
- | mount -o remount,rw /system | + | |
- | chmod 755 / | + | |
- | mount -o remount,ro / | + | |
- | # ls -l / | + | |
- | -rwxr-xr-x root | + | |
- | </ | + | |
- | + | ||
- | ====== OpenVPN problem ====== | + | |
- | + | ||
- | I got this problem on **Android 4.4.2** (Kinkelon G9000, kernel 3.4.67, build G9000_20140815), | + | |
- | + | ||
- | The problem is that all the traffic is routed to the VPN, routing options from the app are ignored. I opened [[http:// | + | |
- | + | ||
- | The server configuration is TLS using certificates, | + | |
- | + | ||
- | < | + | |
- | push "route 10.67.0.1" | + | |
- | push "route 192.168.3.0 255.255.255.0" | + | |
- | </ | + | |
- | + | ||
- | The client configuration does not have any route specification: | + | |
- | + | ||
- | < | + | |
- | verb 4 | + | |
- | client | + | |
- | dev tun | + | |
- | proto udp | + | |
- | remote vpnserver.rigacci.org 1194 | + | |
- | nobind | + | |
- | < | + | |
- | ... | + | |
- | </ | + | |
- | < | + | |
- | ... | + | |
- | </ | + | |
- | < | + | |
- | ... | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | After the connection is established, | + | |
- | + | ||
- | < | + | |
- | iptables -L -t mangle -n | + | |
- | ... | + | |
- | Chain st_mangle_tun0_OUTPUT (2 references) | + | |
- | target | + | |
- | MARK | + | |
- | MARK | + | |
- | MARK | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | ip rule show | + | |
- | 0: from all lookup local | + | |
- | 100: from all fwmark 0x3c lookup 60 | + | |
- | 32766: | + | |
- | 32767: | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | ip route show table 60 | + | |
- | default dev tun0 scope link | + | |
- | </ | + | |
- | + | ||
- | This means that packets that should be routed to the VPN are **mangled with mark 0x3c**, then routed via the **rounting table 60**, and then forwarded to the **tun0 device**. This is OK! | + | |
- | + | ||
- | The **problem is that every packet goes through the VPN**, this is because of two entries added into the main routing table: | + | |
- | + | ||
- | < | + | |
- | ip route show table main | + | |
- | 0.0.0.0/1 dev tun0 scope link | + | |
- | ... | + | |
- | 128.0.0.0/1 dev tun0 scope link | + | |
- | </ | + | |
- | + | ||
- | To fix the routing problem we have to run the following script (root required) on the Android device: | + | |
- | + | ||
- | <code bash> | + | |
- | # | + | |
- | / | + | |
- | / | + | |
- | </ | + | |
- | + | ||
- | Create the script into **''/ | + | |
- | + | ||
- | < | + | |
- | script-security 2 | + | |
- | up / | + | |
- | </ | + | |
- | + | ||
- | **WARNING**: | + | |
- | ====== Data network: WiFi / 3G priority ====== | + | |
- | + | ||
- | Usually, when both WiFi and 3G data connection are enabled and availables, WiFi is preferred; no preferences are exposed by the Android user interface to change this behaviour. | + | |
- | + | ||
- | Neverthless on a rooted device it is possibile to change the preferred data network, using the **'' | + | |
- | + | ||
- | < | + | |
- | # svc data | + | |
- | Control mobile data connectivity | + | |
- | + | ||
- | usage: svc data [enable|disable] | + | |
- | Turn mobile data on or off. | + | |
- | + | ||
- | svc data prefer | + | |
- | Set mobile as the preferred data network | + | |
- | + | ||
- | # svc wifi | + | |
- | Control the Wi-Fi manager | + | |
- | + | ||
- | usage: svc wifi [enable|disable] | + | |
- | Turn Wi-Fi on or off. | + | |
- | + | ||
- | svc wifi prefer | + | |
- | Set Wi-Fi as the preferred data network | + | |
- | </ | + | |
- | + | ||
- | ====== Menu Verifica ====== | + | |
- | + | ||
- | :!: **ATTENZIONE**: | + | |
- | + | ||
- | Dal tastierino di composizione telefonica digiare **%%*# | + | |
- | + | ||
- | * Informazioni telefono | + | |
- | * Informazioni batteria | + | |
- | * Statistiche di utilizzo | + | |
- | * WiFi Information | + | |
- | + | ||
- | Ci sono un sacco di informazioni utili, come il codice IMEI, lo stato del roaming, statistiche traffico PPP, ecc. | + | |
- | + | ||
- | ====== Link utili ====== | + | |
- | + | ||
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[http:// | + |
doc/appunti/android/start.txt · Last modified: 2024/08/20 10:20 by niccolo