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