Java源码示例:com.android.manifmerger.ManifestMerger2

示例1
@Override
protected void doFullTaskAction() {

    final File file = getAaptFriendlyManifestOutputFile();
    getBuilder().mergeManifests(
            getMainManifest(),
            getManifestOverlays(),
            Collections.<ManifestDependency>emptyList(),
            getPackageOverride(),
            getVersionCode(),
            getVersionName(),
            getMinSdkVersion(),
            getTargetSdkVersion(),
            getMaxSdkVersion(),
            getManifestOutputFile().getAbsolutePath(),
            (file == null ? null : file.getAbsolutePath()),
            ManifestMerger2.MergeType.LIBRARY,
            (Map<String, String>) variantConfiguration.getManifestPlaceholders(),
            getReportFile());
}
 
示例2
/**
 * Sets the {@link com.android.manifmerger.ManifestMerger2.SystemProperty} that can be injected
 * in the manifest file.
 */
private static void setInjectableValues(
        ManifestMerger2.Invoker<?> invoker,
        String packageOverride,
        int versionCode,
        String versionName,
        @Nullable String minSdkVersion,
        @Nullable String targetSdkVersion,
        @Nullable Integer maxSdkVersion) {

    if (!Strings.isNullOrEmpty(packageOverride)) {
        invoker.setOverride(SystemProperty.PACKAGE, packageOverride);
    }
    if (versionCode > 0) {
        invoker.setOverride(SystemProperty.VERSION_CODE,
                String.valueOf(versionCode));
    }
    if (!Strings.isNullOrEmpty(versionName)) {
        invoker.setOverride(SystemProperty.VERSION_NAME, versionName);
    }
    if (!Strings.isNullOrEmpty(minSdkVersion)) {
        invoker.setOverride(SystemProperty.MIN_SDK_VERSION, minSdkVersion);
    }
    if (!Strings.isNullOrEmpty(targetSdkVersion)) {
        invoker.setOverride(SystemProperty.TARGET_SDK_VERSION, targetSdkVersion);
    }
    if (maxSdkVersion != null) {
        invoker.setOverride(SystemProperty.MAX_SDK_VERSION, maxSdkVersion.toString());
    }
}
 
示例3
/** Process a manifest for a library or a binary and return the merged android data. */
public MergedAndroidData processManifest(
    VariantType variantType,
    String customPackageForR,
    String applicationId,
    int versionCode,
    String versionName,
    MergedAndroidData primaryData,
    Path processedManifest,
    boolean logWarnings) {

  ManifestMerger2.MergeType mergeType =
      variantType == VariantType.DEFAULT
          ? ManifestMerger2.MergeType.APPLICATION
          : ManifestMerger2.MergeType.LIBRARY;

  String newManifestPackage =
      variantType == VariantType.DEFAULT ? applicationId : customPackageForR;

  if (versionCode != -1 || versionName != null || newManifestPackage != null) {
    processManifest(
        versionCode,
        versionName,
        primaryData.getManifest(),
        processedManifest,
        mergeType,
        newManifestPackage,
        logWarnings);
    return new MergedAndroidData(
        primaryData.getResourceDir(), primaryData.getAssetDir(), processedManifest);
  }
  return primaryData;
}
 
示例4
private MergingReport mergeManifests(
    File mainManifestFile, List<File> libraryManifestFiles, BuckEventAndroidLogger logger) {
  try {
    ManifestMerger2.Invoker<?> manifestInvoker =
        ManifestMerger2.newMerger(
            mainManifestFile, logger, ManifestMerger2.MergeType.APPLICATION);
    if (!module.isRootModule()) {
      manifestInvoker.setPlaceHolderValue("split", module.getName());
    } else {
      manifestInvoker.withFeatures(ManifestMerger2.Invoker.Feature.NO_PLACEHOLDER_REPLACEMENT);
    }

    MergingReport mergingReport =
        manifestInvoker
            .withFeatures(
                ManifestMerger2.Invoker.Feature.REMOVE_TOOLS_DECLARATIONS,
                ManifestMerger2.Invoker.Feature.SKIP_BLAME)
            .addLibraryManifests(Iterables.toArray(libraryManifestFiles, File.class))
            .setMergeReportFile(mergeReportPath.toFile())
            .merge();
    if (mergingReport.getResult().isError()) {
      for (MergingReport.Record record : mergingReport.getLoggingRecords()) {
        logger.error(null, record.toString());
      }
      throw new HumanReadableException("Error generating manifest file");
    }

    return mergingReport;
  } catch (ManifestMerger2.MergeFailureException e) {
    throw new HumanReadableException(
        e.getCause(), "Error generating manifest file: %s", e.getMessage());
  }
}
 
示例5
@Override
public MergingReport mergeManifestsForApplication(
        @NonNull File mainManifest,
        @NonNull List<File> manifestOverlays,
        @NonNull List<? extends ManifestProvider> dependencies,
        @Nullable String featureName,
        String packageOverride,
        int versionCode,
        String versionName,
        @Nullable String minSdkVersion,
        @Nullable String targetSdkVersion,
        @Nullable Integer maxSdkVersion,
        @NonNull String outManifestLocation,
        @Nullable String outAaptSafeManifestLocation,
        @Nullable String outInstantRunManifestLocation,
        ManifestMerger2.MergeType mergeType,
        Map<String, Object> placeHolders,
        @NonNull List<ManifestMerger2.Invoker.Feature> optionalFeatures,
        @Nullable File reportFile) {


    return super.mergeManifestsForApplication(
            mainManifest,
            manifestOverlays,
            manifestProviders,
            featureName,
            packageOverride,
            versionCode,
            versionName,
            minSdkVersion,
            targetSdkVersion,
            maxSdkVersion,
            outManifestLocation,
            outAaptSafeManifestLocation,
            outInstantRunManifestLocation,
            mergeType,
            placeHolders,
            optionalFeatures,
            reportFile);

}
 
示例6
private void processManifest(
    int versionCode,
    String versionName,
    Path primaryManifest,
    Path processedManifest,
    MergeType mergeType,
    String newManifestPackage,
    boolean logWarnings) {
  try {
    Files.createDirectories(processedManifest.getParent());

    // The generics on Invoker don't make sense, so ignore them.
    @SuppressWarnings("unchecked")
    Invoker<?> manifestMergerInvoker =
        ManifestMerger2.newMerger(primaryManifest.toFile(), stdLogger, mergeType);
    // Stamp new package
    if (newManifestPackage != null) {
      manifestMergerInvoker.setOverride(SystemProperty.PACKAGE, newManifestPackage);
    }
    // Stamp version and applicationId (if provided) into the manifest
    if (versionCode > 0) {
      manifestMergerInvoker.setOverride(SystemProperty.VERSION_CODE, String.valueOf(versionCode));
    }
    if (versionName != null) {
      manifestMergerInvoker.setOverride(SystemProperty.VERSION_NAME, versionName);
    }

    MergedManifestKind mergedManifestKind = MergedManifestKind.MERGED;
    if (mergeType == MergeType.APPLICATION) {
      manifestMergerInvoker.withFeatures(Feature.REMOVE_TOOLS_DECLARATIONS);
    }

    MergingReport mergingReport = manifestMergerInvoker.merge();
    switch (mergingReport.getResult()) {
      case WARNING:
        if (logWarnings) {
          mergingReport.log(stdLogger);
        }
        writeMergedManifest(mergedManifestKind, mergingReport, processedManifest);
        break;
      case SUCCESS:
        writeMergedManifest(mergedManifestKind, mergingReport, processedManifest);
        break;
      case ERROR:
        mergingReport.log(stdLogger);
        throw new ManifestProcessingException(mergingReport.getReportString());
      default:
        throw new ManifestProcessingException(
            "Unhandled result type : " + mergingReport.getResult());
    }
  } catch (IOException | MergeFailureException e) {
    throw new ManifestProcessingException(e);
  }
}