This entry is not a change log listing new features, but rather an overview of the changes I faced while building the "August 25 security patches" release of Evolution X.
Sorry for the "somewhat click bait" title :).
This time around, updating the Pixel 4a to Evolution X 10.8 a mere two weeks after getting the sources from LineageOS, I discovered something called Framework Compatibility Matrix (FCM).
The Android Framework Compatibility Matrix (FCM) is an XML file that specifies the requirements the Android framework has for the device it runs on, defining what hardware abstraction layer (HAL) interfaces, kernel configurations, security policies, and other system components must be present and at what versions.
It is a key component of the Vendor Interface (VINTF) framework, which ensures compatibility between the Android framework and vendor implementations.
The FCM is used to enforce requirements at build time, runtime, and during Vendor Test Suite (VTS) testing.
It defines the minimum and maximum version ranges for HALs, kernel configurations, security policies (sepolicy), and other system components that the framework expects to be available on the device.
For instance, a framework compatibility matrix might require a specific version of the camera HAL or a particular kernel configuration.
This might sounds very abstract and the reason is that FCM were introduced to define the requirements the Android framework has, to conform with vendor implementations, thus ensuring compatibility across different devices and Android releases.
For further details on the topic, refer to the Vendor Interface documentation and specifically the Framework Compatibility Matrix documentation.
To get into the weeds of the subject, here is the kind of output one gets when the FCM requirements are no longer in line with the Pixel 4a device manifests and corresponding device compatibility matrices:
The following HALs in device manifest are not declared in FCM <= level 5:
android.hardware.audio.effect@7.0::IEffectsFactory/default
android.hardware.audio@7.0::IDevicesFactory/default
android.hardware.boot.IBootControl/default (@1)
android.hardware.camera.provider.ICameraProvider/internal/0 (@1)
android.hardware.contexthub.IContextHub/default (@3)
android.hardware.drm.IDrmFactory/clearkey (@1)
android.hardware.drm.IDrmFactory/widevine (@1)
android.hardware.identity.IIdentityCredentialStore/default (@4)
android.hardware.input.processor.IInputProcessor/default (@1)
android.hardware.memtrack.IMemtrack/default (@1)
android.hardware.nfc.INfc/default (@1)
android.hardware.power.IPower/default (@5)
android.hardware.thermal.IThermal/default (@2)
android.hardware.usb.IUsb/default (@1)
android.hardware.vibrator.IVibrator/default (@2)
android.hardware.wifi.IWifi/default (@2)
android.hardware.wifi.hostapd.IHostapd/default (@2)
android.hardware.wifi.supplicant.ISupplicant/default (@3)
vendor.lineage.livedisplay.IPictureAdjustment/default (@1)
INCOMPATIBLE
2025-08-21 22:24:45 - check_target_files_vintf.py - INFO : stderr: ERROR: files are incompatible: The following instances are in the device manifest but not specified in framework compatibility matrix:
vendor.lineage.livedisplay.IPictureAdjustment/default (@1)
Suggested fix:
1. Update deprecated HALs to the latest version.
2. Check for any typos in device manifest or framework compatibility matrices with FCM version >= 5.
3. For new platform HALs, add them to any framework compatibility matrix with FCM version >= 5 where applicable.
4. For device-specific HALs, add to DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE or DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE.: Success
[...]
RuntimeError: VINTF compatibility check failed
Note that all changes to solve these issues were done in the repo project "vendor/lineage/" within the file "config/device_framework_matrix.xml".
So I had to amend the aforementioned FCM XML file to add new requirements that were introduced in the framework when I was building Android 15 with August 2025 security patches for the Pixel 4a.
The tricky part was to get the XML syntax right, since many revisions of the compatibility matrix format were introduced alongside each AOSP release throughout the years.
Long story short, I finally came up with the new requirements written with proper syntax : you can have a look at my change to update FCM requirements introduced during Evolution X 10.8 rebase on my Github repository.
In the process, I also stumbled upon a tool that might ease the XML file generation if this occurs again, check it out:
Comments