Check package restrictions for Java libs.
Test: m checkbuild; inspect verbose log. Test: Manual - compile with unmet restrictions. Bug: 122937705 Change-Id: I9360ae8b6d9ce016b7827be5e8ffc6eb521809b7
This commit is contained in:
72
scripts/package-check.sh
Executable file
72
scripts/package-check.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/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'
|
||||
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."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
IFS=${old_ifs}
|
Reference in New Issue
Block a user