Class AndroidDeviceUtil

java.lang.Object
com.pnfsoftware.jeb.core.units.code.android.adb.AndroidDeviceUtil

public class AndroidDeviceUtil extends Object
Useful routines when debugging Android devices.
  • Constructor Details

    • AndroidDeviceUtil

      public AndroidDeviceUtil()
  • Method Details

    • uploadFileToDeviceTemp

      public static String uploadFileToDeviceTemp(AdbWrapper adb, String name, AndroidPlatformABI platformAbi) throws IOException
      Upload a JEB Android asset file to an Android device.
      Parameters:
      adb -
      name -
      platformAbi -
      Returns:
      Throws:
      IOException
    • uploadFileToDeviceTemp

      public static String uploadFileToDeviceTemp(AdbWrapper adb, String name, AndroidPlatformABI platformAbi, String version, String extension) throws IOException
      Upload a JEB Android asset file to an Android device.
      Parameters:
      adb - mandatory
      name - mandatory
      platformAbi - optional
      version - optional
      extension - optional
      Returns:
      the path of the copied file on the target device, NOT containing platform/version/extension information
      Throws:
      IOException
    • isRootDevice

      public static boolean isRootDevice(AdbWrapper adb)
      Heuristic to determine if the device appears to be rooted - and has a copy of su installed.
      Parameters:
      adb -
      Returns:
    • executeCommandAsRoot

      public static boolean executeCommandAsRoot(AdbWrapper adb, String command) throws AdbException
      Attempt to execute a single ADB command as root, with a prior root verification.
      Throws:
      AdbException
    • executeCommandAsRoot

      public static boolean executeCommandAsRoot(AdbWrapper adb, boolean rootVerification, String command) throws AdbException
      Attempt to execute a single ADB command as root.
      Throws:
      AdbException
    • executeCommandsAsRoot

      public static boolean executeCommandsAsRoot(AdbWrapper adb, String[] commands) throws AdbException
      Attempt to execute a sequence of ADB commands as root, with a prior root verification.
      Throws:
      AdbException
    • executeCommandsAsRoot

      public static boolean executeCommandsAsRoot(AdbWrapper adb, boolean rootVerification, String[] commands) throws AdbException
      Attempt to execute a sequence of ADB commands as root.
      Throws:
      AdbException
    • pullFile

      public static boolean pullFile(AdbWrapper adb, String remotePath, String localPath)
      Attempt to pull a file from a device using a variety of methods. Ultimately, if the device is rooted, this method may resort to using super-user capabilities to download the file.
      Parameters:
      adb -
      remotePath - file path on device
      localPath - local destination path
      Returns:
      true on success
    • getSupportedABIs

      public static List<AndroidPlatformABI> getSupportedABIs(AdbWrapper adb)
      Get the ABIs supported by a device.
      Parameters:
      adb -
      Returns:
      a list of ABIs, never null, but empty on error
    • getPreferredABI

      public static AndroidPlatformABI getPreferredABI(AdbWrapper adb)
      Get the preferred ABI supported by a device.
      Parameters:
      adb -
      Returns:
      an ABI, null on error
    • getBestABIForApp

      public static AndroidPlatformABI getBestABIForApp(AdbWrapper adb, IApkUnit apk)
      Get the best ABI to run a given Android app on a given device. This method is a heuristic and may fail.
      Parameters:
      adb -
      apk -
      Returns:
      the ABI that should be selected when running the app; null on error if if no compatible ABI was found
    • getProcessesByName

      public static List<Integer> getProcessesByName(AdbWrapper adb, String processName)
      Get a list of PIDs by process name
      Parameters:
      adb -
      processName -
      Returns:
    • getAndroidApiLevel

      public static int getAndroidApiLevel(AdbWrapper adb)
      Retrieve the numerical API level (eg, 29 on Android Q) of the target.
      Parameters:
      adb -
      Returns:
      0 on error
    • isDebuggableApp

      public static boolean isDebuggableApp(AdbWrapper adb, String pname)
      Determine whether an installed app is debuggable. An app is debuggable if its manifest has the 'debuggable' attribute explicitly set to true.
      Parameters:
      adb -
      pname - application package name
      Returns: