AAPT2: allow regexes for extensions to not compress
Change-Id: I09d2ad1d1466643ca7628c6480224e16b9002ee5
Fixes: 67575899
Test: added + manual
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index 8463046..0befb6f 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -268,6 +268,7 @@
bool update_proguard_spec = false;
OutputFormat output_format = OutputFormat::kApk;
std::unordered_set<std::string> extensions_to_not_compress;
+ Maybe<std::regex> regex_to_not_compress;
};
// A sampling of public framework resource IDs.
@@ -377,11 +378,18 @@
}
}
+// TODO(rtmitchell): turn this function into a variable that points to a method that retrieves the
+// compression flag
uint32_t ResourceFileFlattener::GetCompressionFlags(const StringPiece& str) {
if (options_.do_not_compress_anything) {
return 0;
}
+ if (options_.regex_to_not_compress
+ && std::regex_search(str.to_string(), options_.regex_to_not_compress.value())) {
+ return 0;
+ }
+
for (const std::string& extension : options_.extensions_to_not_compress) {
if (util::EndsWith(str, extension)) {
return 0;
@@ -1530,7 +1538,11 @@
for (auto& entry : merged_assets) {
uint32_t compression_flags = ArchiveEntry::kCompress;
std::string extension = file::GetExtension(entry.first).to_string();
- if (options_.extensions_to_not_compress.count(extension) > 0) {
+
+ if (options_.do_not_compress_anything
+ || options_.extensions_to_not_compress.count(extension) > 0
+ || (options_.regex_to_not_compress
+ && std::regex_search(extension, options_.regex_to_not_compress.value()))) {
compression_flags = 0u;
}
@@ -1558,6 +1570,7 @@
file_flattener_options.keep_raw_values = keep_raw_values;
file_flattener_options.do_not_compress_anything = options_.do_not_compress_anything;
file_flattener_options.extensions_to_not_compress = options_.extensions_to_not_compress;
+ file_flattener_options.regex_to_not_compress = options_.regex_to_not_compress;
file_flattener_options.no_auto_version = options_.no_auto_version;
file_flattener_options.no_version_vectors = options_.no_version_vectors;
file_flattener_options.no_version_transitions = options_.no_version_transitions;
@@ -2165,6 +2178,20 @@
}
}
+ if (no_compress_regex) {
+ std::string regex = no_compress_regex.value();
+ if (util::StartsWith(regex, "@")) {
+ const std::string path = regex.substr(1, regex.size() -1);
+ std::string error;
+ if (!file::AppendSetArgsFromFile(path, &options_.extensions_to_not_compress, &error)) {
+ context.GetDiagnostics()->Error(DiagMessage(path) << error);
+ return 1;
+ }
+ } else {
+ options_.regex_to_not_compress = GetRegularExpression(no_compress_regex.value());
+ }
+ }
+
// Populate some default no-compress extensions that are already compressed.
options_.extensions_to_not_compress.insert(
{".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg",