Loading tools/aapt2/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ main := Main.cpp sources := \ compile/IdAssigner.cpp \ compile/Png.cpp \ compile/PseudolocaleGenerator.cpp \ compile/Pseudolocalizer.cpp \ compile/XmlIdCollector.cpp \ flatten/Archive.cpp \ flatten/TableFlattener.cpp \ Loading Loading @@ -66,6 +68,8 @@ sources := \ testSources := \ compile/IdAssigner_test.cpp \ compile/PseudolocaleGenerator_test.cpp \ compile/Pseudolocalizer_test.cpp \ compile/XmlIdCollector_test.cpp \ flatten/FileExportWriter_test.cpp \ flatten/TableFlattener_test.cpp \ Loading tools/aapt2/ResourceParser.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -564,8 +564,10 @@ bool ResourceParser::parseString(xml::XmlPullParser* parser, ParsedResource* out return false; } if (formatted && translateable) { if (String* stringValue = valueCast<String>(outResource->value.get())) { stringValue->setTranslateable(translateable); if (formatted && translateable) { if (!util::verifyJavaStringFormat(*stringValue->value)) { mDiag->error(DiagMessage(outResource->source) << "multiple substitutions specified in non-positional format; " Loading @@ -573,6 +575,9 @@ bool ResourceParser::parseString(xml::XmlPullParser* parser, ParsedResource* out return false; } } } else if (StyledString* stringValue = valueCast<StyledString>(outResource->value.get())) { stringValue->setTranslateable(translateable); } return true; } Loading tools/aapt2/ResourceValues.cpp +21 −16 Original line number Diff line number Diff line Loading @@ -36,10 +36,6 @@ void BaseItem<Derived>::accept(RawValueVisitor* visitor) { visitor->visit(static_cast<Derived*>(this)); } bool Value::isWeak() const { return false; } RawString::RawString(const StringPool::Ref& ref) : value(ref) { } Loading Loading @@ -101,10 +97,6 @@ void Reference::print(std::ostream* out) const { } } bool Id::isWeak() const { return true; } bool Id::flatten(android::Res_value* out) const { out->dataType = android::Res_value::TYPE_INT_BOOLEAN; out->data = util::hostToDevice32(0); Loading @@ -119,7 +111,15 @@ void Id::print(std::ostream* out) const { *out << "(id)"; } String::String(const StringPool::Ref& ref) : value(ref) { String::String(const StringPool::Ref& ref) : value(ref), mTranslateable(true) { } void String::setTranslateable(bool val) { mTranslateable = val; } bool String::isTranslateable() const { return mTranslateable; } bool String::flatten(android::Res_value* outValue) const { Loading @@ -144,7 +144,15 @@ void String::print(std::ostream* out) const { *out << "(string) \"" << *value << "\""; } StyledString::StyledString(const StringPool::StyleRef& ref) : value(ref) { StyledString::StyledString(const StringPool::StyleRef& ref) : value(ref), mTranslateable(true) { } void StyledString::setTranslateable(bool val) { mTranslateable = val; } bool StyledString::isTranslateable() const { return mTranslateable; } bool StyledString::flatten(android::Res_value* outValue) const { Loading Loading @@ -238,13 +246,10 @@ void BinaryPrimitive::print(std::ostream* out) const { } Attribute::Attribute(bool w, uint32_t t) : weak(w), typeMask(t), typeMask(t), minInt(std::numeric_limits<int32_t>::min()), maxInt(std::numeric_limits<int32_t>::max()) { } bool Attribute::isWeak() const { return weak; mWeak = w; } Attribute* Attribute::clone(StringPool* /*newPool*/) const { Loading Loading @@ -359,7 +364,7 @@ void Attribute::print(std::ostream* out) const { << "]"; } if (weak) { if (isWeak()) { *out << " [weak]"; } } Loading tools/aapt2/ResourceValues.h +26 −5 Original line number Diff line number Diff line Loading @@ -43,9 +43,15 @@ struct Value { /** * Whether this value is weak and can be overridden without * warning or error. Default for base class is false. * warning or error. Default is false. */ virtual bool isWeak() const; bool isWeak() const { return mWeak; } void setWeak(bool val) { mWeak = val; } /** * Returns the source where this value was defined. Loading Loading @@ -95,6 +101,7 @@ struct Value { protected: Source mSource; std::u16string mComment; bool mWeak = false; }; /** Loading Loading @@ -159,7 +166,7 @@ struct Reference : public BaseItem<Reference> { * An ID resource. Has no real value, just a place holder. */ struct Id : public BaseItem<Id> { bool isWeak() const override; Id() { mWeak = true; } bool flatten(android::Res_value* out) const override; Id* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; Loading @@ -185,9 +192,17 @@ struct String : public BaseItem<String> { String(const StringPool::Ref& ref); // Whether the string is marked as translateable. This does not persist when flattened. // It is only used during compilation phase. void setTranslateable(bool val); bool isTranslateable() const; bool flatten(android::Res_value* outValue) const override; String* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; private: bool mTranslateable; }; struct StyledString : public BaseItem<StyledString> { Loading @@ -195,9 +210,17 @@ struct StyledString : public BaseItem<StyledString> { StyledString(const StringPool::StyleRef& ref); // Whether the string is marked as translateable. This does not persist when flattened. // It is only used during compilation phase. void setTranslateable(bool val); bool isTranslateable() const; bool flatten(android::Res_value* outValue) const override; StyledString* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; private: bool mTranslateable; }; struct FileReference : public BaseItem<FileReference> { Loading Loading @@ -232,7 +255,6 @@ struct Attribute : public BaseValue<Attribute> { uint32_t value; }; bool weak; uint32_t typeMask; int32_t minInt; int32_t maxInt; Loading @@ -240,7 +262,6 @@ struct Attribute : public BaseValue<Attribute> { Attribute(bool w, uint32_t t = 0u); bool isWeak() const override; Attribute* clone(StringPool* newPool) const override; void printMask(std::ostream* out) const; void print(std::ostream* out) const override; Loading tools/aapt2/compile/Compile.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "ResourceTable.h" #include "compile/IdAssigner.h" #include "compile/Png.h" #include "compile/PseudolocaleGenerator.h" #include "compile/XmlIdCollector.h" #include "flatten/Archive.h" #include "flatten/FileExportWriter.h" Loading Loading @@ -105,6 +106,7 @@ struct CompileOptions { std::string outputPath; Maybe<std::string> resDir; Maybe<std::u16string> product; bool pseudolocalize = false; bool verbose = false; }; Loading Loading @@ -203,6 +205,16 @@ static bool compileTable(IAaptContext* context, const CompileOptions& options, fin.close(); } if (options.pseudolocalize) { // Generate pseudo-localized strings (en-XA and ar-XB). // These are created as weak symbols, and are only generated from default configuration // strings and plurals. PseudolocaleGenerator pseudolocaleGenerator; if (!pseudolocaleGenerator.consume(context, &table)) { return false; } } // Ensure we have the compilation package at least. table.createPackage(context->getCompilationPackage()); Loading Loading @@ -423,6 +435,8 @@ int compile(const std::vector<StringPiece>& args) { .requiredFlag("-o", "Output path", &options.outputPath) .optionalFlag("--product", "Product type to compile", &product) .optionalFlag("--dir", "Directory to scan for resources", &options.resDir) .optionalSwitch("--pseudo-localize", "Generate resources for pseudo-locales " "(en-XA and ar-XB)", &options.pseudolocalize) .optionalSwitch("-v", "Enables verbose logging", &options.verbose); if (!flags.parse("aapt2 compile", args, &std::cerr)) { return 1; Loading Loading
tools/aapt2/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ main := Main.cpp sources := \ compile/IdAssigner.cpp \ compile/Png.cpp \ compile/PseudolocaleGenerator.cpp \ compile/Pseudolocalizer.cpp \ compile/XmlIdCollector.cpp \ flatten/Archive.cpp \ flatten/TableFlattener.cpp \ Loading Loading @@ -66,6 +68,8 @@ sources := \ testSources := \ compile/IdAssigner_test.cpp \ compile/PseudolocaleGenerator_test.cpp \ compile/Pseudolocalizer_test.cpp \ compile/XmlIdCollector_test.cpp \ flatten/FileExportWriter_test.cpp \ flatten/TableFlattener_test.cpp \ Loading
tools/aapt2/ResourceParser.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -564,8 +564,10 @@ bool ResourceParser::parseString(xml::XmlPullParser* parser, ParsedResource* out return false; } if (formatted && translateable) { if (String* stringValue = valueCast<String>(outResource->value.get())) { stringValue->setTranslateable(translateable); if (formatted && translateable) { if (!util::verifyJavaStringFormat(*stringValue->value)) { mDiag->error(DiagMessage(outResource->source) << "multiple substitutions specified in non-positional format; " Loading @@ -573,6 +575,9 @@ bool ResourceParser::parseString(xml::XmlPullParser* parser, ParsedResource* out return false; } } } else if (StyledString* stringValue = valueCast<StyledString>(outResource->value.get())) { stringValue->setTranslateable(translateable); } return true; } Loading
tools/aapt2/ResourceValues.cpp +21 −16 Original line number Diff line number Diff line Loading @@ -36,10 +36,6 @@ void BaseItem<Derived>::accept(RawValueVisitor* visitor) { visitor->visit(static_cast<Derived*>(this)); } bool Value::isWeak() const { return false; } RawString::RawString(const StringPool::Ref& ref) : value(ref) { } Loading Loading @@ -101,10 +97,6 @@ void Reference::print(std::ostream* out) const { } } bool Id::isWeak() const { return true; } bool Id::flatten(android::Res_value* out) const { out->dataType = android::Res_value::TYPE_INT_BOOLEAN; out->data = util::hostToDevice32(0); Loading @@ -119,7 +111,15 @@ void Id::print(std::ostream* out) const { *out << "(id)"; } String::String(const StringPool::Ref& ref) : value(ref) { String::String(const StringPool::Ref& ref) : value(ref), mTranslateable(true) { } void String::setTranslateable(bool val) { mTranslateable = val; } bool String::isTranslateable() const { return mTranslateable; } bool String::flatten(android::Res_value* outValue) const { Loading @@ -144,7 +144,15 @@ void String::print(std::ostream* out) const { *out << "(string) \"" << *value << "\""; } StyledString::StyledString(const StringPool::StyleRef& ref) : value(ref) { StyledString::StyledString(const StringPool::StyleRef& ref) : value(ref), mTranslateable(true) { } void StyledString::setTranslateable(bool val) { mTranslateable = val; } bool StyledString::isTranslateable() const { return mTranslateable; } bool StyledString::flatten(android::Res_value* outValue) const { Loading Loading @@ -238,13 +246,10 @@ void BinaryPrimitive::print(std::ostream* out) const { } Attribute::Attribute(bool w, uint32_t t) : weak(w), typeMask(t), typeMask(t), minInt(std::numeric_limits<int32_t>::min()), maxInt(std::numeric_limits<int32_t>::max()) { } bool Attribute::isWeak() const { return weak; mWeak = w; } Attribute* Attribute::clone(StringPool* /*newPool*/) const { Loading Loading @@ -359,7 +364,7 @@ void Attribute::print(std::ostream* out) const { << "]"; } if (weak) { if (isWeak()) { *out << " [weak]"; } } Loading
tools/aapt2/ResourceValues.h +26 −5 Original line number Diff line number Diff line Loading @@ -43,9 +43,15 @@ struct Value { /** * Whether this value is weak and can be overridden without * warning or error. Default for base class is false. * warning or error. Default is false. */ virtual bool isWeak() const; bool isWeak() const { return mWeak; } void setWeak(bool val) { mWeak = val; } /** * Returns the source where this value was defined. Loading Loading @@ -95,6 +101,7 @@ struct Value { protected: Source mSource; std::u16string mComment; bool mWeak = false; }; /** Loading Loading @@ -159,7 +166,7 @@ struct Reference : public BaseItem<Reference> { * An ID resource. Has no real value, just a place holder. */ struct Id : public BaseItem<Id> { bool isWeak() const override; Id() { mWeak = true; } bool flatten(android::Res_value* out) const override; Id* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; Loading @@ -185,9 +192,17 @@ struct String : public BaseItem<String> { String(const StringPool::Ref& ref); // Whether the string is marked as translateable. This does not persist when flattened. // It is only used during compilation phase. void setTranslateable(bool val); bool isTranslateable() const; bool flatten(android::Res_value* outValue) const override; String* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; private: bool mTranslateable; }; struct StyledString : public BaseItem<StyledString> { Loading @@ -195,9 +210,17 @@ struct StyledString : public BaseItem<StyledString> { StyledString(const StringPool::StyleRef& ref); // Whether the string is marked as translateable. This does not persist when flattened. // It is only used during compilation phase. void setTranslateable(bool val); bool isTranslateable() const; bool flatten(android::Res_value* outValue) const override; StyledString* clone(StringPool* newPool) const override; void print(std::ostream* out) const override; private: bool mTranslateable; }; struct FileReference : public BaseItem<FileReference> { Loading Loading @@ -232,7 +255,6 @@ struct Attribute : public BaseValue<Attribute> { uint32_t value; }; bool weak; uint32_t typeMask; int32_t minInt; int32_t maxInt; Loading @@ -240,7 +262,6 @@ struct Attribute : public BaseValue<Attribute> { Attribute(bool w, uint32_t t = 0u); bool isWeak() const override; Attribute* clone(StringPool* newPool) const override; void printMask(std::ostream* out) const; void print(std::ostream* out) const override; Loading
tools/aapt2/compile/Compile.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "ResourceTable.h" #include "compile/IdAssigner.h" #include "compile/Png.h" #include "compile/PseudolocaleGenerator.h" #include "compile/XmlIdCollector.h" #include "flatten/Archive.h" #include "flatten/FileExportWriter.h" Loading Loading @@ -105,6 +106,7 @@ struct CompileOptions { std::string outputPath; Maybe<std::string> resDir; Maybe<std::u16string> product; bool pseudolocalize = false; bool verbose = false; }; Loading Loading @@ -203,6 +205,16 @@ static bool compileTable(IAaptContext* context, const CompileOptions& options, fin.close(); } if (options.pseudolocalize) { // Generate pseudo-localized strings (en-XA and ar-XB). // These are created as weak symbols, and are only generated from default configuration // strings and plurals. PseudolocaleGenerator pseudolocaleGenerator; if (!pseudolocaleGenerator.consume(context, &table)) { return false; } } // Ensure we have the compilation package at least. table.createPackage(context->getCompilationPackage()); Loading Loading @@ -423,6 +435,8 @@ int compile(const std::vector<StringPiece>& args) { .requiredFlag("-o", "Output path", &options.outputPath) .optionalFlag("--product", "Product type to compile", &product) .optionalFlag("--dir", "Directory to scan for resources", &options.resDir) .optionalSwitch("--pseudo-localize", "Generate resources for pseudo-locales " "(en-XA and ar-XB)", &options.pseudolocalize) .optionalSwitch("-v", "Enables verbose logging", &options.verbose); if (!flags.parse("aapt2 compile", args, &std::cerr)) { return 1; Loading