Class: Android::AXMLWriter
- Inherits:
-
AXMLParser
- Object
- AXMLParser
- Android::AXMLWriter
- Defined in:
- lib/android/axml_writer.rb
Constant Summary
Constants inherited from AXMLParser
Android::AXMLParser::HEADER, Android::AXMLParser::TAG_CDSECT, Android::AXMLParser::TAG_END, Android::AXMLParser::TAG_END_NAMESPACE, Android::AXMLParser::TAG_ENTITY_REF, Android::AXMLParser::TAG_START, Android::AXMLParser::TAG_START_NAMESPACE, Android::AXMLParser::TAG_TEXT, Android::AXMLParser::VAL_TYPE_ATTRIBUTE, Android::AXMLParser::VAL_TYPE_DIMENSION, Android::AXMLParser::VAL_TYPE_FLOAT, Android::AXMLParser::VAL_TYPE_FRACTION, Android::AXMLParser::VAL_TYPE_INT_BOOLEAN, Android::AXMLParser::VAL_TYPE_INT_COLOR_ARGB4, Android::AXMLParser::VAL_TYPE_INT_COLOR_ARGB8, Android::AXMLParser::VAL_TYPE_INT_COLOR_RGB4, Android::AXMLParser::VAL_TYPE_INT_COLOR_RGB8, Android::AXMLParser::VAL_TYPE_INT_DEC, Android::AXMLParser::VAL_TYPE_INT_HEX, Android::AXMLParser::VAL_TYPE_NULL, Android::AXMLParser::VAL_TYPE_REFERENCE, Android::AXMLParser::VAL_TYPE_STRING
Instance Attribute Summary
Attributes inherited from AXMLParser
Instance Method Summary collapse
- #add_string!(str) ⇒ Object
-
#initialize(axml) ⇒ AXMLWriter
constructor
A new instance of AXMLWriter.
- #modify_metadata!(name, new_value) ⇒ Object
Methods inherited from AXMLParser
axml?, #convert_value, #current_nesting_level, #get_namespace_prefix, #parse, #parse_attribute, #parse_strings, #parse_tags, #short, #word
Constructor Details
#initialize(axml) ⇒ AXMLWriter
Returns a new instance of AXMLWriter.
9 10 11 12 |
# File 'lib/android/axml_writer.rb', line 9 def initialize(axml) @io = StringIO.new(axml, "r+b") @strings = [] end |
Instance Method Details
#add_string!(str) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/android/axml_writer.rb', line 32 def add_string!(str) new_string_id, bytes_added = Resource::ResStringPool.new(@io.string, 8).add_string(str) # Update XML size and positions of metadata attributes. @io.pos = 4 xml_size = @io.read(4).unpack1('V') @io.pos = 4 @io.write([xml_size + bytes_added].pack('V')) @metadata = @metadata.map do || .transform_values do |attribute| attribute[:position] += bytes_added attribute[:val_str_id] += bytes_added attribute end end new_string_id end |
#modify_metadata!(name, new_value) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/android/axml_writer.rb', line 14 def (name, new_value) parse if @doc.nil? entry = @metadata.find { || ['android:name'][:value] == name } raise "Metadata #{name} could not be found and modified" if entry.nil? pos = if entry['android:value'][:is_string] new_string_id = add_string!(new_value) new_value = new_string_id entry['android:value'][:val_str_id] else entry['android:value'][:position] end @io.pos = pos @io.write([new_value].pack('V')) end |