/**
   * Extracts the package name from an apk file.
   *
   * @param apkFile apk file to extract package name from.
   * @return the package name from inside the apk file.
   */
  protected String extractPackageNameFromApk(File apkFile) throws MojoExecutionException {
    CommandExecutor executor = CommandExecutor.Factory.createDefaultCommmandExecutor();
    executor.setLogger(this.getLog());
    executor.setCaptureStdOut(true);
    executor.setCaptureStdErr(true);

    AaptCommandBuilder commandBuilder =
        AaptCommandBuilder.dump(getLog())
            .xmlTree()
            .setPathToApk(apkFile.getAbsolutePath())
            .addAssetFile("AndroidManifest.xml");

    getLog().info(getAndroidSdk().getAaptPath() + " " + commandBuilder.toString());
    try {
      executor.executeCommand(getAndroidSdk().getAaptPath(), commandBuilder.build(), false);
      final String xmlTree = executor.getStandardOut();
      return extractPackageNameFromAndroidManifestXmlTree(xmlTree);
    } catch (ExecutionException e) {
      throw new MojoExecutionException(
          "Error while trying to figure out package name from inside apk file " + apkFile);
    } finally {
      String errout = executor.getStandardError();
      if ((errout != null) && (errout.trim().length() > 0)) {
        getLog().error(errout);
      }
    }
  }