c552427032
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
)
76 lines
1.9 KiB
Bash
Executable file
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}
|