Exemple #1
0
  /**
   * Updates an existing Android project based on command-line parameters
   *
   * @param library whether the project is a library project.
   */
  private void updateProject(boolean library) {
    // get the target and try to resolve it.
    IAndroidTarget target = null;
    String targetStr = mSdkCommandLine.getParamTargetId();
    // For "update project" the target parameter is optional so having null is acceptable.
    // However if there's a value, it must be valid.
    if (targetStr != null) {
      IAndroidTarget[] targets = mSdkManager.getTargets();
      int targetId = resolveTargetName(targetStr);
      if (targetId == INVALID_TARGET_ID || targetId > targets.length) {
        errorAndExit(
            "Target id '%1$s' is not valid. Use '%2$s list targets' to get the target ids.",
            targetStr, SdkConstants.androidCmdName());
      }
      target = targets[targetId - 1]; // target id is 1-based
    }

    ProjectCreator creator = getProjectCreator();

    String projectDir = getProjectLocation(mSdkCommandLine.getParamLocationPath());

    String libraryPath =
        library ? null : mSdkCommandLine.getParamProjectLibrary(SdkCommandLine.OBJECT_PROJECT);

    creator.updateProject(projectDir, target, mSdkCommandLine.getParamName(), libraryPath);

    if (library == false) {
      boolean doSubProjects = mSdkCommandLine.getParamSubProject();
      boolean couldHaveDone = false;

      // If there are any sub-folders with a manifest, try to update them as projects
      // too. This will take care of updating any underlying test project even if the
      // user changed the folder name.
      File[] files = new File(projectDir).listFiles();
      if (files != null) {
        for (File dir : files) {
          if (dir.isDirectory() && new File(dir, SdkConstants.FN_ANDROID_MANIFEST_XML).isFile()) {
            if (doSubProjects) {
              creator.updateProject(
                  dir.getPath(), target, mSdkCommandLine.getParamName(), null /*libraryPath*/);
            } else {
              couldHaveDone = true;
            }
          }
        }
      }

      if (couldHaveDone) {
        mSdkLog.printf(
            "It seems that there are sub-projects. If you want to update them\nplease use the --%1$s parameter.\n",
            SdkCommandLine.KEY_SUBPROJECTS);
      }
    }
  }
Exemple #2
0
  /**
   * Init the application by making sure the SDK path is available and doing basic parsing of the
   * SDK.
   */
  private void init() {
    mSdkCommandLine = new SdkCommandLine(mSdkLog);

    // We get passed a property for the tools dir
    String toolsDirProp = System.getProperty(TOOLSDIR);
    if (toolsDirProp == null) {
      // for debugging, it's easier to override using the process environment
      toolsDirProp = System.getenv(TOOLSDIR);
    }

    if (toolsDirProp != null) {
      // got back a level for the SDK folder
      File tools;
      if (toolsDirProp.length() > 0) {
        tools = new File(toolsDirProp);
        mOsSdkFolder = tools.getParent();
      } else {
        try {
          tools = new File(".").getCanonicalFile();
          mOsSdkFolder = tools.getParent();
        } catch (IOException e) {
          // Will print an error below since mSdkFolder is not defined
        }
      }
    }

    if (mOsSdkFolder == null) {
      errorAndExit(
          "The tools directory property is not set, please make sure you are executing %1$s",
          SdkConstants.androidCmdName());
    }

    // We might get passed a property for the working directory
    // Either it is a valid directory and mWorkDir is set to it's absolute canonical value
    // or mWorkDir remains null.
    String workDirProp = System.getProperty(WORKDIR);
    if (workDirProp == null) {
      workDirProp = System.getenv(WORKDIR);
    }
    if (workDirProp != null) {
      // This should be a valid directory
      mWorkDir = new File(workDirProp);
      try {
        mWorkDir = mWorkDir.getCanonicalFile().getAbsoluteFile();
      } catch (IOException e) {
        mWorkDir = null;
      }
      if (mWorkDir == null || !mWorkDir.isDirectory()) {
        errorAndExit("The working directory does not seem to be valid: '%1$s", workDirProp);
      }
    }
  }
  /** Creates the icon of the window shell. */
  private void setWindowImage(Shell androidSdkUpdater) {
    String imageName = "android_icon_16.png"; // $NON-NLS-1$
    if (SdkConstants.currentPlatform() == SdkConstants.PLATFORM_DARWIN) {
      imageName = "android_icon_128.png"; // $NON-NLS-1$
    }

    if (mUpdaterData != null) {
      ImageFactory imgFactory = mUpdaterData.getImageFactory();
      if (imgFactory != null) {
        mAndroidSdkUpdater.setImage(imgFactory.getImageByName(imageName));
      }
    }
  }
Exemple #4
0
  /** Creates a new Android project based on command-line parameters */
  private void createProject(boolean library) {
    String directObject =
        library ? SdkCommandLine.OBJECT_LIB_PROJECT : SdkCommandLine.OBJECT_PROJECT;

    // get the target and try to resolve it.
    int targetId = resolveTargetName(mSdkCommandLine.getParamTargetId());
    IAndroidTarget[] targets = mSdkManager.getTargets();
    if (targetId == INVALID_TARGET_ID || targetId > targets.length) {
      errorAndExit(
          "Target id is not valid. Use '%s list targets' to get the target ids.",
          SdkConstants.androidCmdName());
    }
    IAndroidTarget target = targets[targetId - 1]; // target id is 1-based

    ProjectCreator creator = getProjectCreator();

    String projectDir = getProjectLocation(mSdkCommandLine.getParamLocationPath());

    String projectName = mSdkCommandLine.getParamName();
    String packageName = mSdkCommandLine.getParamProjectPackage(directObject);
    String activityName = null;
    if (library == false) {
      activityName = mSdkCommandLine.getParamProjectActivity();
    }

    if (projectName != null && !ProjectCreator.RE_PROJECT_NAME.matcher(projectName).matches()) {
      errorAndExit(
          "Project name '%1$s' contains invalid characters.\nAllowed characters are: %2$s",
          projectName, ProjectCreator.CHARS_PROJECT_NAME);
      return;
    }

    if (activityName != null && !ProjectCreator.RE_ACTIVITY_NAME.matcher(activityName).matches()) {
      errorAndExit(
          "Activity name '%1$s' contains invalid characters.\nAllowed characters are: %2$s",
          activityName, ProjectCreator.CHARS_ACTIVITY_NAME);
      return;
    }

    if (packageName != null && !ProjectCreator.RE_PACKAGE_NAME.matcher(packageName).matches()) {
      errorAndExit(
          "Package name '%1$s' contains invalid characters.\n"
              + "A package name must be constitued of two Java identifiers.\n"
              + "Each identifier allowed characters are: %2$s",
          packageName, ProjectCreator.CHARS_PACKAGE_NAME);
      return;
    }

    creator.createProject(
        projectDir, projectName, packageName, activityName, target, library, null /*pathToMain*/);
  }
  /** The tool package executes tools/lib/post_tools_install[.bat|.sh] {@inheritDoc} */
  @Override
  public void postInstallHook(Archive archive, ITaskMonitor monitor, File installFolder) {
    super.postInstallHook(archive, monitor, installFolder);

    if (installFolder == null) {
      return;
    }

    File libDir = new File(installFolder, SdkConstants.FD_LIB);
    if (!libDir.isDirectory()) {
      return;
    }

    String scriptName = "post_tools_install"; // $NON-NLS-1$
    String shell = ""; // $NON-NLS-1$
    if (SdkConstants.currentPlatform() == SdkConstants.PLATFORM_WINDOWS) {
      shell = "cmd.exe /c "; // $NON-NLS-1$
      scriptName += ".bat"; // $NON-NLS-1$
    } else {
      scriptName += ".sh"; // $NON-NLS-1$
    }

    File scriptFile = new File(libDir, scriptName);
    if (!scriptFile.isFile()) {
      return;
    }

    Process proc;
    int status = -1;

    try {
      proc =
          Runtime.getRuntime()
              .exec(
                  shell + scriptName, // command
                  null, // environment
                  libDir); // working dir

      status = grabProcessOutput(proc, monitor, scriptName);

    } catch (Exception e) {
      monitor.logError("Exception: %s", e.toString());
    }

    if (status != 0) {
      monitor.logError("Failed to execute %s", scriptName);
      return;
    }
  }
Exemple #6
0
  /** Creates a new AVD. This is a text based creation with command line prompt. */
  private void createAvd() {
    // find a matching target
    int targetId = resolveTargetName(mSdkCommandLine.getParamTargetId());
    IAndroidTarget[] targets = mSdkManager.getTargets();

    if (targetId == INVALID_TARGET_ID || targetId > targets.length) {
      errorAndExit(
          "Target id is not valid. Use '%s list targets' to get the target ids.",
          SdkConstants.androidCmdName());
    }

    IAndroidTarget target = targets[targetId - 1]; // target id is 1-based

    try {
      boolean removePrevious = mSdkCommandLine.getFlagForce();
      AvdManager avdManager = new AvdManager(mSdkManager, mSdkLog);

      String avdName = mSdkCommandLine.getParamName();

      if (!AvdManager.RE_AVD_NAME.matcher(avdName).matches()) {
        errorAndExit(
            "AVD name '%1$s' contains invalid characters.\nAllowed characters are: %2$s",
            avdName, AvdManager.CHARS_AVD_NAME);
        return;
      }

      AvdInfo info = avdManager.getAvd(avdName, false /*validAvdOnly*/);
      if (info != null) {
        if (removePrevious) {
          mSdkLog.warning(
              "Android Virtual Device '%s' already exists and will be replaced.", avdName);
        } else {
          errorAndExit(
              "Android Virtual Device '%s' already exists.\n"
                  + "Use --force if you want to replace it.",
              avdName);
          return;
        }
      }

      String paramFolderPath = mSdkCommandLine.getParamLocationPath();
      File avdFolder = null;
      if (paramFolderPath != null) {
        avdFolder = new File(paramFolderPath);
      } else {
        avdFolder = AvdManager.AvdInfo.getAvdFolder(avdName);
      }

      // Validate skin is either default (empty) or NNNxMMM or a valid skin name.
      Map<String, String> skinHardwareConfig = null;
      String skin = mSdkCommandLine.getParamSkin();
      if (skin != null && skin.length() == 0) {
        skin = null;
      }

      if (skin != null && target != null) {
        boolean valid = false;
        // Is it a know skin name for this target?
        for (String s : target.getSkins()) {
          if (skin.equalsIgnoreCase(s)) {
            skin = s; // Make skin names case-insensitive.
            valid = true;

            // get the hardware properties for this skin
            File skinFolder = avdManager.getSkinPath(skin, target);
            FileWrapper skinHardwareFile = new FileWrapper(skinFolder, AvdManager.HARDWARE_INI);
            if (skinHardwareFile.isFile()) {
              skinHardwareConfig = ProjectProperties.parsePropertyFile(skinHardwareFile, mSdkLog);
            }
            break;
          }
        }

        // Is it NNNxMMM?
        if (!valid) {
          valid = AvdManager.NUMERIC_SKIN_SIZE.matcher(skin).matches();
        }

        if (!valid) {
          displaySkinList(target, "Valid skins: ");
          errorAndExit("'%s' is not a valid skin name or size (NNNxMMM)", skin);
          return;
        }
      }

      Map<String, String> hardwareConfig = null;
      if (target != null && target.isPlatform()) {
        try {
          hardwareConfig = promptForHardware(target, skinHardwareConfig);
        } catch (IOException e) {
          errorAndExit(e.getMessage());
        }
      }

      @SuppressWarnings("unused") // oldAvdInfo is never read, yet useful for debugging
      AvdInfo oldAvdInfo = null;
      if (removePrevious) {
        oldAvdInfo = avdManager.getAvd(avdName, false /*validAvdOnly*/);
      }

      @SuppressWarnings("unused") // newAvdInfo is never read, yet useful for debugging
      AvdInfo newAvdInfo =
          avdManager.createAvd(
              avdFolder,
              avdName,
              target,
              skin,
              mSdkCommandLine.getParamSdCard(),
              hardwareConfig,
              removePrevious,
              mSdkCommandLine.getFlagSnapshot(),
              mSdkLog);

    } catch (AndroidLocationException e) {
      errorAndExit(e.getMessage());
    }
  }