2010-08-06 11 views

risposta

26

Il rilevamento di rooting è un gioco di gatto e topo ed è difficile effettuare il rilevamento di rooting che funzionerà su tutti i dispositivi in ​​tutti i casi.

Se hai ancora bisogno di un po 'di base radicamento rilevamento controllare il codice qui sotto:

/** 
    * Checks if the device is rooted. 
    * 
    * @return <code>true</code> if the device is rooted, <code>false</code> otherwise. 
    */ 
    public static boolean isRooted() { 

    // get from build info 
    String buildTags = android.os.Build.TAGS; 
    if (buildTags != null && buildTags.contains("test-keys")) { 
     return true; 
    } 

    // check if /system/app/Superuser.apk is present 
    try { 
     File file = new File("/system/app/Superuser.apk"); 
     if (file.exists()) { 
     return true; 
     } 
    } catch (Exception e1) { 
     // ignore 
    } 

    // try executing commands 
    return canExecuteCommand("/system/xbin/which su") 
     || canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su"); 
    } 

    // executes a command on the system 
    private static boolean canExecuteCommand(String command) { 
    boolean executedSuccesfully; 
    try { 
     Runtime.getRuntime().exec(command); 
     executedSuccesfully = true; 
    } catch (Exception e) { 
     executedSuccesfully = false; 
    } 

    return executedSuccesfully; 
    } 

Probabilmente non sempre corretto. Testato su ~ 10 dispositivi nel 2014.

+4

Vuoi dire che hai messo radici con uno strumento specifico che aggiunge Superuser.apk? Non esiste un modo programmatico garantito per determinare se un dispositivo è radicato poiché la maggior parte dei controlli potrebbe essere elusa. – dljava

+1

Ho usato questo controllo nel mio prodotto, ma recentemente il Nexus 7.1 sta segnalando false per tutte queste (nessun comando 'which' installato) e SuperSu non si sta installando nella cartella/system/app. – Graeme

+0

Forse dovresti dare un'occhiata a http://stackoverflow.com/questions/1101380/determine-if-running-on-a-rooted-device –

1

Il official licensing guide dice:

A limitation of the legacy copy-protection mechanism on Android Market is that applications using it can be installed only on compatible devices that provide a secure internal storage environment. For example, a copy-protected application cannot be downloaded from Market to a device that provides root access, and the application cannot be installed to a device's SD card.

Sembra che si potrebbe trarre vantaggio dall'utilizzo di questa eredità cop-protezione per impedire l'applicazione di essere installato su dispositivi radicate.

È possibile rilasciare una versione separata che può essere installata su dispositivi rooted con un database crittografato.

+0

Ma come possono rilevare se il dispositivo è radicato o no? Come hackbod (sviluppatore Android) menzionato, non è possibile rilevare. http://stackoverflow.com/questions/3576989/how-can-you-detect-if-the-device-is-rooted-in-the-app –

5

Se le informazioni sono sensibili, probabilmente è sufficiente crittografarle per tutti gli utenti. Altrimenti un utente potrebbe installare la tua app senza root, quindi eseguire il root e leggere il tuo database una volta che i dati sono stati scritti.

+0

Il problema è che se il contenuto è contenuto multimediale (mp3, mp4) , anche crittografato in origine, e si desidera riprodurre nel lettore multimediale, è necessario utilizzare un file temporaneo decrittografato a un certo punto, a cui è possibile accedere su un dispositivo rooted. –

Problemi correlati