1 #!/bin/bash 2 # 3 # Copyright 2018 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 on failure. 18 set -e 19 20 export ASM_JAR="${ANDROID_BUILD_TOP}/prebuilts/misc/common/asm/asm-6.0.jar" 21 22 export ORIGINAL_JAVAC="$JAVAC" 23 24 # Wrapper function for javac which invokes the compiler and applies 25 # transforms to class files after compilation. 26 function javac_wrapper { 27 set -e # Stop on error - the caller script may not have this set. 28 29 # Update arguments to add transformer and ASM to the compiler classpath. 30 local args=() 31 local classpath="./transformer.jar:$ASM_JAR" 32 while [ $# -ne 0 ] ; do 33 case $1 in 34 -cp|-classpath|--class-path) 35 shift 36 shift 37 args+=(-cp $classpath) 38 ;; 39 *) 40 args+=("$1") 41 shift 42 ;; 43 esac 44 done 45 46 # Compile. 47 $ORIGINAL_JAVAC "${args[@]}" 48 49 # Move original classes to intermediate location. 50 mv classes intermediate-classes 51 mkdir classes 52 53 # Transform intermediate classes. 54 local transformer_args="-cp ${ASM_JAR}:transformer.jar transformer.IndyTransformer" 55 for class in intermediate-classes/*.class ; do 56 local transformed_class=classes/$(basename ${class}) 57 ${JAVA:-java} ${transformer_args} $PWD/${class} ${transformed_class} 58 done 59 } 60 61 export -f javac_wrapper 62 export JAVAC=javac_wrapper 63 64 ###################################################################### 65 66 # Build the transformer to apply to compiled classes. 67 mkdir classes 68 ${ORIGINAL_JAVAC:-javac} ${JAVAC_ARGS} -cp "${ASM_JAR}" -d classes $(find util-src -name '*.java') 69 jar -cf transformer.jar -C classes transformer/ -C classes annotations/ 70 rm -rf classes 71 72 # Use API level 28 for invoke-custom bytecode support. 73 DESUGAR=false ./default-build "$@" --api-level 28 74