1#!/bin/bash 2# 3# Copyright (C) 2008 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17# Stop if something fails. 18set -e 19 20DX_FLAGS="" 21 22while true; do 23 if [ "x$1" = "x--dx-option" ]; then 24 shift 25 option="$1" 26 DX_FLAGS="${DX_FLAGS} $option" 27 shift 28 elif expr "x$1" : "x--" >/dev/null 2>&1; then 29 echo "unknown $0 option: $1" 1>&2 30 exit 1 31 else 32 break 33 fi 34done 35 36if [ -e classes.dex ]; then 37 zip $TEST_NAME.jar classes.dex 38 exit 0 39fi 40 41if [ -d src-multidex ]; then 42 # Jack does not support this configuration unless we specify how to partition the DEX file 43 # with a .jpp file. 44 USE_JACK="false" 45fi 46 47if [ ${USE_JACK} = "true" ]; then 48 # Jack toolchain 49 if [ -d src ]; then 50 ${JACK} --output-jack src.jack src 51 imported_jack_files="--import src.jack" 52 fi 53 54 if [ -d src2 ]; then 55 ${JACK} --output-jack src2.jack src2 56 imported_jack_files="--import src2.jack ${imported_jack_files}" 57 fi 58 59 # Compile jack files into a DEX file. We set jack.import.type.policy=keep-first to consider 60 # class definitions from src2 first. 61 ${JACK} ${imported_jack_files} -D jack.import.type.policy=keep-first --output-dex . 62else 63 # Legacy toolchain with javac+dx 64 if [ -d src ]; then 65 mkdir classes 66 ${JAVAC} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'` 67 fi 68 69 if [ -d src-multidex ]; then 70 mkdir classes2 71 ${JAVAC} -implicit:none -classpath src -d classes2 `find src-multidex -name '*.java'` 72 if [ ${NEED_DEX} = "true" ]; then 73 ${DX} -JXmx256m --debug --dex --dump-to=classes2.lst --output=classes2.dex \ 74 --dump-width=1000 ${DX_FLAGS} classes2 75 fi 76 fi 77 78 if [ -d src2 ]; then 79 mkdir -p classes 80 ${JAVAC} -d classes `find src2 -name '*.java'` 81 fi 82 83 if [ ${NEED_DEX} = "true" ]; then 84 ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex \ 85 --dump-width=1000 ${DX_FLAGS} classes 86 fi 87fi 88 89if [ -d smali ]; then 90 # Compile Smali classes 91 ${SMALI} -JXmx256m --output smali_classes.dex `find smali -name '*.smali'` 92 ${DXMERGER} classes.dex classes.dex smali_classes.dex 93fi 94 95if [ -d src-ex ]; then 96 if [ ${USE_JACK} = "true" ]; then 97 # Rename previous "classes.dex" so it is not overwritten. 98 mv classes.dex classes-1.dex 99 #TODO find another way to append src.jack to the jack classpath 100 ${JACK}:src.jack --output-dex . src-ex 101 zip $TEST_NAME-ex.jar classes.dex 102 # Restore previous "classes.dex" so it can be zipped. 103 mv classes-1.dex classes.dex 104 else 105 mkdir classes-ex 106 ${JAVAC} -d classes-ex -cp classes `find src-ex -name '*.java'` 107 if [ ${NEED_DEX} = "true" ]; then 108 ${DX} -JXmx256m --debug --dex --dump-to=classes-ex.lst --output=classes-ex.dex \ 109 --dump-width=1000 ${DX_FLAGS} classes-ex 110 111 # quick shuffle so that the stored name is "classes.dex" 112 mv classes.dex classes-1.dex 113 mv classes-ex.dex classes.dex 114 zip $TEST_NAME-ex.jar classes.dex 115 mv classes.dex classes-ex.dex 116 mv classes-1.dex classes.dex 117 fi 118 fi 119fi 120 121# Create a single jar with two dex files for multidex. 122if [ -d src-multidex ]; then 123 zip $TEST_NAME.jar classes.dex classes2.dex 124elif [ ${NEED_DEX} = "true" ]; then 125 zip $TEST_NAME.jar classes.dex 126fi 127