Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c04f3126 authored by Nicolas Geoffray's avatar Nicolas Geoffray
Browse files

Fix build time preopt with shared library uses.

- Handle hidl libraries.
- Handle new shared library encoding.

Test: no mismatch preopt during boot.
bug: 117845483
bug: 111174995
Change-Id: Ie4bca653594c72df2eb2fdd827bc73cfcb76b1d7
parent 7cac3adf
Loading
Loading
Loading
Loading
+40 −25
Original line number Diff line number Diff line
@@ -16,39 +16,54 @@

set -e

# inputs:
# $1 is PRIVATE_CONDITIONAL_USES_LIBRARIES_HOST
# $2 is PRIVATE_CONDITIONAL_USES_LIBRARIES_TARGET

# class_loader_context: library paths on the host
# stored_class_loader_context_libs: library paths on device
# these are both comma separated paths, example: lib1.jar:lib2.jar or /system/framework/lib1.jar:/system/framework/lib2.jar

# target_sdk_version: parsed from manifest
# my_conditional_host_libs: libraries conditionally added for non P
# my_conditional_target_libs: target libraries conditionally added for non P
#
# outputs
# class_loader_context_arg: final class loader conext arg
# stored_class_loader_context_arg: final stored class loader context arg

my_conditional_host_libs=$1
my_conditional_target_libs=$2
# The hidl.manager shared library has a dependency on hidl.base. We'll manually
# add that information to the class loader context if we see those libraries.
hidl_manager="android.hidl.manager-V1.0-java"
hidl_base="android.hidl.base-V1.0-java"

# Note that SDK 28 is P.
if [[ "${target_sdk_version}" -lt "28" ]]; then
function add_to_contexts {
  for i in $1; do
    if [[ -z "${class_loader_context}" ]]; then
    export class_loader_context="${my_conditional_host_libs}"
      export class_loader_context="PCL[$i]"
    else
    export class_loader_context="${my_conditional_host_libs}:${class_loader_context}"
      export class_loader_context+="#PCL[$i]"
    fi
  if [[ -z "${stored_class_loader_context_libs}" ]]; then
    export stored_class_loader_context_libs="${my_conditional_target_libs}";
    if [[ $i == *"$hidl_manager"* ]]; then
      export class_loader_context+="{PCL[${i/$hidl_manager/$hidl_base}]}"
    fi
  done

  for i in $2; do
    if [[ -z "${stored_class_loader_context}" ]]; then
      export stored_class_loader_context="PCL[$i]"
    else
    export stored_class_loader_context_libs="${my_conditional_target_libs}:${stored_class_loader_context_libs}";
      export stored_class_loader_context+="#PCL[$i]"
    fi
    if [[ $i == *"$hidl_manager"* ]]; then
      export stored_class_loader_context+="{PCL[${i/$hidl_manager/$hidl_base}]}"
    fi
  done
}

# The order below must match what the package manager also computes for
# class loader context.

if [[ "${target_sdk_version}" -lt "28" ]]; then
  add_to_contexts "${conditional_host_libs_28}" "${conditional_target_libs_28}"
fi

if [[ "${target_sdk_version}" -lt "29" ]]; then
  add_to_contexts "${conditional_host_libs_29}" "${conditional_target_libs_29}"
fi

add_to_contexts "${dex_preopt_host_libraries}" "${dex_preopt_target_libraries}"

# Generate the actual context string.
export class_loader_context_arg="--class-loader-context=PCL[${class_loader_context}]"
export stored_class_loader_context_arg="--stored-class-loader-context=PCL[${stored_class_loader_context_libs}]"
export class_loader_context_arg="--class-loader-context=PCL[]{${class_loader_context}}"
export stored_class_loader_context_arg="--stored-class-loader-context=PCL[]{${stored_class_loader_context}}"
+2 −2
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ ifdef LOCAL_DEX_PREOPT
  $(call add_json_list, OptionalUsesLibraries,         $(LOCAL_OPTIONAL_USES_LIBRARIES))
  $(call add_json_list, UsesLibraries,                 $(LOCAL_USES_LIBRARIES))
  $(call add_json_map,  LibraryPaths)
  $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl),\
  $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl android.hidl.base-V1.0-java android.hidl.manager-V1.0-java),\
    $(call add_json_str, $(lib), $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/javalib.jar))
  $(call end_json_map)
  $(call add_json_list, Archs,                         $(my_dexpreopt_archs))
@@ -233,7 +233,7 @@ ifdef LOCAL_DEX_PREOPT
  my_dexpreopt_deps := $(my_dex_jar)
  my_dexpreopt_deps += $(if $(my_process_profile),$(LOCAL_DEX_PREOPT_PROFILE))
  my_dexpreopt_deps += \
    $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl),\
    $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl android.hidl.base-V1.0-java android.hidl.manager-V1.0-java),\
      $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/javalib.jar)
  my_dexpreopt_deps += $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
  # TODO: default boot images