OMS: include idmap data in dump
Teach the overlay manager to ask the idmap service to pretty print the
contents of each idmap file as part of OMS dump. This creates a single
entry point for dumping both OMS and idmap data, and circumvents the
problem of accessing the idmap service if it has been killed due to
inactivity.
Example idmap section:
---- 8< ----
IDMAP OF com.android.theme.color.sand
Paths:
target path : /system/framework/framework-res.apk
overlay path : /product/overlay/AccentColorSand/AccentColorSandOverlay.apk
Debug info:
W failed to find resource 'string/accent_color_overlay'
Mapping:
0x0106006e -> 0x7f010000 (color/accent_device_default_dark -> color/accent_device_default_dark)
0x01060070 -> 0x7f010001 (color/accent_device_default_light -> color/accent_device_default_light)
---- >8 ----
Bug: 189963636
Test: adb exec-out dumpsys
Test: adb exec-out cmd overlay dump
Test: adb exec-out cmd overlay dump <overlay-identifier>
Change-Id: I9de6ba646ad4714c9d0f0d8081fbf632577107e7
This commit is contained in:
committed by
Ryan Mitchell
parent
a384fb7637
commit
99ae898d3c
@@ -33,6 +33,7 @@
|
||||
#include "idmap2/BinaryStreamVisitor.h"
|
||||
#include "idmap2/FileUtils.h"
|
||||
#include "idmap2/Idmap.h"
|
||||
#include "idmap2/PrettyPrintVisitor.h"
|
||||
#include "idmap2/Result.h"
|
||||
#include "idmap2/SysTrace.h"
|
||||
|
||||
@@ -45,6 +46,7 @@ using android::idmap2::FabricatedOverlayContainer;
|
||||
using android::idmap2::Idmap;
|
||||
using android::idmap2::IdmapHeader;
|
||||
using android::idmap2::OverlayResourceContainer;
|
||||
using android::idmap2::PrettyPrintVisitor;
|
||||
using android::idmap2::TargetResourceContainer;
|
||||
using android::idmap2::utils::kIdmapCacheDir;
|
||||
using android::idmap2::utils::kIdmapFilePermissionMask;
|
||||
@@ -352,4 +354,24 @@ binder::Status Idmap2Service::deleteFabricatedOverlay(const std::string& overlay
|
||||
return ok();
|
||||
}
|
||||
|
||||
binder::Status Idmap2Service::dumpIdmap(const std::string& overlay_path,
|
||||
std::string* _aidl_return) {
|
||||
assert(_aidl_return);
|
||||
|
||||
const auto idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_path);
|
||||
std::ifstream fin(idmap_path);
|
||||
const auto idmap = Idmap::FromBinaryStream(fin);
|
||||
fin.close();
|
||||
if (!idmap) {
|
||||
return error(idmap.GetErrorMessage());
|
||||
}
|
||||
|
||||
std::stringstream stream;
|
||||
PrettyPrintVisitor visitor(stream);
|
||||
(*idmap)->accept(&visitor);
|
||||
*_aidl_return = stream.str();
|
||||
|
||||
return ok();
|
||||
}
|
||||
|
||||
} // namespace android::os
|
||||
|
||||
@@ -60,6 +60,8 @@ class Idmap2Service : public BinderService<Idmap2Service>, public BnIdmap2 {
|
||||
binder::Status getFabricatedOverlayInfos(
|
||||
std::vector<os::FabricatedOverlayInfo>* _aidl_return) override;
|
||||
|
||||
binder::Status dumpIdmap(const std::string& overlay_path, std::string* _aidl_return) override;
|
||||
|
||||
private:
|
||||
// idmap2d is killed after a period of inactivity, so any information stored on this class should
|
||||
// be able to be recalculated if idmap2 dies and restarts.
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
package android.os;
|
||||
|
||||
import android.os.FabricatedOverlayInternal;
|
||||
import android.os.FabricatedOverlayInfo;
|
||||
import android.os.FabricatedOverlayInternal;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
@@ -40,4 +40,5 @@ interface IIdmap2 {
|
||||
@nullable FabricatedOverlayInfo createFabricatedOverlay(in FabricatedOverlayInternal overlay);
|
||||
List<FabricatedOverlayInfo> getFabricatedOverlayInfos();
|
||||
boolean deleteFabricatedOverlay(@utf8InCpp String path);
|
||||
@utf8InCpp String dumpIdmap(@utf8InCpp String overlayApkPath);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user