1#!/bin/bash 2# 3# Copyright (C) 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 17set -e 18 19# target_sdk_version: parsed from manifest 20# 21# outputs 22# class_loader_context_arg: final class loader conext arg 23# stored_class_loader_context_arg: final stored class loader context arg 24 25# The hidl.manager shared library has a dependency on hidl.base. We'll manually 26# add that information to the class loader context if we see those libraries. 27hidl_manager="android.hidl.manager-V1.0-java" 28hidl_base="android.hidl.base-V1.0-java" 29 30function add_to_contexts { 31 for i in $1; do 32 if [[ -z "${class_loader_context}" ]]; then 33 export class_loader_context="PCL[$i]" 34 else 35 export class_loader_context+="#PCL[$i]" 36 fi 37 if [[ $i == *"$hidl_manager"* ]]; then 38 export class_loader_context+="{PCL[${i/$hidl_manager/$hidl_base}]}" 39 fi 40 done 41 42 for i in $2; do 43 if [[ -z "${stored_class_loader_context}" ]]; then 44 export stored_class_loader_context="PCL[$i]" 45 else 46 export stored_class_loader_context+="#PCL[$i]" 47 fi 48 if [[ $i == *"$hidl_manager"* ]]; then 49 export stored_class_loader_context+="{PCL[${i/$hidl_manager/$hidl_base}]}" 50 fi 51 done 52} 53 54# The order below must match what the package manager also computes for 55# class loader context. 56 57if [[ "${target_sdk_version}" -lt "28" ]]; then 58 add_to_contexts "${conditional_host_libs_28}" "${conditional_target_libs_28}" 59fi 60 61if [[ "${target_sdk_version}" -lt "29" ]]; then 62 add_to_contexts "${conditional_host_libs_29}" "${conditional_target_libs_29}" 63fi 64 65add_to_contexts "${dex_preopt_host_libraries}" "${dex_preopt_target_libraries}" 66 67# Generate the actual context string. 68export class_loader_context_arg="--class-loader-context=PCL[]{${class_loader_context}}" 69export stored_class_loader_context_arg="--stored-class-loader-context=PCL[]{${stored_class_loader_context}}" 70