summaryrefslogtreecommitdiff
path: root/dexpreopt/class_loader_context_test.go
AgeCommit message (Collapse)Author
2021-04-22Fix toJsonClassLoaderContextRec size bugJeongik Cha
toJsonClassLoaderContextRec's size is twice as large than expected. And the initial values is filled with null value. Bug: 158843648 Test: m nothing(testcase is added) Change-Id: I24c23269bd16baa18481f34b85c543d41f26d0e0
2021-01-05Remove obsolete class loader context API and update unit tests.Ulya Trafimovich
The removed API has been unused since https://r.android.com/1533342 (except for unit tests). Changes in the unit tests reflect the change of API in https://r.android.com/1533342: early errors caused by unknown library paths at CLC construction time have been replaced with late errors at the time of CLC validation. Bug: 132357300 Test: m nothing Change-Id: I739c7c41b6f882b7e28cdd6acd05961d754d8687
2020-12-23Fix library order in class loader context to agree with PackageManager.Ulya Trafimovich
PackageManager adds compatibility libraries for different SDK versions in descending order, and Soong should do the same. Bug: 132357300 Test: lunch aosp_cf_x86_phone-userdebug && m \ && launch_cvd \ && adb wait-for-device \ && adb logcat | grep -E 'ClassLoaderContext [a-z ]+ mismatch' [no messages "ClassLoaderContext classpath element mismatch"] Change-Id: Ib1d981808ae4022b2c6e73f407a003e8b8e9c7d6
2020-12-02Make error message more precise.Ulya Trafimovich
Bug: 132357300 Test: m nothing Change-Id: Iaac6aaf61a3bbf8476f0b11cf2c01d7d96a79920
2020-11-25Assume any <uses-library> is shared, add only toplevel ones to manifest.Ulya Trafimovich
This patch reworks the approach introduced in https://r.android.com/1450819. That patch based the decision which libraries should be added to the manifest <uses-library> tags by the manifest_fixer on the "shared" status of the library. That approach is incorrect for two reasons: - It doesn't make sense to have a non-shared library in class loader context ("shared" libraries are those specified in frameworks/base/data/etc/platform.xml, and they are the only ones that PackageManager knows about). - It doesn't make sense to add anything but the top-level of the class loader context tree to the manifest, because this part of the tree is flattened to a sequence, and PackageManager cannot restore it to the previous tree shape (there is an information loss). This patch removes the "shared" bit of information from class loader context elements and assumes that all libraries that end up in class loader context are shared. Consequently, only the top-level libraries should be passed to manifest_fixer. Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Bug: 168686456 Change-Id: I902690f0f38f1047fa79cf6ccbe956077eceaab0
2020-11-16Do not add dependencies of shared SDK libraries to manifest_fixer.Ulya Trafimovich
Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Bug: 168686456 Change-Id: Ibd9742684fa6a8f1353ca0e513f7fa814a6ec9fc
2020-11-16Add nested class loader subcontext at the proper hierarchy level.Ulya Trafimovich
When adding a subcontext in a class loader context tree, there are two possible cases: 1) the root of the subcontext is itself a <uses-library> and should be present as a node in the tree, or 2) the root is not a <uses-library>, but some of its dependencies are -- in that case they should be disconnected from the root, and the resulting forrest should be added at the top-level. Example: 1) C is a <uses-library>: A ├── B └── C ├── D └── E └── F 2) C is not a <uses-library>: A ├── B ├── D └── E └── F Before the patch subcontexts for transitive dependencies were added before the subcontext for the direct dependency (even if it was a <uses-library>, resulting in case-2 hierarchy when case-1 should have been used. Previosuly this didn't matter because class loader context was a flat set of libraries, but now it matters because class loader context is a tree. This patch changes the order in which libraries are added, so that direct dependencies are added before transitive ones. The context adding method now accepts an "implicit root" parameter, so that when adding transitive dependencies it can check if the corresponding direct dependency is a <uses-library> and already present in the context. Partially constructed class loader context is now propagated top-down into aapt.buildActions, so that the method can use existing part of the context to decide where the missing part should be connected. Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: I649aff9e27494306885a4f4fc90226c399636b57
2020-11-16Disallow adding nested conditional class loader context.Ulya Trafimovich
Nested conditional context doesn't make sense because conditional context is only needed for compatibility libraries, and those are only used by apps, and apps are always at the root of class loader context tree. Therefore, trying to add conditional nested context can only mean an error somewhere on the way. Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: Iadeaaf89fdb11cb23b107c6fb074b1bc765256be
2020-11-03Rework class loader context implementation.Ulya Trafimovich
The old representation consisted of a list of libraries (UsesLibraries), a list of optional libraries (OptionalUsesLibraries) and a mapping from library name to its build/install paths (LibraryPaths). The separation into lists and map was necessary because of special handling of compatibility libraries, which is now unified with normal libraries. The new representation is a mapping from target SDK version to a tree structure ClassLoaderContext. Each node of the tree represents a library and contains library name, build/install paths and a slice of subcontexts for dependencies. The same library may occur in the tree multiple times in case it is a dependency of multiple libraries. The order in which libraries are added matters (the resulting tree shape may be different). Test results have to be updated, as the resulting <uses-library> list is reodered (previously it was a sorted list of map keys, and now it is formed by a depth-first preorder traversal of the class loader tree). Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Bug: 168686456 Change-Id: I11be8cd2967f004fd58753d7c5fb99fed179cd63
2020-10-29Add unit tests for class loader context.Ulya Trafimovich
Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: I96a1e6cef86652e429b1678a655fc0b02f40d00c