/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.manifmerger; import com.android.utils.ILogger; import com.android.utils.StdLogger; import java.io.File; import java.util.Map; /** * Command-line entry point of the Manifest Merger. * The goal of the manifest merger is to merge library manifest into a main application manifest. * See {@link ManifestMerger} for the exact merging rules. * <p/> * The command-line version creates a {@link ManifestMerger} * which takes file arguments from the command-line and dumps all errors and warnings on the * stdout/stderr console. * <p/> * Usage: <br/> * {@code $ manifmerger merge --main main_manifest.xml --libs lib1.xml lib2.xml --out result.xml} * <p/> * When used as a library, please call {@link ManifestMerger#process(File, File, File[], Map, String)} * directly. */ public class Main { /** Logger object. Use this to print normal output, warnings or errors. Never null. */ private ILogger mSdkLog; /** Command line parser. Never null. */ private ArgvParser mArgvParser; public static void main(String[] args) { new Main().run(args); } /** * Runs the sdk manager app */ private void run(String[] args) { createLogger(); mArgvParser = new ArgvParser(mSdkLog); mArgvParser.parseArgs(args); // Create a new ManifestMerger and call its process method. // It will take care of validating its own arguments. ManifestMerger mm = new ManifestMerger(MergerLog.wrapSdkLog(mSdkLog), null); String[] libPaths = mArgvParser.getParamLibs(); File[] libFiles = new File[libPaths.length]; for (int n = libPaths.length - 1; n >= 0; n--) { libFiles[n] = new File(libPaths[n]); } boolean ok = mm.process( new File(mArgvParser.getParamOut()), new File(mArgvParser.getParamMain()), libFiles, null /*injectAttributes*/, null /*packageOverride*/ ); System.exit(ok ? 0 : 1); } /** * Creates the {@link #mSdkLog} object. * This logger prints to the attached console. */ private void createLogger() { mSdkLog = new StdLogger(StdLogger.Level.VERBOSE); } /** For testing */ public void setLogger(ILogger logger) { mSdkLog = logger; } }