198 Commits

Author SHA1 Message Date
Spandan Das
26e6c5d5f7 Install dexpreopt artifacts of non system apps in system_other
`SYSTEM_OTHER_ODEX_FILTER` is used to determine which odex files go in
system_other partition. Soong and Make adds another filter on top of that.
This additional filter limits the odex files to only system apps, which
means that dexpreopt artifacts of product and system_ext apps are **not**
installed in system_other.

This CL removes this additional filter. After this CL, dexpreopt
artifacts of product and system_ext apps will be installed in system_other.

Bug: 349083274
Test: Verified that .odex files of product apps appear in
intalled-files-system_other.txt and not installed-files-product.txt

Test: Ran this CL on a bunch of targets in git_main and throttled
branchesa (there are some unrelated errors on some targets)
https://android-build.corp.google.com/builds/abtd/run/L93000030004826539
https://android-build.corp.google.com/builds/abtd/run/L53400030004824781
https://android-build.corp.google.com/builds/abtd/run/L41900030004824724
https://android-build.corp.google.com/builds/abtd/run/L87200030004822630
https://android-build.corp.google.com/builds/abtd/run/L67500030004727048
https://android-build.corp.google.com/builds/abtd/run/L41700030004726610
https://android-build.corp.google.com/builds/abtd/run/L61600030004726607

Change-Id: I522b8f00a268058b13bb88ac1b34824bd5c1190e
2024-06-27 02:07:36 +00:00
Yingzhe Li
6f29441e37 Enable <uses-library> check for WTS
<uses-library> checks are disabled on test suites by default. There were
changes merged in WTS that broke regular device build due to the lack of
this check in WTS.

This change adds such check to WTS.

Bug: 341311669

Test: m wts; verifies <uses-library> check is executed
Change-Id: Iafb10c15cf3569c500c46354f81325f0d834e0aa
2024-05-31 23:56:05 +00:00
Jiakai Zhang
364e9c39de Remove PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK.
This was added by r.android.com/513843 to force dexpreopt some GMS core
modules even if dexpreopt is disabled, to avoid some memory usage
regression. We no longer need it because dexpreopt is never disabled on
production builds.

Bug: 313505540
Test: m
Change-Id: Iff7f1d340a3ecd64cdc3d2f83f9c37c109a81fda
2023-11-28 13:46:13 +00:00
Jiakai Zhang
bf0c0e6856 Add a Make variable to disable all dexpreopt and dexopt activities.
This change adds a Make variable "OVERRIDE_DISABLE_DEXOPT_ALL", which
disables all dexpreopt and dexopt activities.

This is for faster iteration during development and should never be
enabled for production.

Bug: 309011617
Test: See no dex2oat invocation during build.
Test: Boot and see no dex2oat invocation during boot, except for the
  in-memory boot image for JIT Zygote.
Change-Id: I0193b57fdb18e1fb717f44af81d1cf525f1609ee
2023-11-09 16:50:18 +00:00
Cole Faust
9ff7a37096 Don't read the odex zip files when building sbom-metadata.csv
The files inside the odex zip files are now part of $(installed_files)
as of aosp/2729625.

Bug: 205632228
Test: m out/target/product/emulator_x86_64/sbom-metadata.csv, before this cl you can find duplicate entries for the odex files. After this cl there's only 1
Change-Id: I1645bd1bb9e1f10fc3746225a15b8431b666580e
2023-08-29 15:39:10 -07:00
Cole Faust
a220e4596f Add dexpreopt files to ALL_MODULES.$(m).INSTALLED
We're trying to make FULL_SYSTEMIMAGE_DEPS more accurate to remove the
need for `m installclean`. The dexpreopt files did not show up in
FULL_SYSTEMIMAGE_DEPS, because they were installed with a custom
post-install command.

The dexpreopt implementation is shared between soong/make, which means
a lot of it happens at execution time for make. However, we have enough
information to guess what files to install will be inside the zip file.

Add an execution-time check that our guess is correct, and then add
the guessed files to `ALL_MODULES.$(m).INSTALLED`.

This also allows us to remove the post-install command, and just
generate rules to install the files we want directly.

Bug: 205632228
Test: full build on an internal product that uses dex-preopted make modules
Change-Id: I57db58e4587e3e198ec650c6fb39a908e4ec6993
2023-08-28 18:12:30 -07:00
Jiakai Zhang
73ecc5b27a Use per-app package list to avoid unnecessary dexpreopt.
Similar to aosp/2637193, but for apps defined in Makefile.

Bug: 288218403
Test: m
Test: Change PRODUCT_PACKAGES and see no dexpreopt reruns.
Change-Id: If0ecbb2d210a780c56ea506bb8d3363e1bd91f58
2023-06-28 17:59:39 +01:00
Jiakai Zhang
a5551c5d91 Add mainline extension and METADATA.txt to boot.zip.
Contents of METADATA.txt:

booclasspath = dex_bootjars_input/core-oj.jar:dex_bootjars_input/core-libart.jar:dex_bootjars_input/okhttp.jar:dex_bootjars_input/bouncycastle.jar:dex_bootjars_input/apache-xml.jar:dex_bootjars_input/framework.jar:dex_bootjars_input/framework-graphics.jar:dex_bootjars_input/ext.jar:dex_bootjars_input/telephony-common.jar:dex_bootjars_input/voip-common.jar:dex_bootjars_input/ims-common.jar:dex_bootjars_input/core-icu4j.jar:apex_bootjars/framework-adservices.jar:apex_bootjars/framework-sdksandbox.jar:apex_bootjars/framework-appsearch.jar:apex_bootjars/framework-bluetooth.jar:apex_bootjars/conscrypt.jar:apex_bootjars/android.net.ipsec.ike.jar:apex_bootjars/updatable-media.jar:apex_bootjars/framework-mediaprovider.jar:apex_bootjars/framework-ondevicepersonalization.jar:apex_bootjars/framework-statsd.jar:apex_bootjars/framework-permission.jar:apex_bootjars/framework-permission-s.jar:apex_bootjars/framework-scheduling.jar:apex_bootjars/framework-sdkextensions.jar:apex_bootjars/framework-connectivity.jar:apex_bootjars/framework-connectivity-t.jar:apex_bootjars/framework-tethering.jar:apex_bootjars/framework-uwb.jar:apex_bootjars/framework-virtualization.jar:apex_bootjars/framework-wifi.jar
booclasspath-locations = /apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/framework-graphics.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/apex/com.android.i18n/javalib/core-icu4j.jar:/apex/com.android.adservices/javalib/framework-adservices.jar:/apex/com.android.adservices/javalib/framework-sdksandbox.jar:/apex/com.android.appsearch/javalib/framework-appsearch.jar:/apex/com.android.btservices/javalib/framework-bluetooth.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.ipsec/javalib/android.net.ipsec.ike.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.ondevicepersonalization/javalib/framework-ondevicepersonalization.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.permission/javalib/framework-permission-s.jar:/apex/com.android.scheduling/javalib/framework-scheduling.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.tethering/javalib/framework-connectivity.jar:/apex/com.android.tethering/javalib/framework-connectivity-t.jar:/apex/com.android.tethering/javalib/framework-tethering.jar:/apex/com.android.uwb/javalib/framework-uwb.jar:/apex/com.android.virt/javalib/framework-virtualization.jar:/apex/com.android.wifi/javalib/framework-wifi.jar
boot-image = system/framework/boot.art:system/framework/boot-framework-adservices.art

Bug: 286381070
Test: m dist out/dist/boot.zip
Change-Id: I258479ffbdf199091290b074329ff1b43db2e669
2023-06-09 17:56:31 +01:00
Jiakai Zhang
f09e76c173 Drop INTERNAL_PLATFORM_MISSING_USES_LIBRARIES.
INTERNAL_PLATFORM_MISSING_USES_LIBRARIES was a workaround for CLC
construction. It's no longer needed because we have deferred the CLC
construction to Ninja phase.

Bug: 282877248
Test: Presubmit build tests.
Change-Id: Ib5d59caf58394f3bb93b4338146cbbbd58bb4f34
2023-06-01 16:44:35 +01:00
Jiakai Zhang
0f49bc7d1a Move CLC construction to Ninja phase.
Bug: 282877248
Test: m
Change-Id: Ib87aafcfad09b569e44eed3a5a6c385237a66b55
2023-05-17 21:06:32 +01:00
Cole Faust
8f92d4194f Remove wildcards of absolute paths
PRODUCT_DEX_PREOPT_PROFILE_DIR could be an empty string, leading to
a wildcard starting with /.

Test: m nothing
Change-Id: Ic745ed4b55cdf5d5d6b43f91c9e5f0c23635c618
2023-05-10 19:04:34 -07:00
Justin Yun
762614fd4a Generate enforce_uses_libraries.status to out/target/product
enforce_uses_libraries.status files require dexpreopt.config files
which are generated in out/target/product/<product>/obj because they
are specific to target products.
As common files cannot depend on product specific files, generate the
enforce_uses_libraries.status files to the product specific
intermediate directories instead of the common intermediates.

Bug: 279360253
Test: build
Change-Id: Idc468fdaf046cd37dd8f39a9212aad78283b4c61
2023-04-26 19:39:39 +09:00
Jiakai Zhang
fb2734e36b Use the boot image mainline extension when dexpreopting in Make.
aosp/2470961 introduces a boot image mainline extension. We need to use
it when dexpreopting apps in Make.

Bug: 274059172
Bug: 269230245
Test: See "boot-framework-adservices.art" in
  out/target/product/vsoc_x86_64/obj/APPS/PrebuiltGmail_intermediates/oat/x86_64/package.invocation
  on internal master.
Change-Id: Ic0b1753a0066bd16a31de028743f1ad908e9bdfc
2023-03-20 18:42:13 +00:00
Wei Li
499333616c Generate SBOM of the target product in file sbom.spdx.json in product out directory.
Original aosp/2374663 was reverted, so this change cnotains the implementation but disabled by default and SBOM will not be built by default with "m dist".

The feature will be enabled later in small CLs after running tests successfully in forrest.

Test: m sbom
Test: m dist
Test: on aosp, lunch aosp_bluejay-userdebug && m dist
Bug: 266726655
Change-Id: I926d0f97f3a0330ef61d059f12ea660005d370e6
2023-03-14 15:14:06 -07:00
Saeid Farivar Asanjan
0b4f8d542f Use aapt2
Replace usage of `$(AAPT)` with `$(AAPT2)`.

Bug: 236602069
Test: m nothing
Change-Id: I079bfe1eebfedda855ff585a20704f4f01c853d6
2022-08-09 16:14:38 +00:00
Ulya Trofimovich
8b9f334eed Revert "Dexpreopt: prepare to merge class loader context from al..."
Reason for revert: performance regression on AppStartup.
Reverted Changes:
I6522319a8:Dexpreopt: prepare to merge class loader context f...
Ic8528dffd:manifest_check.py: add uses-libraries propagaged v...

Bug: 235304939
Bug: 214255490
Change-Id: Iff6ad6f0d862df259bf9e3dd7017c268dbcbf8bf
2022-06-13 09:06:59 +00:00
Ulya Trafimovich
51ad6b81a8 Dexpreopt: prepare to merge class loader context from all deps.
The makefile implementation of dexpreopt is lagging behind the Soong
implementation in the way it handles transitive dependencies: Soong
propagates class loader context through transitive dependencies, such
as static libraries, but makefiles only propagate that information
through uses-library dependencies.

This discrepancy is caused by the difficulty of handling class loader
contexts in makefies: since there is no topological order in handling
module and its dependencies, the information is propagated via file
level dependencies on dexpreopt.configs and merged into the module's
dexpreopt.config with a python script.

To handle transitive dependencies correctly, it is necessary to
generate dexpreopt.config files for all libraries, not just those that
enable dexpreopt.

This change only prepares dex_preopt_odex_install.mk for that and
updates if for corresponding changes in manifest_check.py. It does not
enable generation of dexpreopt.config files for non uses-library
dependencies (e.g. static libraries). This will be done as a follow-up.

Changes:

  - renamed option for dependency dexpreopt.config files
  - added option for self dexpreopt.config
  - moved variable definitions so that they can be used both by
    uses-library check and dexpreopt command
  - add 'Optional' field in makefile-generated dexpreopt.config to
    align it on par with Soong-generated configs
  - modify dex_preopt_config_merger.py to add uses-libraries propagated
    via dexpreopt.config files

Bug: 214255490
Test: lunch aosp_cf_x86_64_phone-userdebug && m && launch_cvd \
    && adb wait-for-device && adb root \
    && adb logcat | grep -E 'ClassLoaderContext [a-z ]+ mismatch'
    # a few unrelated errors caused by missing optional uses-libraries
    #   android.net.ipsec.ike
    #   androidx.window.extensions
    #   androidx.window.sidecar
    # that were present before this patch
Change-Id: I6522319a8415f22f90fc96059a34675fb830e5cc
2022-05-24 16:02:49 +01:00
Ulya Trafimovich
30142ffc0a Remove DEXPREOPT_USE_ART_IMAGE; it is no longer needed.
Bug: 170935728
Test: lunch aosp_cf_x86_64_phone-userdebug && m && lunch_cvd
Change-Id: Icc50932228b6ce27799ac9ce9b2f637029436b6b
2022-04-27 13:32:04 +01:00
Ulya Trafimovich
7693ec7e03 Deprecate system server jars defined in Android.mk.
Add PRODUCT_BROKEN_DEPRECATED_MK_SYSTEM_SERVER_JARS variable that is
undefined by default. Setting that variable to true enables support for
system server jars defined in Android.mk. It should be enabled on a
per-product basis in product makefiles.

Bug: 203618671
Test: m nothing
Change-Id: If90d7131d37f308c468e395c236d5aa5ad053bad
2021-10-26 14:47:24 +01:00
Ulya Trafimovich
44f762a766 Move copy rule for system server jars from dexpreopt_gen to makefiles.
This is necessary in order to expose the copy rule to Ninja. Otherwise
Ninja has a build rule that depends on the copied jar (namely, dexpreopt
commands for all subsequent system server jars that have the current one
in class loader context), but no rule that creates it, so Ninja fails
with a "no rule to make ..." error.

The change only affects system server ed in Android.mk

Previously the problem existed, but was hidden by the fact that the only
system server jar defined in Android.mk was the last one on the list, so
no other jar depended on it. Now that updatable apex jars are also
dexpreopted (https://r.android.com/1828115) the problem was uncovered.

Also the patch removes obsolete logic that disable dexpreopt for
PRODUCT_APEX_SYSTEM_SERVER_JARS; these jars are now preopted (but they
are all defined in Android.bp anyway, so no functional change here).

Bug: 200297762
Test: lunch bertha_x86_64-userdebug && m
Change-Id: I67c6d69f45ca3495f62994b5329f9e424dda4e65
2021-09-23 12:10:04 +01:00
satayev
a85d5225ee Rename PRODUCT_UPDATABLE_SYSTEM_SERVER_JARS to PRODUCT_APEX_SYSTEM_SERVER_JARS.
Regardless of an "updatable" property, list all apex jars in the same
variable. This is less confusing for devs and matches the pattern with
PRODUCT_APEX_BOOT_JARS.

Bug: 191127295
Test: atest CtsClasspathsTestCases
Change-Id: I3b12f26237636f4271cb000480928b3ce1c2e62f
Merged-In: I3b12f26237636f4271cb000480928b3ce1c2e62f
2021-07-27 16:09:52 +00:00
Jeongik Cha
b26bf58e12 dexpreopt.config should be created even though unbundled image is built
Bug: 188179858
Test: compare dexpreopt_config.zip files from
 1. TARGET_BUILD_UNBUNDLED_IMAGE=true m dexpreopt_config_zip
 2. m dexpreopt_config_zip
(note that m clean should run between steps)

Change-Id: I92623b59e4fcac397c7fed3d7ab1070fe5281027
2021-07-14 18:52:01 +09:00
Jeongik Cha
242c436242 Emit DexPreoptImageLocationsOnDevice as well
Bug: 158843648
Test: check if dexpreopt config for the module defined in mk has
DexPreoptImageLocationsOnDevice field.

Change-Id: Ie8c7b1c8c5a6797f71920d9ce671dde0e1f489a3
2021-06-23 23:21:07 +09:00
Ulya Trafimovich
d5e6a7c620 Disable <uses-library> checks for more tests (to fix MTS builds).
Bug: 132357300
Bug: 188648210
Test: lunch aosp_cf_x86_64_phone-userdebug && m mts
Change-Id: Iae0ecac076b351b2da929bb455f00f03ece130bd
2021-05-19 18:10:28 +01:00
Ulyana Trafimovich
7ceafdaf34 Revert^2 "Enforce <uses-library> check for Android.mk modules."
This reverts commit a700ad4651.

Reason for revert: relanding original CL with correct Merged-In tag.

Use "Merged-In" tag from CL ag/14062434 to prevent merging in the
stage-aosp-master branch. That CL is unrelated to the current CL,
but related to <uses-library> checks in general.

Bug: 132357300
Change-Id: I10de5b56c51a0407bf027e0be5ac3b0b307cf100
Test: treehugger
Merged-In: I21712e5197b3cb06e82e476f4c2f7277142034e9
2021-05-13 09:52:38 +00:00
Ulyana Trafimovich
a700ad4651 Revert "Enforce <uses-library> check for Android.mk modules."
This reverts commit 0b154519b0.

Reason for revert: breaks the builds on stage-aosp-master

Change-Id: I72b45041ea8f1d73a57a2788a79183150c12e547
2021-05-12 22:20:12 +00:00
Ulya Trafimovich
0b154519b0 Enforce <uses-library> check for Android.mk modules.
Use "Merged-In" tag from CL ag/14063987 to prevent merging in the
rvc-qpr-dev-plus-aosp branch. That CL is unrelated to the current CL,
but related to <uses-library> checks in general.

Bug: 132357300
Test: treehugger
Change-Id: If31a9ed148e4f1195bf916a650d0afafef3d6915
Merged-In: I26f2887357193b0d4bb951fa5bb09384c149b381
(cherry picked from commit feeb6bcd1e)
2021-05-12 14:19:40 +00:00
Treehugger Robot
5a75afbede Merge "Rename DexPreoptImageLocations to DexPreoptImageLocationsOnHost" 2021-05-08 01:47:39 +00:00
Jeongik Cha
f17cca4813 Rename DexPreoptImageLocations to DexPreoptImageLocationsOnHost
The field is the path on the host side. Rename it to be more specific.

Bug: 158843648
Test: m
Change-Id: Ifa37c5f459440a30d508f37f9913f9e559ae6574
2021-05-07 20:29:29 +09:00
satayev
9eb1435745 Merge "Add 'platform:' prefix to unqualified system server jars." 2021-05-06 11:32:39 +00:00
Colin Cross
7b70d98d1f Fix reference to uncleared variable in dex_preopt_odex_install.mk
dex_preopt_odex_install.mk referenced $(built_module), which is only
set by some prebuilt modules, leaving old values when building
non-prebuilt modules.  Use $(LOCAL_BUILT_MODULE) instead, which is set
for all modules by base_rules.mk.

Test: manual
Change-Id: Iecf092f9869d5edda3671d0999987906781d023e
2021-05-05 14:43:04 -07:00
satayev
35a7a43b56 Add 'platform:' prefix to unqualified system server jars.
This allows Soong side changes to treat SystemServerJars as
android.ConfiguredJarList, same as boot jars.

Bug: 180105615, 155630745
Test: m && launch_cvd
Change-Id: I717d4351edcd82028ac19cb9265e18b98d11c661
2021-05-05 15:18:39 +01:00
Treehugger Robot
6edaa353b1 Merge "Store dexpreopt.config files to dexpreopt_config.zip" 2021-04-23 06:47:57 +00:00
Jeongik Cha
a8056d6cb9 Store dexpreopt.config files to dexpreopt_config.zip
To dexpreopt in post processing, store config files for dexpreopt

Bug: 158843648
Test: m dist and check dexpreopt_config.zip
Change-Id: I5c63a5ffc10023994b14e3a63f50defb9194739f
2021-04-23 01:01:31 +00:00
Ulya Trafimovich
affbaed3be Regroup conditions related to LOCAL_ENFORCE_USES_LIBRARIES.
No functional changes.

Bug: 132357300
Test: lunch aosp_cf_x86_64_phone-userdebug && m
Change-Id: Ia43ac9306c40df5bec525ae1b245add57f568ee5
2021-04-13 17:26:28 +01:00
Ulya Trafimovich
6ef5779c98 Don't expect all Java modules to have a manifest.
Some libraries that go through manifest_check do not have a manifest or
APK, so there is nothing to check LOCAL_USES_LIBRARIES and
LOCAL_OPTIONAL_USES_LIBRARIES against. Handle it as if the manifest had
zero <uses-library> tags: don't fail the build unless the module has
non-empty LOCAL_USES_LIBRARIES or LOCAL_OPTIONAL_USES_LIBRARIES.

Bug: 132357300
Test: lunch cf_x86_64_phone-userdebug && m
Change-Id: I4b1317cfbd93cb6129caba51b56081307a564442
2021-04-13 12:42:44 +01:00
Ulya Trafimovich
03befa00fe Don't enforce <uses-library> checks if dexpreopt for apps is disabled.
Otherwise the check fails, as it depend on non-existent dexpreopt.config
files. This CL fixes broken build cf_x86_phone-userdebug_coverage.

Bug: 183931403
Bug: 132357300
Test: forrest build for cf_x86_phone-userdebug_coverage.
Change-Id: I6f977c1e0c2d2160b1813d2d1c36459f0641235e
2021-03-29 15:01:05 +01:00
Ulya Trafimovich
413be716ab Reorder compatibility libraries used in class loader context.
Compatibility library "android.hidl.manager-V1.0-java" should go
before "android.hidl.base-V1.0-java" in class loader context for
dexpreopt, because this is the order used by PackageManager when it
constructs class loader context on device.

This allows to avoid "ClassLoaderContext classpath element mismatch"
errors on first boot for Calendar and messaging apps, which have old
enough targetSdkVersion to need HIDL compatibility libraries. Previously
the errors were masked because these apps used the deprecated
&-classpath hack.

Bug: 132357300

Test: lunch aosp_cf_x86_64_phone-userdebug && m && launch_cvd \
      adb wait-for-device && adb root && adb logcat \
      | grep -E 'ClassLoaderContext [a-z ]+ mismatch'
      # empty grep output, no errors
Change-Id: Ibde9a4578cd86b85a9e7f11d8752716b6567e51e
2021-03-19 11:01:53 +00:00
Ulya Trafimovich
928fc2c1ef manifest_check.py: translate library names using dexpreopt configs.
Java modules that are defined in makefiles are not processed in
topological order, so it is necessary to communicate information from
dependencies via dexpreopt.config files. This has already been done in
make/core/dex_preopt_config_merger.py, and now manifest_check.py also
needs to get library names from their dexpreopt.config files.

This is to accommodate Java libraries which name differs from their
modules name. Soong properties `uses_libs`/`optional_uses_libs` and
makefile vars `LOCAL_USES_LIBRARIES`/`LOCAL_OPTIONAL_USES_LIBRARIES`
contain module names, not library names, so it is necessary to translate
them when comparing against library names in the manifest.

Bug: 132357300
Test: lunch cf_x86_64_phone-userdebug && m
Change-Id: I769b508a927d87a5ffbabf9aa45eebfb954b8bd2
2021-03-19 11:01:39 +00:00
Ulya Trafimovich
2bf587713b Consolidate manifest_check for different module types.
Move manifest_check (a.k.a. verify_uses_libraries check) from makefiles
for specific module types to common makefile dex_preopt_odex_install.mk,
which is included by all Java modules that may require dexpreopt. If a
modules locally disables dexpreopt, it still goes through manifest_check
(unless dexpreopt is globally disabled or the module has no Java code).

This CL allows to have manifest_check and dexpreopt in the same makefile
(which is needed for a follow-up CL that will reuse dexpreopt variables
for manifest_check).

Bug: 132357300
Test: lunch cf_x86_64_phone-userdebug && m
Change-Id: Ia217cfc247ae43d8fc716bfc1fe9dcce1d00aa7f
2021-03-19 11:00:51 +00:00
Ulya Trafimovich
5a09c2084d Add non-fatal mode for verify_uses_libraries check.
The new mode is enabled with environment variable
RELAX_USES_LIBRARY_CHECK. If the variable is set to true, then a
verify_uses_libraries check failure does not fail the build, instead it
sets a special compiler filter "extract" for dexpreopt, which means that
the DEX file will be extracted, but it won't be compiled to native code.
Class loader context will be set to empty in this case (not &, as it is
going to be deprecated soon).

If the variable RELAX_USES_LIBRARY_CHECK is unset or set to something
other than "true", then the old behaviour of the verify_uses_libraries
check is preserved.

The intended use case for this flag is to have a smoother migration path
for the Java modules that need to add <uses-library> information in
the build files. The flag allows to quickly silence build errors. This
flag should be used with caution and only as a temporary measure, as it
masks real errors and affects performance.

verify_uses_libraries check is reworked so that it writes the error
message to a status file (which is used instead of the former timestamp
file). Currently the stored error message is not used, but it may be
used later to produce a warning. Dexpreopt command checks if the status
file exists and is nonempty; if that is the case, then compiler filter
is set to "extract".

Bug: 132357300

Test: Manually add some mismatch between the libraries in the Android.bp
      and Android.mk files for dexpreopted apps, build with
      RELAX_USES_LIBRARY_CHECK=true and obsserve that the build doesn't
      fail and they are compiled with compiler-filter "extract".
      Unset RELAX_USES_LIBRARY_CHECK and observe that the build fails.

Change-Id: Ie1a6298c4dba2f368ca9ac8b9fee2de0a26e68e8
2021-02-22 14:49:47 +00:00
Ulya Trafimovich
8edad8f7a3 Preserve <uses-library> order in dexpreopt.config files.
Library order is important because it is used to construct class loader
context, which is then written into OAT/ODEX files and chacked against
class loader context constructed by PackageManager on the device. If the
orders are different, dexpreopted code is rejected.

This CL fixes a few problems that caused reordering:

- 'filter' function arguments are swapped so that patterns list comes
  first, and the library list second

- JSON representation of class loader context is changed to avoid
  unmarshaling it to Go maps, which may reorder keys

- library list is no longer sorted (it's unclear why it was sorted)

Bug: 132357300
Test: lunch cf_x86_64_phone-userdebug && m && launch_cvd \
      adb wait-for-device && adb root && adb logcat \
      | grep -E 'ClassLoaderContext [a-z ]+ mismatch'
      # empty grep output, no errors
Change-Id: Ie76996d497e60da0948f1879d6db589ff3e968a2
2021-02-11 17:09:19 +00:00
Ulya Trafimovich
156c719179 Quick and dirty filtering of present LOCAL_OPTIONAL_USES_LIBRARIES.
Filter LOCAL_OPTIONAL_USES_LIBRARIES by PRODUCT_PACKAGES. This has the
drawback that some present libraries may be filtered out as well, as the
full list of product packages is unknown until all Android.mk files have
been read.

This CL unblocks <uses-library> fixes for individual apps, which will be
necessary to dexpreopt them in the nearest future when the &-classpath
hack is removed in ART. Apps that are not fixed by then will loose
dexpreopt completely. This fix, although not perfect, lowers the risk of
loosing dexpreopt for many apps. In the future it may be replaced with a
better solution.

Bug: 132357300
Test: lunch aosp_cf_x86_64_phone-userdebug && m && launch_cvd \
        adb wait-for-device && adb root && adb logcat \
        | grep -E 'ClassLoaderContext [a-z ]+ mismatch'
        # empty grep output, no errors
Change-Id: I188cf240259f7a448623450e6a949e0784a21f87
2021-02-03 15:05:42 +00:00
Ulya Trafimovich
c77a379241 Fix typo in variable name.
Bug: 132357300
Test: m nothing
Change-Id: I0e770aa7ab179aa90ae0d12d7c101e65ca345bee
2021-02-02 12:22:04 +00:00
Ulya Trafimovich
558cb6c5ac Merge <uses-library> dependency configs into dexpreopt.config files.
Since Make does not visit modules in topological order of their
<uses-library> dependencies, information from dependencies to the
dexpreopted module has to be passed via dexpreopt.config files. A build
rule for a dexpreopt.config file depends on dexpreopt.config files for
<uses-library> dependencies, and dex_preopt_config_merger.py script
extracts the necessary information from dependency configs and patches
the module's config.

Bug: 132357300
Test: lunch aosp_cf_x86_phone-userdebug && m
Change-Id: Id0b71170a4d2ab1d33059de0e9ad9d7e61f2345e
2021-01-28 14:59:14 +00:00
Ulya Trafimovich
514d809b20 Add LOCAL_PROVIDES_USES_LIBRARY and use it in module dexpreopt config.
The new variable stores the name of the <uses-library>, if for some
reason it is different than the name of the module for that library
(normally they are the same, but sometimes differ). If the variable is
undefined or defined to an empty string, the name of the <uses-library>
is considered to be the same as the name of its module. It is recorded
in a module's dexpreopt.config file as "ProvidesUsesLibrary" field.

Bug: 132357300
Test: lunch aosp_cf_x86_phone-userdebug && m
Change-Id: Iac1be0fac79a944e4c26867cc58e274b76709da8
2021-01-22 12:09:30 +00:00
Ulya Trafimovich
1047a0a4be Add subcontexts field to JSON class loader context representation.
For now the subcontexts are always empty. A follow-up change will
actually populate that field from dependencies' dexpreopt.config files.

Bug: 132357300
Test: lunch aosp_cf_x86_phone-userdebug && m
Change-Id: I6cf0e8363dff4b406cb62ba3d76d566dbfec57e7
2021-01-22 12:00:24 +00:00
Ulya Trafimovich
1bca532106 Rework class loader context implementation.
In Soong, the old flat representation is changed to a map of trees
(keyed on SDK versions). In Make, the new representation is not as
advanced as in Soong -- it is a map of flat lists rather than trees.
It works for now, because there is only one app that has a non-& class
loader context, and it is simple enough to use flat lists.

Test: lunch aosp_cf_x86_phone-userdebug && m
Bug: 132357300
Bug: 168686456
Change-Id: If1080295a2fafa6772383ee9fbffd7c458462c18
2020-11-03 11:23:42 +00:00
Jeongik Cha
f26015449f Unset ENABLE_PREOPT when DISABLE_PREOPT is set
Instead of TARGET_BUILD_APPS, introduce DISABLE_PREOPT,
which is true when TARGET_BUILD_UNBUNDLED_IMAGE or TARGET_BUILD_APPS is set.

Test: TARGET_BUILD_UNBUNDLED_IMAGE=true m vendorimage and then
      check if there is no preopt
Bug: 160390776

Change-Id: Id27030e602a29ebd438678270db13744dd145143
2020-08-04 10:39:57 +09:00
Colin Cross
c27d795b63 Use unzip -DD
We put reproducible timestamps in zip files so that the artifacts
are consistent, but that leads to old timestamps in the output
directory if they are unzipped as part of the build.  Use
unzip -DD when unzipping to update the timestamps.

Bug: 161015009
Test: touch -d 2020-01-01 ref; find $OUT/system -not -newer ref
Change-Id: I6f08ba8695d90a8225cfc04e679755e6296deed0
2020-07-12 05:38:03 +00:00