1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
// Messages describing APK Set's table of contents (toc.pb entry).
// Please be advised that the ultimate source is at
// https://github.com/google/bundletool/tree/master/src/main/proto
// so you have been warned.
syntax = "proto3";
package android.bundle;
import "config.proto";
import "targeting.proto";
option go_package = "android_bundle_proto";
option java_package = "com.android.bundle";
// Describes the output of the "build-apks" command.
message BuildApksResult {
// The package name of this app.
string package_name = 4;
// List of the created variants.
repeated Variant variant = 1;
// Metadata about BundleTool used to build the APKs.
Bundletool bundletool = 2;
// List of the created asset slices.
repeated AssetSliceSet asset_slice_set = 3;
// Information about local testing mode.
LocalTestingInfo local_testing_info = 5;
}
// Variant is a group of APKs that covers a part of the device configuration
// space. APKs from multiple variants are never combined on one device.
message Variant {
// Variant-level targeting.
// This targeting is fairly high-level and each APK has its own targeting as
// well.
VariantTargeting targeting = 1;
// Set of APKs, one set per module.
repeated ApkSet apk_set = 2;
// Number of the variant, starting at 0 (unless overridden).
// A device will receive APKs from the first variant that matches the device
// configuration, with higher variant numbers having priority over lower
// variant numbers.
uint32 variant_number = 3;
}
// Represents a module.
// For pre-L devices multiple modules (possibly all) may be merged into one.
message ApkSet {
ModuleMetadata module_metadata = 1;
// APKs.
repeated ApkDescription apk_description = 2;
}
message ModuleMetadata {
// Module name.
string name = 1;
// Indicates the delivery type (e.g. on-demand) of the module.
DeliveryType delivery_type = 6;
// Indicates whether this module is marked "instant".
bool is_instant = 3;
// Names of the modules that this module directly depends on.
// Each module implicitly depends on the base module.
repeated string dependencies = 4;
// The targeting that makes a conditional module installed.
// Relevant only for Split APKs.
ModuleTargeting targeting = 5;
// Deprecated. Please use delivery_type.
bool on_demand_deprecated = 2 [deprecated = true];
}
// Set of asset slices belonging to a single asset module.
message AssetSliceSet {
// Module level metadata.
AssetModuleMetadata asset_module_metadata = 1;
// Asset slices.
repeated ApkDescription apk_description = 2;
}
message AssetModuleMetadata {
// Module name.
string name = 1;
// Indicates the delivery type for persistent install.
DeliveryType delivery_type = 4;
// Metadata for instant installs.
InstantMetadata instant_metadata = 3;
// Deprecated. Use delivery_type.
bool on_demand_deprecated = 2 [deprecated = true];
}
message InstantMetadata {
// Indicates whether this module is marked "instant".
bool is_instant = 1;
// Indicates the delivery type for instant install.
DeliveryType delivery_type = 3;
// Deprecated. Use delivery_type.
bool on_demand_deprecated = 2 [deprecated = true];
}
enum DeliveryType {
UNKNOWN_DELIVERY_TYPE = 0;
INSTALL_TIME = 1;
ON_DEMAND = 2;
FAST_FOLLOW = 3;
}
message ApkDescription {
ApkTargeting targeting = 1;
// Path to the APK file.
// BEGIN-INTERNAL
// The path may be a blobkey if the proto is not constructed by bundletool.
// END-INTERNAL
string path = 2;
oneof apk_metadata_oneof_value {
// Set only for Split APKs.
SplitApkMetadata split_apk_metadata = 3;
// Set only for standalone APKs.
StandaloneApkMetadata standalone_apk_metadata = 4;
// Set only for Instant split APKs.
SplitApkMetadata instant_apk_metadata = 5;
// Set only for system APKs.
SystemApkMetadata system_apk_metadata = 6;
// Set only for asset slices.
SplitApkMetadata asset_slice_metadata = 7;
// Set only for APEX APKs.
ApexApkMetadata apex_apk_metadata = 8;
}
}
// Holds data specific to Split APKs.
message SplitApkMetadata {
string split_id = 1;
// Indicates whether this APK is the master split of the module.
bool is_master_split = 2;
}
// Holds data specific to Standalone APKs.
message StandaloneApkMetadata {
// Names of the modules fused in this standalone APK.
repeated string fused_module_name = 1;
reserved 2;
}
// Holds data specific to system APKs.
message SystemApkMetadata {
// Names of the modules fused in this system APK.
repeated string fused_module_name = 1;
enum SystemApkType {
UNSPECIFIED_VALUE = 0;
// Uncompressed APK for system image.
SYSTEM = 1;
// Stub APK for compressed APK in the system image
// (contains only android manifest).
SYSTEM_STUB = 2;
// Compressed APK for system image.
SYSTEM_COMPRESSED = 3;
}
// Indicates whether the APK is uncompressed system APK, stub APK or
// compressed system APK.
SystemApkType system_apk_type = 2;
}
// Holds data specific to APEX APKs.
message ApexApkMetadata {
// Configuration for processing of APKs embedded in an APEX image.
repeated ApexEmbeddedApkConfig apex_embedded_apk_config = 1;
}
message LocalTestingInfo {
// Indicates if the bundle is built in local testing mode.
bool enabled = 1;
// The local testing path, as specified in the base manifest.
// This refers to the relative path on the external directory of the app where
// APKs will be pushed for local testing.
// Set only if local testing is enabled.
string local_testing_path = 2;
}
|