| // Copyright (c) 2026, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| syntax = "proto3"; | |
| package com.android.tools.r8.libanalyzer.proto; | |
| // Don't put all messages under the outer class. | |
| option java_multiple_files = true; | |
| // Camel-case the outer class name (default is `Libraryanalyzerresult`). | |
| option java_outer_classname = "LibraryAnalyzerResultProtos"; | |
| // Java package consistent with R8 convention. | |
| option java_package = "com.android.tools.r8.libanalyzer.proto"; | |
| // Analysis result produced by the library analyzer. | |
| message LibraryAnalyzerResult { | |
| D8CompileResult d8_compile_result = 1; | |
| R8CompileResult r8_compile_result = 2; | |
| ValidateConsumerKeepRulesResult validate_consumer_keep_rules_result = 3; | |
| } | |
| message D8CompileResult { | |
| int32 dex_size_bytes = 1; | |
| } | |
| message R8CompileResult { | |
| int32 dex_size_bytes = 1; | |
| // Information about the R8 configuration, specifically the keep rules. | |
| ConfigurationSummary configuration = 2; | |
| // Information about the library's classes and how they are hit by keep rules. | |
| ItemCollectionSummary classes = 3; | |
| // Ditto, for fields. | |
| ItemCollectionSummary fields = 4; | |
| // Ditto, for methods. | |
| ItemCollectionSummary methods = 5; | |
| } | |
| message ConfigurationSummary { | |
| // Keep rules and their keep radius. Useful for manual inspection. | |
| repeated KeepRuleKeepRadiusSummary keep_rules = 1; | |
| // Package wide keep rules and their keep radius. | |
| repeated KeepRuleKeepRadiusSummary used_package_wide_keep_rules = 2; | |
| // Unused package wide keep rules, i.e., rules with zero keep radius. | |
| // These rules likely target packages not part of the current library. | |
| repeated KeepRuleKeepRadiusSummary unused_package_wide_keep_rules = 3; | |
| } | |
| message ItemCollectionSummary { | |
| // Total number of items (classes, fields or methods) in the input. | |
| int32 item_count = 1; | |
| // Total number of items that are matched by one or more keep rules. | |
| int32 kept_item_count = 2; | |
| // Total number of items where obfuscation is prohibited. | |
| int32 no_obfuscation_count = 3; | |
| // Total number of items where optimization is prohibited. | |
| int32 no_optimization_count = 4; | |
| // Total number of items where shrinking is prohibited. | |
| int32 no_shrinking_count = 5; | |
| } | |
| message KeepRuleKeepRadiusSummary { | |
| string source = 1; | |
| int32 kept_item_count = 2; | |
| bool no_obfuscation = 3; | |
| bool no_optimization = 4; | |
| bool no_shrinking = 5; | |
| } | |
| message ValidateConsumerKeepRulesResult { | |
| repeated BlockedConsumerKeepRule blocked_keep_rules = 1; | |
| } | |
| message BlockedConsumerKeepRule { | |
| string source = 1; | |
| } |