Loading tools/aapt2/LoadedApk.cpp +19 −7 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "format/binary/TableFlattener.h" #include "format/binary/XmlFlattener.h" #include "format/proto/ProtoDeserialize.h" #include "format/proto/ProtoSerialize.h" #include "io/BigBufferStream.h" #include "io/Util.h" #include "xml/XmlDom.h" Loading Loading @@ -110,7 +111,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection( return {}; } return util::make_unique<LoadedApk>(source, std::move(collection), std::move(table), std::move(manifest)); std::move(manifest), ApkFormat::kProto); } std::unique_ptr<LoadedApk> LoadedApk::LoadBinaryApkFromFileCollection( Loading Loading @@ -153,7 +154,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadBinaryApkFromFileCollection( return {}; } return util::make_unique<LoadedApk>(source, std::move(collection), std::move(table), std::move(manifest)); std::move(manifest), ApkFormat::kBinary); } bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options, Loading Loading @@ -205,7 +206,7 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } // The resource table needs to be re-serialized since it might have changed. if (path == "resources.arsc") { if (format_ == ApkFormat::kBinary && path == kApkResourceTablePath) { BigBuffer buffer(4096); // TODO(adamlesinski): How to determine if there were sparse entries (and if to encode // with sparse entries) b/35389232. Loading @@ -215,11 +216,22 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } io::BigBufferInputStream input_stream(&buffer); if (!io::CopyInputStreamToArchive(context, &input_stream, path, ArchiveEntry::kAlign, if (!io::CopyInputStreamToArchive(context, &input_stream, path, ArchiveEntry::kAlign, writer)) { return false; } } else if (format_ == ApkFormat::kProto && path == kProtoResourceTablePath) { pb::ResourceTable pb_table; SerializeTableToPb(*split_table, &pb_table); if (!io::CopyProtoToArchive(context, &pb_table, path, ArchiveEntry::kAlign, writer)) { return false; } } else if (manifest != nullptr && path == "AndroidManifest.xml") { BigBuffer buffer(8192); XmlFlattenerOptions xml_flattener_options; Loading @@ -246,9 +258,9 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } ApkFormat LoadedApk::DetermineApkFormat(io::IFileCollection* apk) { if (apk->FindFile("resources.arsc") != nullptr) { if (apk->FindFile(kApkResourceTablePath) != nullptr) { return ApkFormat::kBinary; } else if (apk->FindFile("resources.pb") != nullptr) { } else if (apk->FindFile(kProtoResourceTablePath) != nullptr) { return ApkFormat::kProto; } else { // If the resource table is not present, attempt to read the manifest. Loading tools/aapt2/LoadedApk.h +5 −2 Original line number Diff line number Diff line Loading @@ -57,11 +57,13 @@ class LoadedApk { const Source& source, std::unique_ptr<io::IFileCollection> collection, IDiagnostics* diag); LoadedApk(const Source& source, std::unique_ptr<io::IFileCollection> apk, std::unique_ptr<ResourceTable> table, std::unique_ptr<xml::XmlResource> manifest) std::unique_ptr<ResourceTable> table, std::unique_ptr<xml::XmlResource> manifest, const ApkFormat& format) : source_(source), apk_(std::move(apk)), table_(std::move(table)), manifest_(std::move(manifest)) { manifest_(std::move(manifest)), format_(format) { } io::IFileCollection* GetFileCollection() { Loading Loading @@ -112,6 +114,7 @@ class LoadedApk { std::unique_ptr<io::IFileCollection> apk_; std::unique_ptr<ResourceTable> table_; std::unique_ptr<xml::XmlResource> manifest_; ApkFormat format_; static ApkFormat DetermineApkFormat(io::IFileCollection* apk); }; Loading tools/aapt2/optimize/MultiApkGenerator_test.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ class MultiApkGeneratorTest : public ::testing::Test { TEST_F(MultiApkGeneratorTest, VersionFilterNewerVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(19).Build(); FilterChain chain; Loading @@ -131,7 +131,7 @@ TEST_F(MultiApkGeneratorTest, VersionFilterNewerVersion) { TEST_F(MultiApkGeneratorTest, VersionFilterOlderVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(1).Build(); FilterChain chain; Loading @@ -156,7 +156,7 @@ TEST_F(MultiApkGeneratorTest, VersionFilterOlderVersion) { TEST_F(MultiApkGeneratorTest, VersionFilterNoVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(1).Build(); FilterChain chain; Loading Loading
tools/aapt2/LoadedApk.cpp +19 −7 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "format/binary/TableFlattener.h" #include "format/binary/XmlFlattener.h" #include "format/proto/ProtoDeserialize.h" #include "format/proto/ProtoSerialize.h" #include "io/BigBufferStream.h" #include "io/Util.h" #include "xml/XmlDom.h" Loading Loading @@ -110,7 +111,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection( return {}; } return util::make_unique<LoadedApk>(source, std::move(collection), std::move(table), std::move(manifest)); std::move(manifest), ApkFormat::kProto); } std::unique_ptr<LoadedApk> LoadedApk::LoadBinaryApkFromFileCollection( Loading Loading @@ -153,7 +154,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadBinaryApkFromFileCollection( return {}; } return util::make_unique<LoadedApk>(source, std::move(collection), std::move(table), std::move(manifest)); std::move(manifest), ApkFormat::kBinary); } bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options, Loading Loading @@ -205,7 +206,7 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } // The resource table needs to be re-serialized since it might have changed. if (path == "resources.arsc") { if (format_ == ApkFormat::kBinary && path == kApkResourceTablePath) { BigBuffer buffer(4096); // TODO(adamlesinski): How to determine if there were sparse entries (and if to encode // with sparse entries) b/35389232. Loading @@ -215,11 +216,22 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } io::BigBufferInputStream input_stream(&buffer); if (!io::CopyInputStreamToArchive(context, &input_stream, path, ArchiveEntry::kAlign, if (!io::CopyInputStreamToArchive(context, &input_stream, path, ArchiveEntry::kAlign, writer)) { return false; } } else if (format_ == ApkFormat::kProto && path == kProtoResourceTablePath) { pb::ResourceTable pb_table; SerializeTableToPb(*split_table, &pb_table); if (!io::CopyProtoToArchive(context, &pb_table, path, ArchiveEntry::kAlign, writer)) { return false; } } else if (manifest != nullptr && path == "AndroidManifest.xml") { BigBuffer buffer(8192); XmlFlattenerOptions xml_flattener_options; Loading @@ -246,9 +258,9 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table } ApkFormat LoadedApk::DetermineApkFormat(io::IFileCollection* apk) { if (apk->FindFile("resources.arsc") != nullptr) { if (apk->FindFile(kApkResourceTablePath) != nullptr) { return ApkFormat::kBinary; } else if (apk->FindFile("resources.pb") != nullptr) { } else if (apk->FindFile(kProtoResourceTablePath) != nullptr) { return ApkFormat::kProto; } else { // If the resource table is not present, attempt to read the manifest. Loading
tools/aapt2/LoadedApk.h +5 −2 Original line number Diff line number Diff line Loading @@ -57,11 +57,13 @@ class LoadedApk { const Source& source, std::unique_ptr<io::IFileCollection> collection, IDiagnostics* diag); LoadedApk(const Source& source, std::unique_ptr<io::IFileCollection> apk, std::unique_ptr<ResourceTable> table, std::unique_ptr<xml::XmlResource> manifest) std::unique_ptr<ResourceTable> table, std::unique_ptr<xml::XmlResource> manifest, const ApkFormat& format) : source_(source), apk_(std::move(apk)), table_(std::move(table)), manifest_(std::move(manifest)) { manifest_(std::move(manifest)), format_(format) { } io::IFileCollection* GetFileCollection() { Loading Loading @@ -112,6 +114,7 @@ class LoadedApk { std::unique_ptr<io::IFileCollection> apk_; std::unique_ptr<ResourceTable> table_; std::unique_ptr<xml::XmlResource> manifest_; ApkFormat format_; static ApkFormat DetermineApkFormat(io::IFileCollection* apk); }; Loading
tools/aapt2/optimize/MultiApkGenerator_test.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ class MultiApkGeneratorTest : public ::testing::Test { TEST_F(MultiApkGeneratorTest, VersionFilterNewerVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(19).Build(); FilterChain chain; Loading @@ -131,7 +131,7 @@ TEST_F(MultiApkGeneratorTest, VersionFilterNewerVersion) { TEST_F(MultiApkGeneratorTest, VersionFilterOlderVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(1).Build(); FilterChain chain; Loading @@ -156,7 +156,7 @@ TEST_F(MultiApkGeneratorTest, VersionFilterOlderVersion) { TEST_F(MultiApkGeneratorTest, VersionFilterNoVersion) { std::unique_ptr<ResourceTable> table = BuildTable(); LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}}; LoadedApk apk = {{"test.apk"}, {}, std::move(table), {}, kBinary}; std::unique_ptr<IAaptContext> ctx = test::ContextBuilder().SetMinSdkVersion(1).Build(); FilterChain chain; Loading