Merge "AAPT2: Parse an ID encoded as a map" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c26ace0754
@@ -416,7 +416,9 @@ std::unique_ptr<LoadedPackage> LoadedPackage::Load(const Chunk& chunk) {
|
|||||||
ATRACE_CALL();
|
ATRACE_CALL();
|
||||||
std::unique_ptr<LoadedPackage> loaded_package{new LoadedPackage()};
|
std::unique_ptr<LoadedPackage> loaded_package{new LoadedPackage()};
|
||||||
|
|
||||||
const ResTable_package* header = chunk.header<ResTable_package>();
|
constexpr size_t kMinPackageSize =
|
||||||
|
sizeof(ResTable_package) - sizeof(ResTable_package::typeIdOffset);
|
||||||
|
const ResTable_package* header = chunk.header<ResTable_package, kMinPackageSize>();
|
||||||
if (header == nullptr) {
|
if (header == nullptr) {
|
||||||
LOG(ERROR) << "Chunk RES_TABLE_PACKAGE_TYPE is too small.";
|
LOG(ERROR) << "Chunk RES_TABLE_PACKAGE_TYPE is too small.";
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace aapt {
|
|||||||
static const char* sMajorVersion = "2";
|
static const char* sMajorVersion = "2";
|
||||||
|
|
||||||
// Update minor version whenever a feature or flag is added.
|
// Update minor version whenever a feature or flag is added.
|
||||||
static const char* sMinorVersion = "11";
|
static const char* sMinorVersion = "12";
|
||||||
|
|
||||||
int PrintVersion() {
|
int PrintVersion() {
|
||||||
std::cerr << "Android Asset Packaging Tool (aapt) " << sMajorVersion << "."
|
std::cerr << "Android Asset Packaging Tool (aapt) " << sMajorVersion << "."
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
# Android Asset Packaging Tool 2.0 (AAPT2) release notes
|
# Android Asset Packaging Tool 2.0 (AAPT2) release notes
|
||||||
|
|
||||||
|
## Version 2.12
|
||||||
|
### `aapt2 optimize ...`
|
||||||
|
- aapt2 optimize now understands map (complex) values under the type `id`. It ignores their
|
||||||
|
contents and interprets them as a sentinel `id` type. This was added to support existing
|
||||||
|
apps that build with their `id` types as map values.
|
||||||
|
AAPT and AAPT2 always generate a simple value for the type `ID`, so it is unclear how some
|
||||||
|
these apps are encoded.
|
||||||
|
|
||||||
## Version 2.11
|
## Version 2.11
|
||||||
### `aapt2 link ...`
|
### `aapt2 link ...`
|
||||||
- Adds the ability to specify assets directories with the -A parameter. Assets work just like
|
- Adds the ability to specify assets directories with the -A parameter. Assets work just like
|
||||||
|
|||||||
@@ -168,10 +168,11 @@ bool BinaryResourceParser::ParseTable(const ResChunk_header* chunk) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool BinaryResourceParser::ParsePackage(const ResChunk_header* chunk) {
|
bool BinaryResourceParser::ParsePackage(const ResChunk_header* chunk) {
|
||||||
const ResTable_package* package_header = ConvertTo<ResTable_package>(chunk);
|
constexpr size_t kMinPackageSize =
|
||||||
|
sizeof(ResTable_package) - sizeof(ResTable_package::typeIdOffset);
|
||||||
|
const ResTable_package* package_header = ConvertTo<ResTable_package, kMinPackageSize>(chunk);
|
||||||
if (!package_header) {
|
if (!package_header) {
|
||||||
context_->GetDiagnostics()->Error(DiagMessage(source_)
|
context_->GetDiagnostics()->Error(DiagMessage(source_) << "corrupt ResTable_package chunk");
|
||||||
<< "corrupt ResTable_package chunk");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -498,8 +499,14 @@ std::unique_ptr<Value> BinaryResourceParser::ParseMapEntry(
|
|||||||
return ParseArray(name, config, map);
|
return ParseArray(name, config, map);
|
||||||
case ResourceType::kPlurals:
|
case ResourceType::kPlurals:
|
||||||
return ParsePlural(name, config, map);
|
return ParsePlural(name, config, map);
|
||||||
|
case ResourceType::kId:
|
||||||
|
// Special case: An ID is not a bag, but some apps have defined the auto-generated
|
||||||
|
// IDs that come from declaring an enum value in an attribute as an empty map...
|
||||||
|
// We can ignore the value here.
|
||||||
|
return util::make_unique<Id>();
|
||||||
default:
|
default:
|
||||||
LOG(FATAL) << "unknown map type";
|
context_->GetDiagnostics()->Error(DiagMessage() << "illegal map type '" << ToString(name.type)
|
||||||
|
<< "' (" << (int)name.type << ")");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
Reference in New Issue
Block a user