code: def install(self, target, install_dir, install_deps=False):
      install_dir = os.path.abspath(install_dir)
      sn = self._device_id
  
      execute("adb -s %s shell mkdir -p %s" % (sn, install_dir))
      if os.path.isdir(target.path):
          execute(
              "adb -s %s push %s/* %s" % (sn, target.path, install_dir),
              False,
          )
      else:
          execute(
              "adb -s %s push %s %s" % (sn, target.path, install_dir),
              False,
          )
  
      for lib in target.libs:
          execute(
              "adb -s %s push %s %s" % (sn, lib, install_dir), False
          )
  
      device_target = copy.deepcopy(target)
      device_target.path = "%s/%s" % (
          install_dir,
          os.path.basename(target.path),
      )
      device_target.libs = [
          "%s/%s" % (install_dir, os.path.basename(lib))
          for lib in target.libs
      ]
      device_target.envs.append("LD_LIBRARY_PATH=%s" % install_dir)
  
      if install_deps:
          self.install_common_libs_for_target(target, install_dir)
  
      return device_target
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import copy
  import os
  import re
  import subprocess
  import random
  import tempfile
  from utils import util
label_desc: Use image node_id 3 for calling the AndroidDevice obj's underlying member method code with example usage: obj.install(target, install_dir, install_deps) and returns: device_target