blob: 3849cf3c5aa62fddebba3edd7ef262a35c47cb60 [file] [log] [blame]
/*
* 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;
}
}