Moving the LoadedApk class to its own file.
Test: Unit tests pass.
Change-Id: Id706f9ad1f3406bb73a60a33139a04745d5d72c0
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index 20439cc..8c28083 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -119,6 +119,7 @@
"java/JavaClassGenerator.cpp",
"java/ManifestClassGenerator.cpp",
"java/ProguardRules.cpp",
+ "LoadedApk.cpp",
"Locale.cpp",
"Resource.cpp",
"ResourceParser.cpp",
diff --git a/tools/aapt2/LoadedApk.cpp b/tools/aapt2/LoadedApk.cpp
new file mode 100644
index 0000000..3d466ef
--- /dev/null
+++ b/tools/aapt2/LoadedApk.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "LoadedApk.h"
+
+namespace aapt {
+
+std::unique_ptr<LoadedApk> LoadedApk::LoadApkFromPath(
+ IAaptContext* context, const StringPiece& path) {
+ Source source(path);
+ std::string error;
+ std::unique_ptr<io::ZipFileCollection> apk =
+ io::ZipFileCollection::Create(path, &error);
+ if (!apk) {
+ context->GetDiagnostics()->Error(DiagMessage(source) << error);
+ return {};
+ }
+
+ io::IFile* file = apk->FindFile("resources.arsc");
+ if (!file) {
+ context->GetDiagnostics()->Error(DiagMessage(source)
+ << "no resources.arsc found");
+ return {};
+ }
+
+ std::unique_ptr<io::IData> data = file->OpenAsData();
+ if (!data) {
+ context->GetDiagnostics()->Error(DiagMessage(source)
+ << "could not open resources.arsc");
+ return {};
+ }
+
+ std::unique_ptr<ResourceTable> table = util::make_unique<ResourceTable>();
+ BinaryResourceParser parser(context, table.get(), source, data->data(),
+ data->size());
+ if (!parser.Parse()) {
+ return {};
+ }
+
+ return util::make_unique<LoadedApk>(source, std::move(apk), std::move(table));
+}
+
+} // namespace aapt
diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h
new file mode 100644
index 0000000..0cc2d22
--- /dev/null
+++ b/tools/aapt2/LoadedApk.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AAPT_LOADEDAPK_H
+#define AAPT_LOADEDAPK_H
+
+#include "androidfw/StringPiece.h"
+
+#include "io/ZipArchive.h"
+#include "ResourceTable.h"
+#include "unflatten/BinaryResourceParser.h"
+
+using android::StringPiece;
+
+namespace aapt {
+
+/** Info about an APK loaded in memory. */
+class LoadedApk {
+ public:
+ LoadedApk(
+ const Source& source,
+ std::unique_ptr<io::IFileCollection> apk,
+ std::unique_ptr<ResourceTable> table)
+ : source_(source), apk_(std::move(apk)), table_(std::move(table)) {}
+
+ io::IFileCollection* GetFileCollection() { return apk_.get(); }
+
+ ResourceTable* GetResourceTable() { return table_.get(); }
+
+ const Source& GetSource() { return source_; }
+
+ static std::unique_ptr<LoadedApk> LoadApkFromPath(
+ IAaptContext* context, const StringPiece& path);
+
+ private:
+ Source source_;
+ std::unique_ptr<io::IFileCollection> apk_;
+ std::unique_ptr<ResourceTable> table_;
+
+ DISALLOW_COPY_AND_ASSIGN(LoadedApk);
+};
+
+} // namespace aapt
+
+#endif /* AAPT_LOADEDAPK_H */
diff --git a/tools/aapt2/diff/Diff.cpp b/tools/aapt2/diff/Diff.cpp
index de0fe40..acebeda 100644
--- a/tools/aapt2/diff/Diff.cpp
+++ b/tools/aapt2/diff/Diff.cpp
@@ -17,12 +17,10 @@
#include "android-base/macros.h"
#include "Flags.h"
-#include "ResourceTable.h"
+#include "LoadedApk.h"
#include "ValueVisitor.h"
-#include "io/ZipArchive.h"
#include "process/IResourceTableConsumer.h"
#include "process/SymbolTable.h"
-#include "unflatten/BinaryResourceParser.h"
using android::StringPiece;
@@ -51,61 +49,6 @@
SymbolTable symbol_table_;
};
-class LoadedApk {
- public:
- LoadedApk(const Source& source, std::unique_ptr<io::IFileCollection> apk,
- std::unique_ptr<ResourceTable> table)
- : source_(source), apk_(std::move(apk)), table_(std::move(table)) {}
-
- io::IFileCollection* GetFileCollection() { return apk_.get(); }
-
- ResourceTable* GetResourceTable() { return table_.get(); }
-
- const Source& GetSource() { return source_; }
-
- private:
- Source source_;
- std::unique_ptr<io::IFileCollection> apk_;
- std::unique_ptr<ResourceTable> table_;
-
- DISALLOW_COPY_AND_ASSIGN(LoadedApk);
-};
-
-static std::unique_ptr<LoadedApk> LoadApkFromPath(IAaptContext* context,
- const StringPiece& path) {
- Source source(path);
- std::string error;
- std::unique_ptr<io::ZipFileCollection> apk =
- io::ZipFileCollection::Create(path, &error);
- if (!apk) {
- context->GetDiagnostics()->Error(DiagMessage(source) << error);
- return {};
- }
-
- io::IFile* file = apk->FindFile("resources.arsc");
- if (!file) {
- context->GetDiagnostics()->Error(DiagMessage(source)
- << "no resources.arsc found");
- return {};
- }
-
- std::unique_ptr<io::IData> data = file->OpenAsData();
- if (!data) {
- context->GetDiagnostics()->Error(DiagMessage(source)
- << "could not open resources.arsc");
- return {};
- }
-
- std::unique_ptr<ResourceTable> table = util::make_unique<ResourceTable>();
- BinaryResourceParser parser(context, table.get(), source, data->data(),
- data->size());
- if (!parser.Parse()) {
- return {};
- }
-
- return util::make_unique<LoadedApk>(source, std::move(apk), std::move(table));
-}
-
static void EmitDiffLine(const Source& source, const StringPiece& message) {
std::cerr << source << ": " << message << "\n";
}
@@ -413,9 +356,9 @@
}
std::unique_ptr<LoadedApk> apk_a =
- LoadApkFromPath(&context, flags.GetArgs()[0]);
+ LoadedApk::LoadApkFromPath(&context, flags.GetArgs()[0]);
std::unique_ptr<LoadedApk> apk_b =
- LoadApkFromPath(&context, flags.GetArgs()[1]);
+ LoadedApk::LoadApkFromPath(&context, flags.GetArgs()[1]);
if (!apk_a || !apk_b) {
return 1;
}