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