Loading libs/androidfw/ApkAssets.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ std::unique_ptr<ApkAssets> ApkAssets::LoadOverlay(const std::string& idmap_path, if (IsFabricatedOverlay(overlay_path)) { // Fabricated overlays do not contain resource definitions. All of the overlay resource values // are defined inline in the idmap. overlay_assets = EmptyAssetsProvider::Create(); overlay_assets = EmptyAssetsProvider::Create(overlay_path); } else { // The overlay should be an APK. overlay_assets = ZipAssetsProvider::Create(overlay_path); Loading libs/androidfw/AssetManager2.cpp +16 −16 Original line number Diff line number Diff line Loading @@ -612,6 +612,11 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry( result->entry = overlay_entry.GetInlineValue(); result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable(); result->cookie = id_map.cookie; if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back( Resolution::Step{Resolution::Step::Type::OVERLAID_INLINE, String8(), result->cookie}); } continue; } Loading Loading @@ -640,7 +645,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry( if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back( Resolution::Step{Resolution::Step::Type::OVERLAID, overlay_result->config.toString(), overlay_result->package_name, overlay_result->cookie}); } } Loading Loading @@ -723,7 +727,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::SKIPPED, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } continue; Loading @@ -741,7 +744,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::NO_ENTRY, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } continue; Loading @@ -756,7 +758,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back(Resolution::Step{resolution_type, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } Loading Loading @@ -839,16 +840,16 @@ std::string AssetManager2::GetLastResourceResolution() const { } std::stringstream log_stream; log_stream << base::StringPrintf("Resolution for 0x%08x ", resid) << resource_name_string << "\n\tFor config -" << configuration_.toString(); log_stream << base::StringPrintf("Resolution for 0x%08x %s\n" "\tFor config - %s", resid, resource_name_string.c_str(), configuration_.toString().c_str()); for (const Resolution::Step& step : last_resolution_.steps) { const static std::unordered_map<Resolution::Step::Type, const char*> kStepStrings = { {Resolution::Step::Type::INITIAL, "Found initial"}, {Resolution::Step::Type::BETTER_MATCH, "Found better"}, {Resolution::Step::Type::OVERLAID, "Overlaid"}, {Resolution::Step::Type::OVERLAID_INLINE, "Overlaid inline"}, {Resolution::Step::Type::SKIPPED, "Skipped"}, {Resolution::Step::Type::NO_ENTRY, "No entry"} }; Loading @@ -858,8 +859,7 @@ std::string AssetManager2::GetLastResourceResolution() const { continue; } log_stream << "\n\t" << prefix->second << ": " << *step.package_name << " (" << apk_assets_[step.cookie]->GetDebugName() << ")"; log_stream << "\n\t" << prefix->second << ": " << apk_assets_[step.cookie]->GetDebugName(); if (!step.config_name.isEmpty()) { log_stream << " - " << step.config_name; } Loading libs/androidfw/AssetsProvider.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -386,8 +386,15 @@ bool MultiAssetsProvider::IsUpToDate() const { return primary_->IsUpToDate() && secondary_->IsUpToDate(); } EmptyAssetsProvider::EmptyAssetsProvider(std::optional<std::string>&& path) : path_(std::move(path)) {} std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create() { return std::make_unique<EmptyAssetsProvider>(); return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider({})); } std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create(const std::string& path) { return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider(path)); } std::unique_ptr<Asset> EmptyAssetsProvider::OpenInternal(const std::string& /* path */, Loading @@ -406,10 +413,16 @@ bool EmptyAssetsProvider::ForEachFile( } std::optional<std::string_view> EmptyAssetsProvider::GetPath() const { if (path_.has_value()) { return *path_; } return {}; } const std::string& EmptyAssetsProvider::GetDebugName() const { if (path_.has_value()) { return *path_; } const static std::string kEmpty = kEmptyDebugString; return kEmpty; } Loading libs/androidfw/include/androidfw/AssetManager2.h +1 −4 Original line number Diff line number Diff line Loading @@ -458,6 +458,7 @@ class AssetManager2 { INITIAL, BETTER_MATCH, OVERLAID, OVERLAID_INLINE, SKIPPED, NO_ENTRY, }; Loading @@ -468,10 +469,6 @@ class AssetManager2 { // Built name of configuration for this step. String8 config_name; // Marks the package name of the better resource found in this step. const std::string* package_name; // ApkAssetsCookie cookie = kInvalidCookie; }; Loading libs/androidfw/include/androidfw/AssetsProvider.h +5 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ struct MultiAssetsProvider : public AssetsProvider { // Does not provide any assets. struct EmptyAssetsProvider : public AssetsProvider { static std::unique_ptr<AssetsProvider> Create(); static std::unique_ptr<AssetsProvider> Create(const std::string& path); bool ForEachFile(const std::string& path, const std::function<void(const StringPiece&, FileType)>& f) const override; Loading @@ -188,6 +189,10 @@ struct EmptyAssetsProvider : public AssetsProvider { protected: std::unique_ptr<Asset> OpenInternal(const std::string& path, Asset::AccessMode mode, bool* file_exists) const override; private: explicit EmptyAssetsProvider(std::optional<std::string>&& path); std::optional<std::string> path_; }; } // namespace android Loading Loading
libs/androidfw/ApkAssets.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ std::unique_ptr<ApkAssets> ApkAssets::LoadOverlay(const std::string& idmap_path, if (IsFabricatedOverlay(overlay_path)) { // Fabricated overlays do not contain resource definitions. All of the overlay resource values // are defined inline in the idmap. overlay_assets = EmptyAssetsProvider::Create(); overlay_assets = EmptyAssetsProvider::Create(overlay_path); } else { // The overlay should be an APK. overlay_assets = ZipAssetsProvider::Create(overlay_path); Loading
libs/androidfw/AssetManager2.cpp +16 −16 Original line number Diff line number Diff line Loading @@ -612,6 +612,11 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry( result->entry = overlay_entry.GetInlineValue(); result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable(); result->cookie = id_map.cookie; if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back( Resolution::Step{Resolution::Step::Type::OVERLAID_INLINE, String8(), result->cookie}); } continue; } Loading Loading @@ -640,7 +645,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry( if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back( Resolution::Step{Resolution::Step::Type::OVERLAID, overlay_result->config.toString(), overlay_result->package_name, overlay_result->cookie}); } } Loading Loading @@ -723,7 +727,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::SKIPPED, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } continue; Loading @@ -741,7 +744,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::NO_ENTRY, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } continue; Loading @@ -756,7 +758,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal( if (UNLIKELY(logging_enabled)) { last_resolution_.steps.push_back(Resolution::Step{resolution_type, this_config.toString(), &loaded_package->GetPackageName(), cookie}); } Loading Loading @@ -839,16 +840,16 @@ std::string AssetManager2::GetLastResourceResolution() const { } std::stringstream log_stream; log_stream << base::StringPrintf("Resolution for 0x%08x ", resid) << resource_name_string << "\n\tFor config -" << configuration_.toString(); log_stream << base::StringPrintf("Resolution for 0x%08x %s\n" "\tFor config - %s", resid, resource_name_string.c_str(), configuration_.toString().c_str()); for (const Resolution::Step& step : last_resolution_.steps) { const static std::unordered_map<Resolution::Step::Type, const char*> kStepStrings = { {Resolution::Step::Type::INITIAL, "Found initial"}, {Resolution::Step::Type::BETTER_MATCH, "Found better"}, {Resolution::Step::Type::OVERLAID, "Overlaid"}, {Resolution::Step::Type::OVERLAID_INLINE, "Overlaid inline"}, {Resolution::Step::Type::SKIPPED, "Skipped"}, {Resolution::Step::Type::NO_ENTRY, "No entry"} }; Loading @@ -858,8 +859,7 @@ std::string AssetManager2::GetLastResourceResolution() const { continue; } log_stream << "\n\t" << prefix->second << ": " << *step.package_name << " (" << apk_assets_[step.cookie]->GetDebugName() << ")"; log_stream << "\n\t" << prefix->second << ": " << apk_assets_[step.cookie]->GetDebugName(); if (!step.config_name.isEmpty()) { log_stream << " - " << step.config_name; } Loading
libs/androidfw/AssetsProvider.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -386,8 +386,15 @@ bool MultiAssetsProvider::IsUpToDate() const { return primary_->IsUpToDate() && secondary_->IsUpToDate(); } EmptyAssetsProvider::EmptyAssetsProvider(std::optional<std::string>&& path) : path_(std::move(path)) {} std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create() { return std::make_unique<EmptyAssetsProvider>(); return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider({})); } std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create(const std::string& path) { return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider(path)); } std::unique_ptr<Asset> EmptyAssetsProvider::OpenInternal(const std::string& /* path */, Loading @@ -406,10 +413,16 @@ bool EmptyAssetsProvider::ForEachFile( } std::optional<std::string_view> EmptyAssetsProvider::GetPath() const { if (path_.has_value()) { return *path_; } return {}; } const std::string& EmptyAssetsProvider::GetDebugName() const { if (path_.has_value()) { return *path_; } const static std::string kEmpty = kEmptyDebugString; return kEmpty; } Loading
libs/androidfw/include/androidfw/AssetManager2.h +1 −4 Original line number Diff line number Diff line Loading @@ -458,6 +458,7 @@ class AssetManager2 { INITIAL, BETTER_MATCH, OVERLAID, OVERLAID_INLINE, SKIPPED, NO_ENTRY, }; Loading @@ -468,10 +469,6 @@ class AssetManager2 { // Built name of configuration for this step. String8 config_name; // Marks the package name of the better resource found in this step. const std::string* package_name; // ApkAssetsCookie cookie = kInvalidCookie; }; Loading
libs/androidfw/include/androidfw/AssetsProvider.h +5 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ struct MultiAssetsProvider : public AssetsProvider { // Does not provide any assets. struct EmptyAssetsProvider : public AssetsProvider { static std::unique_ptr<AssetsProvider> Create(); static std::unique_ptr<AssetsProvider> Create(const std::string& path); bool ForEachFile(const std::string& path, const std::function<void(const StringPiece&, FileType)>& f) const override; Loading @@ -188,6 +189,10 @@ struct EmptyAssetsProvider : public AssetsProvider { protected: std::unique_ptr<Asset> OpenInternal(const std::string& path, Asset::AccessMode mode, bool* file_exists) const override; private: explicit EmptyAssetsProvider(std::optional<std::string>&& path); std::optional<std::string> path_; }; } // namespace android Loading