Extend DumpManifest unit to export badging data into proto.

Bug: b/228950123
Test: Dump_test.cpp
Change-Id: I3c228767b435d0e31f1eec1f34daeec1065628d0
diff --git a/tools/aapt2/ApkInfo.proto b/tools/aapt2/ApkInfo.proto
new file mode 100644
index 0000000..80bdccb
--- /dev/null
+++ b/tools/aapt2/ApkInfo.proto
@@ -0,0 +1,338 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+syntax = "proto3";
+
+import "frameworks/base/tools/aapt2/Resources.proto";
+
+package aapt.pb;
+
+option java_package = "com.android.aapt";
+
+// Top level message representing data extracted from the APK for 'apkinfo'
+// command.
+message ApkInfo {
+  message XmlFile {
+    string path = 1;
+    XmlNode root = 2;
+  }
+
+  Badging badging = 1;
+  ResourceTable resource_table = 2;
+  repeated XmlFile xml_files = 3;
+}
+
+// Data extracted from the manifest of the APK.
+message Badging {
+  PackageInfo package = 1;
+  Application application = 2;
+  UsesSdk uses_sdk = 3;
+  UsesConfiguration uses_configuration = 4;
+  SupportsScreen supports_screen = 5;
+  SupportsInput supports_input = 6;
+  LaunchableActivity launchable_activity = 7;
+  LeanbackLaunchableActivity leanback_launchable_activity = 8;
+  StaticLibrary static_library = 9;
+  SdkLibrary sdk_library = 10;
+  Overlay overlay = 11;
+  PackageVerifier package_verifier = 12;
+  CompatibleScreens compatible_screens = 13;
+  Architectures architectures = 14;
+  SupportsGlTexture supports_gl_texture = 15;
+  Components components = 16;
+
+  repeated string locales = 17;
+  repeated int32 densities = 18;
+
+  repeated FeatureGroup feature_groups = 53;
+  repeated UsesPermission uses_permissions = 54;
+  repeated Permission permissions = 55;
+  repeated UsesLibrary uses_libraries = 56;
+  repeated UsesStaticLibrary uses_static_libraries = 57;
+  repeated UsesSdkLibrary uses_sdk_libraries = 58;
+  repeated UsesNativeLibrary uses_native_libraries = 59;
+  repeated UsesPackage uses_packages = 51;
+
+  repeated Metadata metadata = 62;
+  repeated Property properties = 63;
+}
+
+// Information extracted about package from <manifest> and
+// <original-package> tags.
+message PackageInfo {
+  enum InstallLocation {
+    DEFAULT_INSTALL_LOCATION = 0;
+    AUTO = 1;
+    INTERNAL_ONLY = 2;
+    PREFER_EXTERNAL = 3;
+  }
+
+  string package = 1;
+  int32 version_code = 2;
+  string version_name = 3;
+
+  string split = 4;
+
+  string platform_version_name = 5;
+  string platform_version_code = 6;
+
+  int32 compile_sdk_version = 7;
+  string compile_sdk_version_codename = 8;
+
+  InstallLocation install_location = 9;
+
+  string original_package = 10;
+}
+
+// Information extracted from <application> element.
+message Application {
+  string label = 1;
+  string icon = 2;
+  string banner = 3;
+
+  bool test_only = 4;
+  bool game = 5;
+  bool debuggable = 6;
+
+  map<string, string> locale_labels = 8;
+  map<int32, string> density_icons = 9;
+}
+
+// Components defined in the APK.
+message Components {
+  bool main = 1;
+  bool other_activities = 2;
+  bool other_receivers = 3;
+  bool other_services = 4;
+
+  repeated string provided_components = 5;
+}
+
+// Application's min and target SDKs.
+message UsesSdk {
+  oneof min_sdk {
+    int32 min_sdk_version = 2;
+    string min_sdk_version_name = 3;
+  }
+  int32 max_sdk_version = 4;
+  oneof target_sdk {
+    int32 target_sdk_version = 5;
+    string target_sdk_version_name = 6;
+  }
+}
+
+message UsesConfiguration {
+  int32 req_touch_screen = 1;
+  int32 req_keyboard_type = 2;
+  int32 req_hard_keyboard = 3;
+  int32 req_navigation = 4;
+  int32 req_five_way_nav = 5;
+}
+
+// Screens supported by this application.
+message SupportsScreen {
+  enum ScreenType {
+    UNSPECIFIED_SCREEN_TYPE = 0;
+    SMALL = 1;
+    NORMAL = 2;
+    LARGE = 3;
+    XLARGE = 4;
+  }
+  repeated ScreenType screens = 1;
+  bool supports_any_densities = 2;
+  int32 requires_smallest_width_dp = 3;
+  int32 compatible_width_limit_dp = 4;
+  int32 largest_width_limit_dp = 5;
+}
+
+// Inputs supported by this application.
+message SupportsInput {
+  repeated string inputs = 1;
+}
+
+// Information about used features which is extracted from <uses-permission>
+// elements or implied from permissions.
+message Feature {
+  message ImpliedData {
+      bool from_sdk_23_permission = 1;
+      repeated string reasons = 2;
+  }
+
+  string name = 1;
+  bool required = 2;
+  int32 version = 3;
+
+  ImpliedData implied_data = 4;
+}
+
+message FeatureGroup {
+  string label = 1;
+  int32 open_gles_version = 2;
+  repeated Feature features = 3;
+}
+
+// Information about permission requested by the application.
+message UsesPermission {
+  message PermissionFlags {
+    bool never_for_location = 1;
+  }
+
+  string name = 1;
+  int32 max_sdk_version = 2;
+  bool required = 3;
+  bool implied = 4;
+  bool sdk23_and_above = 5;
+
+  repeated string required_features = 6;
+  repeated string required_not_features = 7;
+
+  PermissionFlags permission_flags = 8;
+}
+
+// Permission defined by the application.
+message Permission {
+  string name = 1;
+}
+
+// Data extracted about launchable activity. Launchable activity is an entry
+// point on phone and tablet devices.
+message LaunchableActivity {
+  string name = 1;
+  string icon = 2;
+  string label = 3;
+}
+
+// Data extracted about leanback launchable activity. Leanback launchable
+// activity is an entry point on TV devices.
+message LeanbackLaunchableActivity {
+  string name = 1;
+  string icon = 2;
+  string label = 3;
+  string banner = 4;
+}
+
+// Library used by the application.
+message UsesLibrary {
+  string name = 1;
+  bool required = 2;
+}
+
+// Static library this APK declares.
+message StaticLibrary {
+  string name = 1;
+  int32 version = 2;
+  int32 version_major = 3;
+}
+
+// Static library used by the application.
+message UsesStaticLibrary {
+  string name = 1;
+  int32 version = 2;
+  int32 version_major = 3;
+  repeated string certificates = 4;
+}
+
+// SDK library this APK declares.
+message SdkLibrary {
+  string name = 1;
+  int32 version_major = 2;
+}
+
+// SDK library used by the application.
+message UsesSdkLibrary {
+  string name = 1;
+  int32 version_major = 2;
+  repeated string certificates = 3;
+}
+
+// Native library used by the application.
+message UsesNativeLibrary {
+  string name = 1;
+  bool required = 2;
+}
+
+// Information extracted from <meta-data> elements defined across
+// AndroidManifest.xml.
+message Metadata {
+  string name = 1;
+  oneof value {
+    string value_string = 2;
+    int32 value_int = 3;
+  }
+  oneof resource {
+    string resource_string = 4;
+    int32 resource_int = 5;
+  }
+}
+
+// Information about overlay that is declared in the APK.
+message Overlay {
+  string target_package = 1;
+  int32 priority = 2;
+  bool static = 3;
+  string required_property_name = 4;
+  string required_property_value = 5;
+}
+
+// Data extracted from <package-verifier> element.
+message PackageVerifier {
+  string name = 1;
+  string public_key = 2;
+}
+
+// External packages used by the application
+message UsesPackage {
+  string name = 1;
+  string package_type = 2;
+  int32 version = 3;
+  int32 version_major = 4;
+  repeated string certificates = 5;
+}
+
+// Open GL textures format supported by the current application.
+message SupportsGlTexture {
+  repeated string name = 1;
+}
+
+// Screens compatible with the application.
+message CompatibleScreens {
+  message Screen {
+    int32 size = 1;
+    int32 density = 2;
+  }
+
+  repeated Screen screens = 1;
+}
+
+// Architectures supported by the application.
+message Architectures {
+  repeated string architectures = 1;
+  repeated string alt_architectures = 2;
+}
+
+// Information extracted from <property> elements defined across
+// AndroidManifest.xml.
+message Property {
+  string name = 1;
+  oneof value {
+    string value_string = 2;
+    int32 value_int = 3;
+  }
+  oneof resource {
+    string resource_string = 4;
+    int32 resource_int = 5;
+  }
+}
\ No newline at end of file