platform_build_soong/scripts/package-check.sh
Paul Duffin c552427032 Ensure package check is run for java_library in APEX
Package checks were not being run for java libraries that were in an
APEX and not on the platform. This change fixes that and updates the
script to report all failing classes to make it easier to update the
list of packages.

Test: m java
Bug: 157633658
Change-Id: I28044e08d3a40e9f3464bb2158ef6a28d57264d1
(cherry picked from commit 63d8febd35)
2020-05-29 09:18:13 +01:00

76 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
#
# Copyright (C) 2019 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.
set -e
if [[ $# -le 1 ]]; then
cat <<EOF
Usage:
package-check.sh <jar-file> <package-list>
Checks that the class files in the <jar file> are in the <package-list> or
sub-packages.
EOF
exit 1
fi
jar_file=$1
shift
if [[ ! -f ${jar_file} ]]; then
echo "jar file \"${jar_file}\" does not exist."
exit 1
fi
prefixes=()
while [[ $# -ge 1 ]]; do
package="$1"
if [[ "${package}" = */* ]]; then
echo "Invalid package \"${package}\". Use dot notation for packages."
exit 1
fi
# Transform to a slash-separated path and add a trailing slash to enforce
# package name boundary.
prefixes+=("${package//\./\/}/")
shift
done
# Get the file names from the jar file.
zip_contents=`zipinfo -1 $jar_file`
# Check all class file names against the expected prefixes.
old_ifs=${IFS}
IFS=$'\n'
failed=false
for zip_entry in ${zip_contents}; do
# Check the suffix.
if [[ "${zip_entry}" = *.class ]]; then
# Match against prefixes.
found=false
for prefix in ${prefixes[@]}; do
if [[ "${zip_entry}" = "${prefix}"* ]]; then
found=true
break
fi
done
if [[ "${found}" == "false" ]]; then
echo "Class file ${zip_entry} is outside specified packages."
failed=true
fi
fi
done
if [[ "${failed}" == "true" ]]; then
exit 1
fi
IFS=${old_ifs}