19a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang/*
29a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * Copyright (C) 2008 The Android Open Source Project
39a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang *
49a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * Licensed under the Apache License, Version 2.0 (the "License");
59a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * you may not use this file except in compliance with the License.
69a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * You may obtain a copy of the License at
79a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang *
89a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang *      http://www.apache.org/licenses/LICENSE-2.0
99a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang *
109a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * Unless required by applicable law or agreed to in writing, software
119a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * distributed under the License is distributed on an "AS IS" BASIS,
129a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * See the License for the specific language governing permissions and
149a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang * limitations under the License.
159a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang */
169a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
179a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuangpackage util.build;
189a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
199a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuangimport com.android.dx.command.dexer.Main;
209a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuangimport java.io.IOException;
219a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
229a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuangpublic class DexBuildStep extends BuildStep {
239a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
249a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    private final boolean deleteInputFileAfterBuild;
259a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
269a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    DexBuildStep(BuildFile inputFile, BuildFile outputFile,
279a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            boolean deleteInputFileAfterBuild) {
289a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        super(inputFile, outputFile);
299a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        this.deleteInputFileAfterBuild = deleteInputFileAfterBuild;
309a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    }
319a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
329a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    @Override
339a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    boolean build() {
349a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
359a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        if (super.build()) {
369a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            Main.Arguments args = new Main.Arguments();
379a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
389a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            args.jarOutput = true;
399a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            args.fileNames = new String[] {inputFile.fileName.getAbsolutePath()};
409a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
419a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            args.outName = outputFile.fileName.getAbsolutePath();
429a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
439a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            int result = 0;
449a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            try {
459a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                result = Main.run(args);
469a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            } catch (IOException e) {
479a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                e.printStackTrace();
489a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                return false;
499a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            }
509a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
519a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            if (result == 0) {
529a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                if (deleteInputFileAfterBuild) {
539a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                    inputFile.fileName.delete();
549a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                }
559a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                return true;
569a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            } else {
579a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                System.err.println("exception while dexing "
589a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                        + inputFile.fileName.getAbsolutePath() + " to "
599a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                        + args.outName);
609a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                return false;
619a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            }
629a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        }
639a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        return false;
649a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    }
659a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
669a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    @Override
679a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    public int hashCode() {
689a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        return inputFile.hashCode() ^ outputFile.hashCode();
699a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    }
709a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
719a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    @Override
729a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    public boolean equals(Object obj) {
739a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        if (super.equals(obj)) {
749a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            DexBuildStep other = (DexBuildStep) obj;
759a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
769a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang            return inputFile.equals(other.inputFile)
779a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang                    && outputFile.equals(other.outputFile);
789a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        }
799a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang        return false;
809a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang    }
819a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
829a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang
839a223d79b41ec9c9fa651ff675eb0249d35569afTsu Chiang Chuang}
84