Merge "Set ApkAssets path for fabricated rros" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
47fb18bed8
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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});
|
||||
}
|
||||
|
||||
@@ -839,18 +840,18 @@ 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::SKIPPED, "Skipped"},
|
||||
{Resolution::Step::Type::NO_ENTRY, "No entry"}
|
||||
{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"}
|
||||
};
|
||||
|
||||
const auto prefix = kStepStrings.find(step.type);
|
||||
@@ -858,10 +859,9 @@ 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;
|
||||
log_stream << " - " << step.config_name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 */,
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -458,6 +458,7 @@ class AssetManager2 {
|
||||
INITIAL,
|
||||
BETTER_MATCH,
|
||||
OVERLAID,
|
||||
OVERLAID_INLINE,
|
||||
SKIPPED,
|
||||
NO_ENTRY,
|
||||
};
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
|
||||
@@ -765,7 +765,8 @@ TEST_F(AssetManager2Test, GetLastPathWithSingleApkAssets) {
|
||||
|
||||
auto result = assetmanager.GetLastResourceResolution();
|
||||
EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
|
||||
"\tFor config -de\n\tFound initial: com.android.basic (basic/basic.apk)", result);
|
||||
"\tFor config - de\n"
|
||||
"\tFound initial: basic/basic.apk", result);
|
||||
}
|
||||
|
||||
TEST_F(AssetManager2Test, GetLastPathWithMultipleApkAssets) {
|
||||
@@ -784,9 +785,9 @@ TEST_F(AssetManager2Test, GetLastPathWithMultipleApkAssets) {
|
||||
|
||||
auto result = assetmanager.GetLastResourceResolution();
|
||||
EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
|
||||
"\tFor config -de\n"
|
||||
"\tFound initial: com.android.basic (basic/basic.apk)\n"
|
||||
"\tFound better: com.android.basic (basic/basic_de_fr.apk) -de", result);
|
||||
"\tFor config - de\n"
|
||||
"\tFound initial: basic/basic.apk\n"
|
||||
"\tFound better: basic/basic_de_fr.apk - de", result);
|
||||
}
|
||||
|
||||
TEST_F(AssetManager2Test, GetLastPathAfterDisablingReturnsEmpty) {
|
||||
|
||||
Reference in New Issue
Block a user